day 10 函式的高階

2022-09-15 07:21:13 字數 4455 閱讀 5064

動態傳參 (重點)  *    **

形參* 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()

day10 函式高階

1.1什麼是返回值 返回值就是從函式內部傳遞到函式外部的資料 預設情況下函式內部產生的新資料,在函式外部不能使用 1.2怎麼確定函式返回值 1 python中每個函式都有返回值,預設情況下是none,返回值是什麼就看執行函式體的時候遇到的return關鍵字後面的資料是什麼 如果沒有遇到return,...

day10 函式的高階

順序 位置引數 動態接收位置引數 預設值 動態接收關鍵字引數 位置引數 args 預設引數值 kwargs 一.函式引數 動態傳參 1.動態接受位置引數 在引數位置編寫 表示接收任意內容 動態接收引數的時候要注意 動態引數必須在位置引數後面 2.動態接收關鍵字引數 動態接收關鍵字引數一定在最後面 在...

Day 10 函式的高階

一 動態傳參 1 形參 1.位置引數 2.預設引數 3.動態引數 1.args 動態接收位置引數 2.kwargs 動態接收關鍵字引數 def chi food print 我要吃 food chi 大公尺飯 小公尺飯 結果 我要吃 大公尺飯 小公尺飯 多個引數傳遞進去.收到的內容是元組tuple ...