• 名称空间


    一、函数对象

    定义:函数名存放的就是函数的地址,所以函数名就是对象,称之为函数对象

    1. 可以直接被引用
    2. 可以当作函数参数传值
    3. 可以作为函数发返回值
    4. 可以作为容器类型的元素
    def add(a,b):
        return a+b
    def low(a,b):
        return a-b
    def jump(a,b):
        return a*b
    def full(a,b):
        return a/b
    def quyu(a,b):
        return a%b
    def computed(fu,n1,n2):
        res = fn(n1,n2)
        return
    method_map = {
        'add':add,
        'low'=low,
        'jump':jump,
        'full':full,
        'quyu':quyu,
    }
    #根据指令获取计算方法
    def get_cp_fn(cmd):
        if cmd in method_map:
            return method[cmd]
        return add #输入有误默认方法处理
    while TRUE:
        cmd = input('cmd: ')
        if cmd == 'quit':
            break
        cp_fn = get_cp_fn(cmd)
        result = computed(cp_fn,100,20)
        print(resule)
    View Code

    二、名称空间

    • 定义:存放名字与内存地址对应关系的容器
    • 作用:解决由于名字有限,导致名字重复发生冲突
    1. Built_in:内置名称空间;系统级,一个;随解释器执行而产生,解释器停止而销毁
    2. Global:全局名称空间;文件级,多个;随所属文件加载而产生,文件运行完毕而销毁
    3. local:局部名称空间;函数级,多个;随所属函数执行而产生,函数执行完毕而销毁
    def fn():
        global num
        num = 20
        print(num)
    #global关键词可以将Local的名字提升为Global的名字
    #一个文件中的Global名字就是一个,所以函数内部外部使用的名字都是一个
    fn() # 注:一定要调用函数,才能产生名字,并提升
    print()
    View Code

    三、函数的嵌套

    #将函数直接定义到另一个函数内部,就可以使用外部函数中的名字
    def outer():
        num = 20
        def inner():
            print(num) #inner就可以直接使用outer中的名字
        inner()
    outer()

    四、作用域

    • 定义:名字起作用的范围

    • 作用:解决同名可以共存的问

    #四种作用域
    #Built-in:内置作用域,所有文件所有函数
    #Global:全局作用域,当前文件所有函数
    #Enclosing:嵌套作用域,当前函数与当前函数的内部函数
    #Local:局部作用域,当前函数
    
    # 注:
    # 不同作用域之间名字不冲突,以达到名字的重用
    # 查找顺序:Local > Enclosing > Global > Built-in
    len = 10
    def outer():
        len = 20
        def inner():
            len = 30 
            print('1',len)
        inner()
        print('2',len)
    outer()
    print('3',len)
    
    del len:
      
    print('4',len)

    五、闭包

    • 本质就是函数嵌套(格式稍作改良)
    #inner可以使用outer的局部变量:可以将inner定义在outer中
    #inner的调用还是在外部:inner函数对象可能被outer返回
    
    #将内部函数对象作为外部函数的返回值,1、可以使用局部变量;2、不改变函数的调用位置
    def outer():
        num = 10
        def inner():  #闭包:closure,定义在函数内部的函数
            print(num)
        return inner
    fn = outer()  #fn = inner
    fn()

    闭包案例:

    import time
    def download():
        print('开始下载')
        time.sleep(2)
        print('下载完成')
        data = '下载得到的数据'
        outer(data)
    #为闭包传参
    def outer(data):
        def inner():
            #保存,播放,删除等操作
            print("闭包打印: ",data)
        inner()
    download()
    View Code
  • 相关阅读:
    Ubuntu 配置IP地址方法
    ubuntu server 16.04安装GPU服务器
    Ubuntu 自动获取ip地址
    Typedef 用法
    linux mount命令详解(iso文件挂载)
    specrate 与specspeed 的区别
    SPEC CPU 使用简介
    编译错误you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
    SPEC CPU 2006编译perl 出错:undefined reference to `pow'
    'gets' undeclared here (not in a function)
  • 原文地址:https://www.cnblogs.com/wangyisen/p/10639955.html
Copyright © 2020-2023  润新知