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利用rsa库做公钥解密的方法教程
Dec 10 Python
简单了解Django模板的使用
Dec 20 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
python selenium执行所有测试用例并生成报告的方法
Feb 13 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
May 05 Python
python分数表示方式和写法
Jun 26 Python
python单例模式原理与创建方法实例分析
Oct 26 Python
python 实现目录复制的三种小结
Dec 04 Python
TFRecord格式存储数据与队列读取实例
Jan 21 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
Django基础CBV装饰器和中间件
Mar 22 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
Cakephp 执行主要流程
2010/03/24 PHP
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
教大家制作简单的php日历
2015/11/17 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
模拟select的代码
2011/10/19 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
初探nodeJS
2017/01/24 NodeJs
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
微信小程序实现表单校验功能
2020/03/30 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
python中实现控制小数点位数的方法
2019/01/24 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
银行求职信怎么写
2014/05/26 职场文书
保护地球的标语
2014/06/17 职场文书
员工安全责任书范本
2014/07/24 职场文书
民政局个人整改措施
2014/09/24 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL
Java实现带图形界面的聊天程序
2022/06/10 Java/Android