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('無效的命令')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM