一:返回值
当没有显式地返回元素时,Python 会返回一个None。如果函数返回多个对象,python 把他们聚集起来并以一个元组返回。
二:创建函数
1:强烈推荐,在函数体之前,编写函数的文档字符串。
2:在某些语言中,函数声明和函数定义区分开的。但在Python中,将这两者视为一体,函数的子句由声明的标题行以及随后的定义体组成的。
3:和其他高级语言类似,Python 也不允许在函数未声明(定义)之前,对其进行引用或者调用。下面给出几个例子来看一下:
def foo(): print 'in foo()' bar()
此时如果调用函数foo(),肯定会失败,因为函数bar()还没有定义:
>>> foo() in foo() Traceback (innermost last): File"<stdin>", line 1, in ? File "<stdin>", line 3, infoo NameError: bar
现在在函数foo()前给出bar()的定义:
def bar(): print 'in bar()' def foo(): print 'in foo()' bar()
现在可以安全的调用foo(),而不会出现任何问题:
>>> foo() in foo() in bar()
甚至也可以在函数bar()前定义函数foo():
def foo(): print 'in foo()' bar() def bar(): print 'in bar()' >>> foo() in foo() in bar()
这段代码是正确的因为:即使(在foo()中)对bar()进行的调用出现在bar()的定义之前,但foo()本身不是在bar()声明之前被调用的。换句话说,先声明foo(),然后再声明bar(),接着调用foo(),但是到那时,bar()已经存在了,所以调用成功。(这一点,在C语言中,是不成立的。)
4:除了加注释帮助理解函数之外,还有一种方式就是文档字符串。如果在函数的开头写下字符串,它就会作为函数的一部分进行存储,称为文档字符串。
5:函数也具有属性,可以自定义任何函数属性,可以在函数体之外定义函数属性。比如:
def foo(): 'foo() -- properly created doc string' foo.__hehe__ = 'foohehe' def bar(): pass bar.__doc__ = 'Oops, forgot the doc strabove' bar.version = 0.1 bar.hehe = 'barhehe'
三:内部函数
在函数体内创建另外一个函数(对象)是完全合法的。这种函数叫做内部/内嵌函数。比如:
def outer(): print'in outer' def inner(): print'in inner' inner() outer()
结果是:
in outer in inner
内部函数在外部函数的作用域之内。如果没有任何对inner ()的外部引用,那么除了在函数体内,任何地方都不能对其进行调用。
五:传递函数
在Python中,函数也是一种对象,所以,函数可以被引用的,也作为参数传入函数,以及作为列表和字典等等容器对象的元素。
函数有一个独一无二的特征使它同其他对象区分开来,那就是函数是可调用的。