一、名稱空間:
名稱空間 |
定義:存放名字和值的綁定關系 |
|||
內置名稱空間 |
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:\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('無效的命令')