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:\Python36\python.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('无效的命令')

 

posted @ 2017-06-14 09:52  Z贺  阅读(1388)  评论(0编辑  收藏  举报