创建函数
使用 def 定义函数:
def func_name(param1, param2, ...):
pass
Python 2 中,内建的 callable 函数可以用来判断函数是否可调用:
>>> import math
>>> x = 1
>>> y = math.sqrt
>>> callable(x)
False
>>> callable(y)
True
函数 callable 在 Python 3 中不再使用,需使用表达式 hasattr(func, call)代替.请参见第七章.
记录函数
如果想要给函数写文档,可以加注释(以 # 开头).另外一个方式就是直接写上字符串.这类字符串在其他地方可能会非常有用,比如在 def 语句后面(以及在模块或者类的开头).
如果在函数的开头写下字符串,它就会作为函数的一部分进行存储,这称为文档字符串.
>>> def squre(x):
... 'Calculates the square of the number x.'
... return x * x
...
>>> squre.__doc__ # __doc__ 是函数属性
'Calculates the square of the number x.'
内建的 help 函数是非常有用的.在交互式解释器中使用它,就可以得到关于函数,包括它的文档字符串的信息.
>>> help(squre)
Help on function squre in module __main__:
squre(x)
Calculates the square of the number x.
所有的函数都返回了东西:当不需要它们返回值的时候,它们就返回 None.
>>> def func():
... pass
...
>>> print func()
None
>>> print func
<function func at 0x7f1845f04668>
函数的参数
注: 参数存储在局部作用域内
>>> def try_to_change(n):
... n = 'Mr. Gumby'
...
>>> name = 'Mr. Entity'
>>> try_to_change(name)
>>> name
'Mr. Entity'
字符串(以及数字和元组)是不可变的,即无法被修改(也就是说只能用新的值覆盖).
对于可变的数据结构:
>>> def change(n):
... n[0] = "wang"
...
>>> names = ["Mr.wang", "hello"]
>>> change(names)
>>> print names
['wang', 'hello']
>>> names = ['sss', 'www']
>>> n = names
>>> n[0] = 'dsds'
>>> print n
['dsds', 'www']
>>> print names
['dsds', 'www']
当两个变量同时引用一个列表时,它们的确是同时引用一个列表,都可以修改列表中的值. 如果想避免这种情况,可以复制一个列表的副本.
>>> names = ['www', 'sss']
>>> n = names[:]
>>> n[0] = 'swws'
>>> print n
['swws', 'sss']
>>> print names
['www', 'sss']