callable(obj)
判断某个函数是否是可调用的。
给函数编写文档
添加独立的字符串。在有些地方,如def语句后面。
放在函数开头的字符串称为文档字符串(docstring),将作为函数的一部分存储起来。
def square(x):
'Calculates the square of the number x.'
return x * x
>>> square.__doc__
'Calculates the square of the number x.'
能修改参数吗
参数如果是可变的数据结构(如列表), 将改变实参。
>>> def change(n):
... n[0] = 'Mr. Gumby'
>>> names = ['Mrs. Entity', 'Mrs. Thing']
>>> change(names)
>>> names
['Mr. Gumby', 'Mrs. Thing']
要避免这样的结果,必须创建列表的副本。n = name[:]
如果是不可变的数据结构:
如果参数是不可变的数据类型,给参数赋值并让这种修改影响函数外部的变量是不可能的。在这种情况下,应从函数返回所有需要的值(如果需要返回多个值,就以元组的方式返回它们)。
如果一定要修改参数,可玩点花样,比如将值放在列表中
>>> def inc(x): x[0] = x[0] + 1
...
>>> foo = [10]
>>> inc(foo) >
>> foo
[11]
关键字参数和默认值
收集参数
def print_params(*params):
print(params)
参数前面的星号将提供的所有值都放在一个元组中.
要收集关键字参数,可使用两个星号。得到一个字典。
分配参数
def add(x, y): return x + y
params = (1, 2)
>>> add(*params)
3
>>> def with_stars(**kwds):
... print(kwds['name'], 'is', kwds['age'], 'years old')
>>> args = {'name': 'Mr. Gumby', 'age': 42}
>>> with_stars(**args)
这在调用超类的构造函数时特别有用
作用域
vars()
返回一个字典,即作用域。
可使用函数globals来访问全局变量。必要时可使用globals()['parameter']
使用一个函数来创建另一个函数。
一个函数位于另一个函数中,且外面的函数返回里面的函数。也就是返回一个函数,而不是调用它。重要的是,返回的函数能够访问其定义所在的作用域。换而言之,它携带着自己所在的环境(和相关的局部变量)!
即闭包。