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 23 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
Python基于Socket实现的简单聊天程序示例
Aug 05 Python
python实现微信小程序自动回复
Sep 10 Python
Python异常的检测和处理方法
Oct 26 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 Python
解决jupyter notebook启动后没有token的坑
Apr 24 Python
学会Python数据可视化必须尝试这7个库
Jun 16 Python
Python基础 括号()[]{}的详解
Nov 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
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
Python实现自动发送邮件功能
2021/03/02 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
德国网上花店:Valentins
2018/08/15 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
教师个人鉴定材料
2014/02/08 职场文书
安全承诺书格式
2014/05/21 职场文书
公司委托书怎么写
2014/08/02 职场文书
社会发展项目建议书
2014/08/25 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
介绍长城的导游词
2015/01/30 职场文书
回复函格式及范文
2015/07/14 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
Java基于字符界面的简易收银台
2021/06/26 Java/Android
解决 redis 无法远程连接
2022/05/15 Redis