Python中的函数,无论是命名函数,还是匿名函数,都是语句和表达式的集合。在Python中,函数是第一个类对象,这意味着函数的用法并没有限制。Python函数的使用方式就像Python中其他值一样,例如字符串和数字等。Python函数拥有一些属性,通过使用Python内置函数dir就能查看这些属性,如下代码所示:
1 2 3 4 5 6 7 8 |
def square(x): return x**2 >>> square <function square at 0x031AA230> >>> dir(square) ['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name'] >>> |
其中,一些重要的函数属性包括以下几个:
1. __doc__返回指定函数的文档字符串。
1 2 3 4 5 6 |
def square(x): """return square of given number""" return x**2 >>> square.__doc__ 'return square of given number' |
2. __name__返回函数名字。
1 2 3 4 5 6 |
def square(x): """return square of given number""" return x**2 >>> square.func_name 'square' |
3. __module__返回函数定义所在模块的名字。
1 2 3 4 5 6 |
def square(x): """return square of given number""" return x**2 >>> square.__module__ '__main__' |
4. func_defaults返回一个包含默认参数值的元组,默认参数将在后文进行讨论。
5. func_globals返回一个包含函数全局变量的字典引用。
1 2 3 4 5 6 |
def square(x): """return square of given number""" return x**2 >>> square.func_globals {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'square': <function square at 0x10f099c08>, '__doc__': None, '__package__': None} |
6. func_dict返回支持任意函数属性的命名空间。
1 2 3 4 5 6 |
def square(x): """return square of given number""" return x**2 >>> square.func_dict {} |
7. func_closure返回一个胞体元组,其中胞体包含了函数自由变量的绑定,闭包将在后文讨论。
函数可以作为参数传递给其他函数。这些以其他函数作为参数的函数通常称为更高阶函数,这就构成了函数式编程中一个非常重要的部分。高阶函数一个很好的例子就是map函数,该函数接受一个函数和一个迭代器作为参数,并将函数应用于迭代器中的每一项,最后返回一个新的列表。我们将在下面的例子中演示这一点,例子中将前面定义的square函数和一个数字迭代器传递给map函数。