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实现抓取页面上链接的简单爬虫分享
Jan 21 Python
python通过openpyxl生成Excel文件的方法
May 12 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
python实现可视化动态CPU性能监控
Jun 21 Python
Django model序列化为json的方法示例
Oct 16 Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 Python
python如何将多个PDF进行合并
Aug 13 Python
python3中pip3安装出错,找不到SSL的解决方式
Dec 12 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 Python
Pytorch实现图像识别之数字识别(附详细注释)
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中使用Oracle数据库(3)
2006/10/09 PHP
php实现网站插件机制的方法
2009/11/10 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
2014/08/20 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
js 居中漂浮广告
2010/03/21 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
Jquery中删除元素的实现代码
2011/12/29 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
js常用DOM方法详解
2017/02/04 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
webpack中的模式(mode)使用详解
2020/02/20 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Python中将字典转换为列表的方法
2016/09/21 Python
Python微信公众号开发平台
2018/01/25 Python
python3实现微型的web服务器
2019/09/03 Python
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
环保倡议书格式范文
2014/05/14 职场文书
新党章的学习心得体会
2014/11/07 职场文书
青岛海底世界导游词
2015/02/11 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
PHP RabbitMQ消息列队
2022/05/11 PHP