Python_函数的镶嵌和作用域链_26

def max(a,b):
    return a if a>b else b

def the_max(x,y,z):  #函数的嵌套调用
    c = max(x,y)
    return max(c,z)

print(the_max(1,2,3))

#函数的嵌套定义
#内部函数可以使用外部函数的变量
a = 1
def outer():
    a = 1
    def inner():
        a = 2
        def inner2():
            nonlocal a  #声明了一个上面第一层局部变量
            a += 1   #不可变数据类型的修改
        inner2()
        print(‘##a## : ‘, a)
    inner()
    print(‘**a** : ‘,a)

outer()
print(‘全局 :‘,a)

#nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量
#声明了nonlocal的内部函数的变量修改会影响到 离当前函数最近一层的局部变量
# 对全局无效
# 对局部 也只是对 最近的 一层 有影响
a = 0
def outer():
    a = 1
    def inner():
        a = 2
        def inner2():
            nonlocal a
            print(a)
        inner2()
    inner()

outer()

def func():
    print(123)
func()  #函数名就是内存地址

func2 = func  #函数名可以赋值
func2()

l = [func,func2] #函数名可以作为容器类型的元素
print(l)
for i in l:
    i()   # 分别执行 func() func2() 函数

def func():
    print(123)

def wahaha(f):  # 传入 func
    f()
    return f           #函数名可以作为函数的返回值

qqxing = wahaha(func)   # 函数名可以作为函数的参数
qqxing() # 相当于在执行func() 函数

原文地址:https://www.cnblogs.com/LXL616/p/10660693.html

时间: 2024-07-30 16:24:13

Python_函数的镶嵌和作用域链_26的相关文章

函数执行时的作用域链和活动对象是怎么形成的及与闭包的关系

函数执行时的作用域链和活动对象是如何形成的及与闭包的关系1.javascript解析器启动时就会初始化建立一个全局对象global object,这个全局对象就 拥有了一些预定义的全局变量和全局方法,如Infinity, parseInt, Math,所有程序中定义的全局变量都是这个全局对象的属性.在客户端javascript中,Window就是这个javascript的全局对象. 2.当javascript执行一个function时,会生成一个对象,称之为call object,functio

函数的嵌套和作用域链,闭包

函数嵌套:  #指在第二个函数里面调用第一个函数的结果 def func(): print('sss') def func1(f): f() func1(func) 作用域链:   #最内层的函数可以调用并且更改其他函数内的代码变量但是只限制于函数这个作用域内的变量  全局的变量不能被内部函数调用 否则会报错 #除非声明global 全局变量  全局变量一般不会经常使用 因为会影响整个局面 def func(): a = 1 def func1(): a +=1 print(a) func1()

函数_函数进阶_闭包和函数的嵌套和作用域链

#闭包:嵌套的函数,内部函数调用外部函数的变量 # def outer():# a = 1# def inner():# print(a)# # print(inner.__closure__) #说明是一个闭包# return inner## inn = outer()## inn() #在一个函数的外部使用内部的函数 #使用闭包的好处就是随意的使用变量 import urllib #模块# from urllib.request import urlopen# ret = urlopen("

函数的嵌套和作用域链

1: # 函数的嵌套调用 def max(a,b): return a if a>b else b def Max(x,y,z): c = max(x,y) return max(c,z) print(Max(5,2,0)) def max(a,b): return a if a>b else b def Max(x,y,z): c = max(x,y) return c if c>z else z print(Max(5,2,0)) 2: #函数的嵌套定义 #内部函数可以使用外部函数的

javascript篇-----函数作用域,函数作用域链和声明提前

在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于这类型的编程语言,javascript是没有块级作用域.取而代之的,javascript使用的是块级作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. 在如下的所示的代码中,在不同位置定义了变量 i . j 和 k ,它们都在同一个作用域内——这三个变量在函数体内均是有定义

函数的作用域链的理解

1.作用域(scope):在javascript没有块级作用域,是由函数来划分的.变量和函数的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用域也叫做静态作用域(with和eval除外).当定义了一个函数,当前的作用域链就保存起来,并且成为函数的内部状态的一部份.在最顶级作用域链仅由全局对象组成,而不和词法作用域相关,然而,当定义一个嵌套的函数时,作用域链就包括外面的包含函数.这意味着嵌套函数可以访问包含函数的所有参数和局部变量.尽管当一个函

1、JavaScript高级之函数作用域链

作用域链: JavaScript的每个函数function都有自己的作用域,使用Active Object(简称AO)活动对象来保存,在相互嵌套的函数中形成了作用域链,如图: 作用域链就是从里到外的AO链 变量的寻找: 函数fn3中使用的变量,如在fn3作用域内寻找不到,则往外层fn2作用域寻找,以此类推,直到全局对象window 代码演示: var c = 5; function t1(){ var d = 6; function t2(){ var e = 7; var d = 3;//如果

关于JS里的函数作用域链的总结

在JavaScript中,函数的作用域链是一个很难理解的东西.这是因为JavaScript中函数的作用域链和其他语言比如C.C++中函数的作用域链相差甚远.本文详细解释了JavaScript中与函数的作用域链相关的知识,理解这些知识可以帮助你在处理闭包的时候避免一些可能出现的问题. 在JavaScript中,函数可以让你在一次调用中执行一系列的操作.有多种方式来定义一个函数,如下: 1.函数声明: function maximum(x, y) { if (x > y) return x; els

JavaScript 作用域链

作用域链 当查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面上的父级)执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象.这样由多个执行上下文的变量对象构成的链表就叫做作用域链. 函数创建 这是因为函数有一个内部属性[[scope]],当函数创建的时候,就会保存所有父变量对象到其中,你可以理解[[scope]]就是所有父变量对象的层级链.(注意:[[scope]]并不代表完整的作用域链!) 举个栗子: function foo() { f