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写的Socks5协议代理服务器
Aug 06 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
Python中functools模块的常用函数解析
Jun 30 Python
详解python发送各类邮件的主要方法
Dec 22 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
Jul 13 Python
python绘制多个子图的实例
Jul 07 Python
python requests指定出口ip的例子
Jul 25 Python
pytest中文文档之编写断言
Sep 12 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 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中使用模板的方法
2008/05/24 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
PHP缓存机制Output Control详解
2014/07/14 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
web前端vue filter 过滤器
2018/01/12 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
python如何读写csv数据
2018/03/21 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
小加工厂管理制度
2014/01/21 职场文书
公司中层干部的自我评价分享
2014/03/01 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
未中标通知书
2015/04/17 职场文书
交心谈心活动总结
2015/05/11 职场文书
读书笔记格式
2015/07/02 职场文书