zoukankan      html  css  js  c++  java
  • 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('无效的命令')
  • 相关阅读:
    vue-fullcalendar插件
    iframe 父框架调用子框架的函数
    关于调试的一点感想
    hdfs 删除和新增节点
    hadoop yarn 实战错误汇总
    Ganglia 安装 No package 'ck' found
    storm on yarn(CDH5) 部署笔记
    spark on yarn 安装笔记
    storm on yarn安装时 提交到yarn失败 failed
    yarn storm spark
  • 原文地址:https://www.cnblogs.com/zihe/p/7003309.html
Copyright © 2011-2022 走看看