1.def 语句将创建一个函数对象并将其值付给一个变量名。def是一个可执行的语句,一个def可以出现在任一语句可以出现的地方,甚至是嵌套在其他语句中。
2.与C这样的编译语言不同,python函数在程序运行之前并不需要全部定义。(def在运行时才评估,def中的代码在函数调用后才会评估。
3.在python中,函数仅仅是对象,可将函数赋值给不同的变量名,并通过新的变量名进行调用。
4.函数允许任意的属性附加到记录信息以供随后使用。
5.Python中的多态:一个操作的意义取决于被操作对象的类型。
6.所有在函数内部进行赋值的变量名都默认为本地变量,所有的本地变量都会在函数调用时出现,并在函数退出时消失。每次对函数的调用都创建了一个新的本地作用域。
7.检查传入函数的对象类型有什么错?检查传入函数的对象类型,实质上就是破坏函数的灵活性,把函数限制在特定的类型上。没有这类检查时,函数可能处理所有的对象类型,任何支持函数所预期的接口的对象都能用(接口指函数所执行的一组方法和表达式运算符)。
8.Python创建、改变或查找变量名都是在所谓的命名空间(一个保存变量名的地方)中进行的,作用域即指命名空间。
9.除了打包代码之外,函数还为程序增加了一个额外的命名空间层,默认情况下,一个函数的所有变量名都是与函数的命名空间相关联的。
10.在任何情况下,一个变量的作用域总是由在代码中被赋值的地方所决定。
11.Python的变量名解析机制(LEGB法则):当在函数中使用未认证的变量名时,Python依次搜索4个作用域【本地作用域(L),上一层结构中def 或 lambda 的本地作用域(E),全局作用域(G),内置作用域(B)】。
12.当在函数中给一个变量名赋值时,Python总是创建或改变本地作用域的变量名,除非它已经在该函数中被声明为全局变量。
13.内置作用域仅仅是一个名为__builtin__的内置模块,必须要import__builtin__之后才能使用内置作用域,因为变量名builtin本身并没有预先内置。
14.global语句告诉python函数打算生成一个或多个全局变量。全局变量是位于模块文件内部的顶层的变量名。global声明的变量名将被映射到整个模块的作用域内。
15.nonlocal语句与global语句的区别是,nonlocal语句应用于嵌套的def 的本地作用域内的名称,而不是嵌套的模块中的名称。如果X在函数内部声明为全局变量,它将会创建或改变变量名X为整个模块的作用域。如果X在函数内部声明为nonlocal,它将会修改最近的嵌套函数的本地作用域中的名称X。
16.当执行nonlocal语句时,nonlocal列出的名称必须在一个嵌套的def中提前定义过,否则会产生一个错误。
17.函数参数的传递是通过自动将对象赋值给本地变量名来实现的。在函数内部的参数名不会影响调用者。改变函数的可变对象参数的值也许会对调用者有影响。
18.不可不参数“通过值”进行传递,可变对象通过“指针”进行传递。
19.在函数头部,*/**意味着收集任意数量的参数,而在调用时,*/**解包任意数量的参数。*元组,**字典。