# 函数
1.Python的函数是由`def`语句编写。Python中,函数也是一种对象类型
* `def`是一个可执行语句。Python与行了`def`语句后函数对象才存在,之前该函数对象不存在
* Python运行到`def`语句时,它将会生成一个新的函数对象,并将该函数对象赋值给这个函数名。函数名成了这个函数对象的引用
* `lambda`表达式创建一个函数对象并返回它,但是它并没有绑定一个名字即它是匿名的没有函数名
* `return`语句将一个结果对象发送给调用者
* `yield`语句使得函数成为一个生成函数

2.函数参数没有任何类型约束,返回类型也没有任何类型约束
3.Python函数定义语句:
```
def func_name(arg1,arg2):
statement
```
在执行完`def`语句时,Python创建一个函数对象并将它赋值给`func_name`变量。
* `return`语句是可选的。若无`return`,则默认自动返回`None`对象
* `def`语句可以出现在任何语句可以出现的地方,甚至是嵌套在其他语句中。
* 与C语言不同,Python函数在程序运行之前不需要全部定义。`def`在它定义的地方时才评估,而`def`的之内的代码在函数调用的时候才求值。

4.函数仅仅是对象类型,函数名也仅仅是变量名,它们没有任何特殊之处。
* 函数对象有函数调用方法`operator ()`
* 函数对象允许任意的属性添加`func.attr=value`

5.函数主体内的代码直到函数被调用时才运行。函数内的变量名在函数实际执行之前都不会解析。