Python中的函数,无论是命名函数,还是匿名函数,都是语句和表达式的集合。在Python中,函数是第一个类对象,这意味着函数的用法并没有限制。Python函数的使用方式就像Python中其他值一样,例如字符串和数字等。Python函数拥有一些属性,通过使用Python内置函数dir就能查看这些属性,如下代码所示:
| 12345678 | 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__返回指定函数的文档字符串。
| 123456 | def square(x): \”\”\”return square of given number\”\”\” return x**2 >>> square.__doc__\’return square of given number\’ |
2. __name__返回函数名字。
| 123456 | def square(x): \”\”\”return square of given number\”\”\” return x**2 >>> square.func_name\’square\’ |
3. __module__返回函数定义所在模块的名字。
| 123456 | def square(x): \”\”\”return square of given number\”\”\” return x**2 >>> square.__module__\’__main__\’ |
4. func_defaults返回一个包含默认参数值的元组,默认参数将在后文进行讨论。
5. func_globals返回一个包含函数全局变量的字典引用。
| 123456 | 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返回支持任意函数属性的命名空间。
| 123456 | def square(x): \”\”\”return square of given number\”\”\” return x**2 >>> square.func_dict{} |
7. func_closure返回一个胞体元组,其中胞体包含了函数自由变量的绑定,闭包将在后文讨论。
函数可以作为参数传递给其他函数。这些以其他函数作为参数的函数通常称为更高阶函数,这就构成了函数式编程中一个非常重要的部分。高阶函数一个很好的例子就是map函数,该函数接受一个函数和一个迭代器作为参数,并将函数应用于迭代器中的每一项,最后返回一个新的列表。我们将在下面的例子中演示这一点,例子中将前面定义的square函数和一个数字迭代器传递给map函数。