Python中的自定义函数学习笔记


Posted in Python onSeptember 23, 2014

定义一个什么都不做的函数

>>> def a():

... pass

...
>>> def printHello():

... print("hello")

...

>>> printHello()

hello

>>> callable(printHello)

True

顾名思义,callable函数用于判断函数是否可以调用;

有书上说,callable在Python3.0中已经不再使用,而使用hasattr(func, '__call__')代替;

>>> hasattr(printHello, '__call__')

True

   

>>> printHello.__doc__

>>> def printHello():

... 'just print hello'

... print('hello')

...

>>> printHello.__doc__

'just print hello'
  
每个函数都有一个__doc__属性,双下划线表示它是个特殊属性;
  
内建的help函数非常有用,可以提供有关方法/函数的帮助信息;
>>> help(printHello)

Python中的自定义函数学习笔记

函数的注释信息包含其中;
  
虽然printHello函数没有使用return,可以用一个变量接收返回值:

>>> result = printHello()

hello

>>> result

>>> print(result)

None
 
None是Python的内建值,类似Javascript的undefined么?
  
定义一个可以接收参数的printStr,用以打印字符串
>>> def printStr(str):

... print(str)

…

   

>>> printStr("hello")

hello
  
像C++一样,Python支持默认参数
>>> def printStr(str="nothing"):

... print(str)

..

   

>>> printStr()

nothing

再来看看传参方式
>>> a = [1,2]

>>> def try_change_list(a):

... a[:] = [1,1,1]

...

>>> try_change_list(a)

>>> a

[1, 1, 1]

Python的传参可以理解为按值传递(同java,Javascript)?
  
BTW:如果不想让try_change_list改变原来的对象,可以传入a[:]
>>> a = [1,2]

>>> try_change_list(a[:])

>>> a

[1, 2]

当然,这里做的是浅拷贝,可以使用copy模块的deepcopy来进行深拷贝;
  
除了支持参数默认值,还支持命名传参:
>>> def sum(a=0, b=0):

... return a + b;

...

>>> sum(2,2)

4

>>> sum(b = 3, a = 4)

7

这种特性在参数较多时比较好用;
  
来看一下,Python对可变参数列表的支持:
>>> def sum(*args):

... s = 0;

... for i in args:

... s += i;

... return s

...

>>> sum(1,2,3,4)

10

这是一个简单的求和例子,不同于C/C++的静态类型,Python并不会限制传入sum函数的参数的类型:
>>> def printArs(*args):

... for a in args:

... print(a)

...

>>> printArs(2, 3, [2,2], (2,), 'df')

2

3

[2, 2]

(2,)

df

>>> printArs(*(2, 3, [2,2], (2,), 'df'))

2

3

[2, 2]

(2,)

df

>>> printArs(*[2, 3, [2,2], (2,), 'df'])

2

3

[2, 2]

(2,)

df

这里的args对应于Javascript的arguments;
  
除了使用使用元组(tuple)接收可变参数,还可以使用dictionary接收命名参数:
>>> def printArs(**args):

... for k in args:

... print(repr(k) + " = " + repr(args[k]))

...

>>>

>>> printArs(name='wyj', age=24)

'name' = 'wyj'

'age' = 24

>>> printArs(**{'name':'wyj', 'age':24})

'name' = 'wyj'

'age' = 24

当然,更复杂地,可以混合使用*arg, **arg, 默认值特性:
Python中的自定义函数学习笔记
Python 相关文章推荐
python数字图像处理之高级滤波代码详解
Nov 23 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
python做反被爬保护的方法
Jul 01 Python
redis数据库及与python交互用法简单示例
Nov 01 Python
python isinstance函数用法详解
Feb 13 Python
Python网络爬虫信息提取mooc代码实例
Mar 06 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
详解Python IO口多路复用
Jun 17 Python
如何利用python进行时间序列分析
Aug 04 Python
如何将json数据转换为python数据
Sep 04 Python
pandas实现导出数据的四种方式
Dec 13 Python
python实现马丁策略的实例详解
Jan 15 Python
Python中的exec、eval使用实例
Sep 23 #Python
Python的高级Git库 Gittle
Sep 22 #Python
Python实现抓取网页并且解析的实例
Sep 20 #Python
跟老齐学Python之字典,你还记得吗?
Sep 20 #Python
跟老齐学Python之再深点,更懂list
Sep 20 #Python
跟老齐学Python之画圈还不简单吗?
Sep 20 #Python
跟老齐学Python之list和str比较
Sep 20 #Python
You might like
文件上传类
2006/10/09 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python 常用 PEP8 编码规范详解
2017/01/22 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
Python同时迭代多个序列的方法
2020/07/28 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
房地产还款计划书
2014/01/10 职场文书
厨师长岗位职责
2014/03/02 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
2014年度个人工作总结
2014/11/07 职场文书
初中中等生评语
2014/12/29 职场文书
居安思危观后感
2015/06/11 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
使用scrapy实现增量式爬取方式
2022/06/21 Python