一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.…
一.闭包 1. 如果一个函数定义在另一个函数的作用域内,并且引用了外层函数的变量,则该函数称为闭包. def outter(): name='python' def inner(): print name return inner res=outter() 把inner的地址赋值给res res() 相当于执行inner()函数.通过闭包,可以把局部变量在外部也可以使用 2.判断是否为闭包 res.func_closure inner()函数就是一个闭包 3.通过闭包,可以把局部变量在外部也可以…
一.装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等. 装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 装饰器功能: 1. 自动执行装饰器函数 并且将被装饰函数当做参数对象本身,传递进去 2. 将装饰器函数的返回值,重新赋值给被装饰的函数 用伪代码就是如下表示: # 装饰器是一个函数,而其参数为另外一个函数 def…
闭包函数: 1.闭包函数必须在函数内部定义 2.闭包函数可以引用外层函数的名字 闭包函数是 函数嵌套.函数对象.名称空间与作用域 结合体. # 直接传参 def func(x): print(x) func(1000) # 通过闭包函数传参 def outer(number): # number = 100 # inner就是闭包函数 def inner(): print(number) return inner func = outer(1000) # ---> inner地址 ---> f…
1.作用域: 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我要理解两点:a.在全局不能访问到局部定义的变量 b.在局部能够访问到全局定义的变量,但是不能修改全局定义的变量(当然有方法可以修改) 下面我们来看看下面实例: x = 1 def funx(): x = 10 print(x) # 打印出10 funx() print(x) # 打印出1 如果局部没有定义变量x,那么函数内部会从内往外…
一.  函数内嵌 闭包 在python中,函数可以作为返回值, 可以给变量赋值. 在python中, 内置函数必须被显示的调用, 否则不会执行. #!/usr/bin/env python #-*- coding: utf-8 -*- def foo(): m = 4 def bar(): n = 3 d = m + n return d return bar test = foo() print test() #结果:7 #!/usr/bin/env python #-*- coding: u…
''' 一: 名称空间namespaces     名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种     内置名称空间:         1. 特点: 存放是python解释器自带的名字,len,print         2. 生命周期: 解释器启动则产生,解释器关闭则销毁     全局名称空间         1. 特点: 存放是全局的名字(没有任何缩进\顶头定义的名字)         x=10         y=20         def func():    …
一.函数引用 函数可以被引用 函数可以被赋值给一个变量 def hogwarts(): print("hogwarts") # hogwarts() # 函数调用 print(hogwarts) print('----------------') harry = hogwarts # 把函数对象赋值给一个变量 print(harry) print('----------------') harry() # 引用函数 二.闭包函数 闭包的内部函数中,对外部作用域的变量进行引用 闭包无法修…
一.命名空间 1. 命名空间 命名空间是一个字典,key是变量名(包括函数.模块.变量等),value是变量的值. 2. 命名空间的种类和查找顺序 - 局部命名空间:当前函数 - 全局命名空间:当前模块 - 内建命名空间:所有Python环境,所有模块 查找顺序      1.先在当前 (嵌套的或 lambda) 函数的命名空间中搜索      2.然后是在父函数的命名空间中搜索      3.接着是模块命名空间中搜索      4.最后在内置命名空间中搜索 要到内置命名空间都没找到的话,就会弹…
from dis import dis b = 6 def f1(a): print(a)print(b) b = 9 f1(3) print(dis(f1)) # dis模块可以查看python函数字节码 解决报错的方案一:申明b全局变量 from dis import dis b = 6 def f1(a): print(a) global b print(b) b = 9 f1(3) print(dis(f1)) # dis模块可以查看python函数字节码 闭包 计算移动平均值 clas…