zoukankan      html  css  js  c++  java
  • 函数的嵌套和作用域链

    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) 

    作者:chauncylii

    出处:https://www.cnblogs.com/passengerlee/p/11965398.html

    版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。

    觉得文章不错,点个关注呗!

  • 相关阅读:
    C基础之移位操作
    实现itoa()
    Python的time模块的clock方法在不同平台的效果不同
    __stdcall与__cdecl之区别浅析及相关知识
    Python 字典 dictionary changed size during iteration
    Windows下printf输出long long类型
    inotify也会爆棚
    一条对“失控的腾讯帝国:企鹅无法把控手机市场”的评论
    imfunny程序员的增量发展
    程序员第一定律:关于技能和收入
  • 原文地址:https://www.cnblogs.com/passengerlee/p/10350216.html
Copyright © 2011-2022 走看看