• Python(名称空间、函数嵌套、函数对象)


    一、名称空间:

    名称空间

    定义:存放名字和值的绑定关系

         

    内置名称空间

    python自带的名字,如print、int、str

    解释器启动就会生效

     

    全局名称空间

    文件级别定义的名字,都会放在全局名称空间(没有缩进的所有定义的名字)

    执行文件时会产生,执行完就没了

    这个也算全局的y=3:
    if 1>2:
       y=3

    局部名称空间

    定义在函数内部的名字

    只有在调用函数的时候才生效,调用结束就失效

     

    加载顺序

    内置名称空间======》

    全局名称空间======》

    局部名称空间

    另:

    取值顺序

    局部名称空间======》

    全局名称空间======》

    内置名称空间

    函数与变量的作用域关系在定义的时候就已经固定了,即使后来在外面调用了内层函数,使用的变量任然是定义时的各个函数

           

    作用域

    全局作用域(全局有效)

    内置名称空间+全局名称空间

     

    局部作用域(局部、函数内部有效)

    局部名称空间

     

    取值

    局部作用域=======》

    全局作用域

     

    局部作用域

    locals

    局部要改全局变量,要先声明 globals x,再定义x(尽量避免)

    全局作用域

    globals

    文件执行结束,变量删除,重新定义后才会失效

     

    nonlocal

    改上一层的局部变量,如果局部没有,不会改全局

    二、函数嵌套:

    函数的嵌套调用

    函数的嵌套定义

    函数内定义的函数只能在函数内调用,就像函数内定义的变量,外面无法调用

    def f1():
     def f2():
      def f3():
       print('from f3')
      print('from f2')
      f3()
     print('from f1')
     f2()
    
    f1()
    
    D:Python36python.exe D:/py/test/homework0612.py
    from f1
    from f2
    from f3

    三、函数对象:

    函数是第一类对象:

    可以被引用

     

    可以被当做函数参数

     

    可以被当做函数返回值

     

    可以当做容器类型的元素

    #函数是第一类对象: 指的是函数可以被当做数据传递
    
    # def func():
    #     print('from func')
    
    #可被引用
    # f=func
    
    #可以当做函数的参数
    # def func():
    #     print('from func')
    # def foo(x):
    #     print(x)
    #     x()
    
    # foo(func)
    
    #可以当做函数的返回值
    # def foo():
    #     print('from foo')
    # def bar():
    #     return foo
    # f=bar()
    # print(f)
    # print(foo)
    # f()
    
    # x=0
    # def f1():
    #     x=1
    #     def f2():
    #         # x=2
    #         print(x)
    #     return f2
    # f=f1()
    # print(f)
    # f()
    
    
    
    #可以当做容器类型的元素
    # def select():
    #     print('select function')
    #
    # func_dic={
    #     'select':select,
    # }
    #
    # print(func_dic['select'])
    # func_dic['select']()
    #
    
    
    
    
    
    #
    # def select():
    #     print('select func')
    #
    # def delete():
    #     print('delete func')
    #
    # def change():
    #     print('change func')
    #
    # def add():
    #     print('add func')
    #
    #
    # while 1:
    #     cmd=input('>>: ').strip()
    #     if not cmd:continue
    #     if cmd == 'select':
    #         select()
    #     elif cmd == 'delete':
    #         delete()
    #     elif cmd == 'change':
    #         change()
    #     elif cmd == 'add':
    #         add()
    #     else:
    #         print('无效的命令')
    
    
    
    
    
    
    
    def select(cmd_l):
        filename=cmd_l[-1]
        pattern=cmd_l[1]
    
        with open(filename,'r',encoding='utf-8') as f:
            for line in f:
                if pattern in line:
                    print(line)
    
    
    def delete():
        print('delete func')
    
    def change():
        print('change func')
    
    def add():
        print('add func')
    
    def check():
        print('check func')
    
    
    func_dic={
        'select':select,
        'delete':delete,
        'change':change,
        'add':add,
        'check':check,
    }
    
    
    while 1:
        inp=input('>>: ').strip()
        if not inp:continue             #如果输入为空则继续 输入自带bool值,如果为空,bool值为FALSE,不空则为True。
        cmd_l=inp.split()
        # print(cmd_l)
        cmd=cmd_l[0]
        if cmd in func_dic:
            func_dic[cmd](cmd_l)
        else:
            print('无效的命令')
  • 相关阅读:
    Centos 7 KVM安装win10
    python3.6小程序
    linux随手笔记(Centos为主)
    python 3.6练习题(仿购物车)
    linux mint软件安装
    pacman详解及常见问题
    manjaro安装及设置
    Ansible安装及配置
    大盘分时黄白线
    渊海子平学习
  • 原文地址:https://www.cnblogs.com/zihe/p/7003309.html
Copyright © 2020-2023  润新知