一、名称空间:
名称空间 |
定义:存放名字和值的绑定关系 |
|||
内置名称空间 |
python自带的名字,如print、int、str |
解释器启动就会生效 |
||
全局名称空间 |
文件级别定义的名字,都会放在全局名称空间(没有缩进的所有定义的名字) |
执行文件时会产生,执行完就没了 |
这个也算全局的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('无效的命令')