# 函数 1.Python的函数是由`def`语句编写。Python中,函数也是一种对象类型 * `def`是一个可执行语句。Python与行了`def`语句后函数对象才存在,之前该函数对象不存在 * Python运行到`def`语句时,它将会生成一个新的函数对象,并将该函数对象赋值给这个函数名。函数名成了这个函数对象的引用 * `lambda`表达式创建一个函数对象并返回它,但是它并没有绑定一个名字即它是匿名的没有函数名 * `return`语句将一个结果对象发送给调用者 * `yield`语句使得函数成为一个生成函数 ![函数定义](../imgs/python_17_1.JPG) 2.函数参数没有任何类型约束,返回类型也没有任何类型约束 3.Python函数定义语句: ``` def func_name(arg1,arg2): statement ``` 在执行完`def`语句时,Python创建一个函数对象并将它赋值给`func_name`变量。 * `return`语句是可选的。若无`return`,则默认自动返回`None`对象 * `def`语句可以出现在任何语句可以出现的地方,甚至是嵌套在其他语句中。 * 与C语言不同,Python函数在程序运行之前不需要全部定义。`def`在它定义的地方时才评估,而`def`的之内的代码在函数调用的时候才求值。 ![函数定义与执行区别](../imgs/python_17_2.JPG) 4.函数仅仅是对象类型,函数名也仅仅是变量名,它们没有任何特殊之处。 * 函数对象有函数调用方法`operator ()` * 函数对象允许任意的属性添加`func.attr=value` ![函数对象](../imgs/python_17_3.JPG) 5.函数主体内的代码直到函数被调用时才运行。函数内的变量名在函数实际执行之前都不会解析。