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改变日志(logging)存放位置的示例
Mar 27 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 Python
在python中使用with打开多个文件的方法
Jan 07 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
python3.6+django2.0+mysql搭建网站过程详解
Jul 24 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
Python和Anaconda和Pycharm安装教程图文详解
Feb 04 Python
python字典和json.dumps()的遇到的坑分析
Mar 11 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 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
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
php安装swoole扩展的方法
2015/03/19 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
JS时间特效最常用的三款
2015/08/19 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
Python深入学习之对象的属性
2014/08/31 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
python放大图片和画方格实现算法
2018/03/30 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
python openpyxl使用方法详解
2019/07/18 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
Python sys模块常用方法解析
2020/02/20 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
自动化专业个人求职信范文
2013/12/30 职场文书
管事部库房保管员岗位职责
2014/02/21 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
教师产假请假条
2014/04/10 职场文书
股票投资建议书
2014/05/19 职场文书
物流管理专业推荐信
2014/09/06 职场文书
党校学习心得体会范文
2014/09/09 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
javascript的var与let,const之间的区别详解
2022/02/18 Javascript