Python/函数的嵌套和闭包

Python基础--函数的嵌套和闭包

一、名称空间和作用域

    名称空间:Python所有有关命名的操作都是在操作名称空间,例如变量名,函数名
    1、内置名称空间:Python解释器提供好的功能,解释器启动跟着一起启动,是全局作用域
    2、全局名称空间:Python中顶行写的,不在函数内部定义的,都是全局名称空间,在运行的时候会产生名称空间,是全局作用域
    3、局部名称空间:在一个小范围定义,只能当前范围及其子空间内运行,例如在函数内部定义的,是局部作用域

二、函数的嵌套

1、函数的嵌套调用
2、函数的嵌套定义
x = 1111111111111111
def f1():
    #x=1
    print(‘------>f1 ‘,x)
    def f2():
        #x = 2
        print(‘---->f2 ‘,x)
        def f3():
            x=3
            print(‘-->f3 ‘,x)
        f3()
    f2()
f1()

三、函数的使用

1、函数可以被当做变量赋值
def foo():
    print("foo")
print(foo)          #打印foo的内存地址空间,函数的名字在不带小括号时表示的是函数的内存地址
f=foo               #把foo的内存地址空间做值赋值给f变量
print(f)            #打印f,起始就是打印foo的内存地址空间
f()                 #f()事实上就是执行foo函数,等同于foo()

打印结果为
<function foo at 0x0000000000B91378>    #print(foo)的结果
<function foo at 0x0000000000B91378>    #print(f)的结果
foo                                     #执行f()的结果,实际就是执行foo()的结果

2、函数可以当做参数传递

def foo():
    print("foo")
print(foo)          #打印foo的内存地址空间
f=foo               #把foo的内存地址空间做值赋值给f变量
print(f)            #打印f,起始就是打印foo的内存地址空间
f()                 #f()事实上就是执行foo函数,等同于foo()

def bar(func):
    print(func)     #这个是打印foo()函数的内存地址
    func()          #func是foo的内存地址,加()实际就是执行foo()函数
    return func
f = bar(foo)        #这个是获取bar的返回值
print(f)            #打印f,就是打印bar()的返回值,就是foo()的内存地址,和print(func)相同
f()                 #f是bar

def bar(func):
    print(func)

bar(foo())      #这个是先执行foo()行数,执行函数里的代码,先打印foo,然后把foo()的返回值作为bar()函数的实参传递给bar,foo()没有返回值,所以是None
                #结果就是先输出一个  "foo"     然后bar(None),把none传递给bar()函数,打印No

四、闭包:内部函数的代码包含对外部作用域的引用,但一定不是对全局作用域的引用,闭包函数一定有__closure__方法

x=1
def f1():
    x=2
    y=3
    def f2():
        print(x)
        y
    return f2
f=f1()                  #f是f2的内存地址
f()                     #f()就是f2(),可以保证f2()可以在任何位置执行,而不受作用域的限制
print(f.__closure__)    #打印结果是元组,元组个数代表的是闭包所引用的上次函数的元素个数
print(f.__closure__[0]) #结果是元组,可以使用索引的方式查看
print(f.__closure__[0].cell_contents)   #查看指定元组所对应的应用上层参数的值
def init(func):
    def wrapper(*args,**kwargs):
        res=func(*args,**kwargs)
        return res
    return wrapper

时间: 2024-09-30 04:22:09

Python/函数的嵌套和闭包的相关文章

python 函数的作用域,闭包函数的用法

一.三元表达式 if条件成功的值    if  条件   else else条件成功的值 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c = 5 if a>b else 10 # print(c) 二.函数的命名空间 命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 *内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的

函数对象/嵌套和闭包函数

一.函数对象 二.函数嵌套 三.闭包函数 一.函数对象 精髓:可以把函数当成变量去用 1.可以赋值 # func=内存地址 def func(): print('from func') f=func # 函数func赋值给变量f print(f,func) # 打印f和func的内存地址,完全相同 f() # 相当于调用了函数func() 输出: <function func at 0x02F434A8> <function func at 0x02F434A8> from fun

Python 函数装饰器和闭包

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 装饰器基础知识 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数). 装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 假如有个名为 decorate 的装饰器: @decorate def targ

Python 函数的嵌套

在调用一个函数的过程中,由调用了其他函数 def f2(): print('from f2') def f1(): x=1 # def f2() # print('from f2') f2() f1()

python初学之函数嵌套与闭包

函数的嵌套: 在函数内部定义函数就是函数的嵌套 def func1(): pass def func2(): pass 闭包: example: def funcx(x): def funcy(y): return x*y(内部函数(funcy)对外部作用域(funcx)(不包括全局作用域)变量(x)进行引用,内部函数(funcy)就被认为是闭包) return funcy

python函数嵌套以及闭包的原理

变量相关-嵌套函数 python允许创建嵌套函数.也就是说我们可以在函数里面定义函数,而且现有的作用域和变量生存周期依旧不变. 例子: #encoding=utf-8 def outer():    name="python" def inner():#outer函数内部定义的函数        print name    return inner()#返回该内部函数 outer() 结果: 理解: 在inner函数中,python解析器需要找一个叫name的本地变量,查找失败后会继续

python开发函数进阶:命名空间,作用域,函数的本质,闭包,内置方法(globales)

一,命名空间 #局部命名空间#全局命名空间#内置命名空间 #三者的顺序#加载顺序 硬盘上--内存里#内置-->全局(从上到下顺序加载进来的)-->局部(调用的时候加载) 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #全局命名空间 5 a = 5 6 b = 8 7 #局部命名空间(函数) 8 def my_max(): 9 c = a if a > b else b 10 return c 11 m = my_max() 12 pr

Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

Python函数嵌套的例子

有关Python函数嵌套的实例,Python中的函数嵌套特性. 在Python中函数可以作为参数进行传递,而也可以赋值给其他变量(类似Javascript,或者C/C++中的函数指针):类似Javascript,Python支持函数嵌套,Javascript嵌套函数的应用模式对Python适用: >>> def multiplier(factor): ... def multiple(number): ... return number * factor ... return multi