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 动态获取当前运行的类名和函数名的方法
Apr 15 Python
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
pandas对指定列进行填充的方法
Apr 11 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
python+pyqt5实现24点小游戏
Jan 24 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
详解使用Python下载文件的几种方法
Oct 13 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
django项目中使用云片网发送短信验证码的实现
Jan 19 Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 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图片上传类带图片显示
2006/11/25 PHP
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
Javascript模板技术
2007/04/27 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
js实现购物车功能
2018/06/12 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
Python脚本实现代码行数统计代码分享
2015/03/10 Python
Python中使用dom模块生成XML文件示例
2015/04/05 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
python dict如何定义
2020/09/02 Python
美国网上书店:Barnes & Noble
2018/08/15 全球购物
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
考试不及格检讨书
2014/01/09 职场文书
计算机专业毕业生自我鉴定
2014/01/16 职场文书
车辆转让协议书
2014/04/15 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
旷课检讨书范文
2015/01/27 职场文书
跑出一片天观后感
2015/06/08 职场文书