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 提取文件的小程序
Jul 29 Python
python之wxPython菜单使用详解
Sep 28 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
Python3 无重复字符的最长子串的实现
Oct 08 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
Python如何实现的二分查找算法
May 27 Python
python 多线程爬取壁纸网站的示例
Feb 20 Python
关于Python中*args和**kwargs的深入理解
Aug 07 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
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php实现无限级分类实现代码(递归方法)
2011/01/01 PHP
PHP图片处理类 phpThumb参数用法介绍
2012/03/11 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
在小程序中使用canvas的方法示例
2018/09/17 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
小程序实现搜索框
2020/06/19 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python函数返回值实例分析
2015/06/08 Python
Python实现的矩阵类实例
2017/08/22 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
Python常用外部指令执行代码实例
2020/11/05 Python
python os.listdir()乱码解决方案
2021/01/31 Python
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
社区活动邀请函范文
2014/01/29 职场文书
森林防火标语
2014/06/23 职场文书
接收函格式
2015/01/30 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js