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 相关文章推荐
在Django中使用Sitemap的方法讲解
Jul 22 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
python用Pygal如何生成漂亮的SVG图像详解
Feb 10 Python
Python实现购物系统(示例讲解)
Sep 13 Python
Python AES加密实例解析
Jan 18 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
python文件转为exe文件的方法及用法详解
Jul 08 Python
Python  Django 母版和继承解析
Aug 09 Python
Python如何转换字符串大小写
Jun 04 Python
python 多线程死锁问题的解决方案
Aug 25 Python
Scrapy实现模拟登录的示例代码
Feb 21 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 读取文件的正确方法
2009/04/29 PHP
PHP中设置时区方法小结
2012/06/03 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
php定界符
2014/06/19 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
基于jquery的多功能软键盘插件
2012/07/25 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
python获取豆瓣电影简介代码分享
2014/01/16 Python
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python获取图片颜色信息的方法
2015/03/18 Python
Python变量作用范围实例分析
2015/07/07 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
了解AppleTalk协议吗
2014/04/01 面试题
数字天堂软件测试面试题
2012/12/23 面试题
外贸公司实习自我鉴定
2013/09/24 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
如何写早恋检讨书
2014/09/10 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
高中运动会广播稿
2015/08/19 职场文书