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实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
python实现ipsec开权限实例
Nov 11 Python
Python循环语句中else的用法总结
Sep 11 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
Django与JS交互的示例代码
Aug 23 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
Django处理文件上传File Uploads的实例
May 28 Python
python对日志进行处理的实例代码
Oct 06 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 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_xmlhttp 乱码问题解决方法
2009/08/07 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
深入PHP FTP类的详解
2013/06/13 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
再谈javascript原型继承
2014/11/10 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python基础教程之常用运算符
2014/08/29 Python
Python学习之asyncore模块用法实例教程
2014/09/29 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
党员自我评议个人对照检查材料
2014/09/16 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
鸡毛信观后感
2015/06/11 职场文书
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL