動態傳參 (重點) * ** 形參 * args在形參位置, *表示不定參數--接受的是位置參數 接受到的位置參數的動態傳參: 都是元組 形參的順序: 位置 *args 預設值 **kwargs 以後寫參數,可以隨意的進行搭配 def chi(zhushi, cai, fushi, tang, ti ...
動態傳參 (重點) * ** 形參 * args在形參位置, *表示不定參數--接受的是位置參數 接受到的位置參數的動態傳參: 都是元組 形參的順序: 位置 *args 預設值 **kwargs 以後寫參數,可以隨意的進行搭配 def chi(zhushi, cai, fushi, tang, tiandian): print(zhushi,cai,fushi,tang,tiandian) chi("大碗大米飯", "火爆大頭菜", "把子肉", "西紅柿雞蛋湯", "烤地瓜") chi("小碗大米飯", "火爆大頭菜") # 參數不夠 形參的順序(重點): 位置 *args 預設值 **kwargs 以後寫參數. 可以隨意的進行搭配, 但是, 順序不能串 **kwargs在形參表示動態傳參--關鍵字參數,關鍵字動態傳參接收到的是字典 **在形參表示動態傳參-關鍵字參數 關鍵字動態傳參接收到的是字典 def func(**kwargs): # 也是聚合. ** 聚合成字典 print(kwargs) # func(1,2,3,4,5,6,7) # 位置參數. 報錯 func(a=1, b=2, c=3, haha="呵呵", good="not bad") 實參 *在實參的是打散,把列表,元組,字元串打散成位置參數進行傳遞 ** 在形參表示動態傳參--關鍵字參數;打散,打散成關鍵字 關於*和** 形參: 聚合 位置參數* ->元組 關鍵字** -> 字典 實參: 打散 列表,字元串,元素 -> * 字典 ->** 無敵傳參 def func(*args, **kwargs): arguments參數 keyword-arguments關鍵字參數 pass 作用域(重要)和名稱空間 名稱空間:用來存放名字(變數,函數名,類名,引入的模塊)的 1.全局名稱空間:我們在py文件中自己寫的變數, 函數..... 2.內置名稱空間; 我們python解釋器提供好的一些內置內容 (print,input..........) 3.局部名稱空間: 在我們執行函數的時候,會產生一個局部名稱空間.放的是:函數內部的內容 名稱空間可能會有無數個,對於局部名稱空間.相對是獨立的,一般互不幹擾 作用域: 1.全局作用域: 內置+全局 2.局部作用域: 局部 從全局找局部-> 找不到 從局部找全局-> 可以找到 怎麼查看全局或局部中的內容: globals 全局作用域: 內置+全局名稱空間 locals 查看當前作用域的內容 def chi(): a = 20 b = 30 print(locals()) # 查看當前作用域中的內容 print(globals()) # alex,老男孩兒, 武sir, 全局作用域中的內容 chi() print(locals()) # 全局 print(globals()) # 全局 函數的嵌套 nonlocal和global 關鍵字(重點) global 表示從全局把一個變數引入局部,後面使用的都是全局變數 nonlocal 在局部,尋找離他最近的外層的一個變數 如果沒有global和nonlocal ,查找的順序:自己,上一層,上一層,上一層 函數的互相調用 def func1(): print("我是神器的func1") def func2(): func1() print("我是神器的func2") def func3(): print("我是神器的func3") # func5() def func4(): func3() print("我是神器的func4") def func5(): func2() func3() print("我是神器的func5") def func6(): func5() print("我是神器的func6") func3() func1() func6() def outer(): def inner(): print("我的天哪") print("還可以這樣寫???") inner() outer() inner() # 在全局不能找到局部的內容 def func1(): print("1") def func2(): print("2") def func3(): print("3") print("4") func3() print(5) print("6") func2() print("7") func1() 全局變數一般是不能隨意的修改的 a = 10 def func(): # 慎用. global a # global 表示從全局把一個變數引入到局部, 後面使用的a都是全局變數 a += 10 # ?? a = a + 10 # 現在的a是全局的, 你現在視圖改全局變數 print("裡面的列印",a) func() print("外面的列印", a) a = 10 def func(): def inner(): # 慎用. global a # global 表示從全局把一個變數引入到局部, 後面使用的a都是全局變數 a += 10 # ?? a = a + 10 # 現在的a是全局的, 你現在視圖改全局變數 print("裡面的列印",a) inner() func() print("外面的列印", a) nonlocal 在局部, 尋找離他最近的外層的一個變數 a = 50 def func1(): # a = 10 # 局部 def func2(): nonlocal a # 不找全局, global找全局 a += 10 # a = a + 10 python不讓這麼乾 print("func2", a) func2() print(a) func1() print(a) 如果沒有nonlocal和global 查找的順序: 自己, 上一層, 上一層, 上一層 def func0(): a = 50 def func1(): a = 10 # 局部 def func2(): nonlocal a # 不找全局, global找全局 a += 10 # a = a + 10 python不讓這麼乾 print("func2", a) func2() print(a) func1() print(a) func0() a = 1 def fun_1(): a = 2 def fun_2(): nonlocal a a = 3 def fun_3(): a = 4 print(a) print(a) fun_3() print(a) print(a) fun_2() print(a) print(a) fun_1() print(a) flag = False def login(): global flag uname = input("用戶名:") upwd = input("密碼:") if uname == "alex" and upwd == "123": flag = True else: flag = False def fatie(): if flag == True: print("可以發帖") else: print("滾去登錄") login() fatie() fatie() fatie() fatie()