函数的嵌套和作用域链

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:

#函数的嵌套定义
#内部函数可以使用外部函数的变量,但外不可使内
def outer():           # 1 定义outer,把outer放到命名空间
    def inner():       # 3 定义inner,若没有调用inner,则无法把inner放到命名空间,也就无法执行
        print(‘$$$$‘)  # 5
    inner()            # 4 调用inner
outer()                # 2 调用outer

def outer():
    a = 1
    def inner():
        print(a)
        print(‘$$‘)
    inner()
outer()

def outer():
    Mia = ‘beauty‘
    def inner1():
        print(‘Mia‘)
        print(‘$$‘)
        Shaw = ‘cutie‘
        def inner2():
            print(Shaw)
            print(‘$$$$‘)
        inner2()
    inner1()
outer()

def outer():
    Mia = ‘beauty‘
    def inner1():
        print(‘Mia‘)
        print(‘$$‘)
        Shaw = ‘cutie‘
        def inner2():
            print(Shaw)
            print(‘$$$$‘)
        inner2()
    inner1()
outer()

3:

a = 1
def outer():
    a = 1
    def inner1():
        b = 2
        print(a)
        print(‘$$‘)
        def inner2():
            global a  # 声明了一个全局变量,只是使全局空间的a可修改了,而局部空间的a不变
            #nonlocal a # 声明了一个上面第一个(从此位置从下往上找)局部变量
            a += 1    # 不可变数据类型的修改
            print(‘$$$$‘)
        inner2()
    inner1()
outer()
print(‘全局的a:‘,a)  # 对应global a
#print(‘全局的a:‘,a)  # 对应nonlocal a
# 关于 nonlocal
def outer():
    a = 1
    def inner1():
        a = 2
        def inner2():
            nonlocal a
            a += 1
            print(a)
        inner2()
    inner1()
outer()
print(a)

# nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量
# 声明了nonlocal的内部函数的变量修改会影响到 离当前函数最近一层的局部变量
# 对全局无效
# 对局部 也只是对 最近的 一层 有影响

4:函数是第一类对象,它符合函数的以下三个用法:函数名可以赋值,可以作为函数的参数,可以作为函数的返回值。

def func():  # 函数名就是内存地址
    print(‘love‘)
func()
func1 = func  # 函数名可以赋值
func1()

lis = [func,func1]  # 函数名可以作为容器类型(可变数据类型:集合,列表和字典)的元素
print(lis)    # 打印出它们的内存地址,是一样的
for i in lis:
    i()

def func():  # 函数名就是内存地址
    print(‘love‘)
def func2(f):
    f()
func2(func)  # 函数名可以作为函数的参数

def func():  # 函数名就是内存地址
    print(‘love‘)
def func2(f):
    f()
    return f    # 函数名可以作为函数的返回值
lalaland = func2(func)  # 有return返回就得有接
print(lalaland) 

原文地址:https://www.cnblogs.com/passengerlee/p/10350216.html

时间: 2024-08-29 11:49:21

函数的嵌套和作用域链的相关文章

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

函数嵌套:  #指在第二个函数里面调用第一个函数的结果 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.javascript解析器启动时就会初始化建立一个全局对象global object,这个全局对象就 拥有了一些预定义的全局变量和全局方法,如Infinity, parseInt, Math,所有程序中定义的全局变量都是这个全局对象的属性.在客户端javascript中,Window就是这个javascript的全局对象. 2.当javascript执行一个function时,会生成一个对象,称之为call object,functio

python------函数嵌套及作用域链

python------函数嵌套及作用域链 1.三元运算if条件成立的结果 if 条件 else 条件不成立的结果例如: a=20 b=10 c=a if a>b else b print(c) 2.命名空间 全局命名空间:创建的存储"变量名与值的关系"的空间叫做全局命名空间  局部命名空间:在函数的运行中开辟的临时的空间叫做局部命名空间 内置命名空间:内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟

函数的嵌套和作用域

函数的嵌套定义 ①内部函数可以使用外部函数的变量 作用域链 在内部函数使用变量时,是从小局部到大局部到全局到内置名字的过程中一级一级网上找,找到最近的一个就使用 nonlocal a 声明一个上层局部变量,往上走一级离得最近并且有a 1.对全局无效 2.对局部的最近的一层产生影响 闭包嵌套函数,内部函数调用外部函数的变量 不调用不是闭包是嵌套 def outer() a = 1 def inner(): print(a) outer() 闭包的应用 可以保护变量,保护上一级局部变量中a = 1

day10 python学习 函数的嵌套命名空间作用域等

1.三元运算 #1.三元运算 利用已下方法就可以实现一步运算返回a b中大的值 def my_max(a,b): c=0 a=int(input('请输入')) b=int(input('请输入')) # if a>b: # c=a # else: # c=b #或者这样 c = a if a > b else b return c ret=my_max(1,3) print(ret) 2.补充上节差的知识点 形参: #位置参数 #默认参数(关键字参数) #动态参数 *args:接收说有按照位

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 #不可变数据类型的修改 inn

python全栈闯关--10-2、函数的嵌套和作用域

1.全局作用域函数嵌套 def three_max(a, b, c): t = two_max(a, b) # 函数嵌套调用two_max return t if t > c else c def two_max(a, b): return a if a > b else b print(three_max(1, 2, 3)) 程序执行,按照从下往下的顺序,把变量.函数名加入到命名空间,如果还未加入到命名空间,就调用了函数,将会报错. 如上程序,如果把three_max的调用,交换到two_m

day12函数的命名空间,作用域,闭包等

一.三元表达式 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...它们都是我们熟悉的,拿过来就可以用的