函数是在编程中 剪剪贴贴的代替。
有函数以后,才有全局作用域的麻烦。
def 是可执行的代码, 在运行这个之前,函数并不存在。
函数也是对象-函数对象,def创建一个函数对象,并复制给你定义的函数名字。
def这个语句是实时执行的, 创建函数对象,赋值给函数名
在模块导入的时候,会执行一遍模块中的代码。
依赖类型的行为称为多态。
函数是多态的。
作用域就是 命名空间
变量被赋值的地点,绑定一个特定的命名空间。
全局作用域仅限单个文件。
函数内部可以引用全局变量,前提是函数内部没有相同名称的变量。
内置变量会被最后搜索的, 所以你可以使用内置变量,而不需要导入 __builtin__
模块
全局变量不经过声明也可以在函数内部引用
但如果要在函数内部改变全局变量的话,必须要global声明。
名字查找规则:本地作用域,上一层的本地作用域,全局作用域,内置作用域。
函数也可以声明 全局作用域
包闭,在函数内,定义函数 。 或者叫 工厂函数 ,能够在动态的改变函数。
定义__call__
方法后,变量可以像函数一样被使用。
函数的参数
1,普通的位置确定的参数
2,关键字的参数
3,参数默认值
4,* 和** 任意参数
这有个丑陋的例子
还有另一种叫 解包参数,这像是一种偷懒的参数传递方法。
函数对象: 属性和注解
函数是一个对象,就像字符串或者数字那样
函数可以附加任意的用户定义的属性。
lambda 是一种函数速写
map 序列中的映射函数
filter 生成一个 符合条件的新的列表
reduce 将一个列表中的每个元素,都按照某种方式,应用于一个函数,最后得到一个结果。
列表解析: 要实现一个功能,有很多的方法。列表解析就是一个。
生成器函数: 包含yield的def函数,支持迭代协议。
状态挂起,
列表解析比map更强大。map只支持函数。