基本函數(shù)
1、函數(shù)多返回值
Q:如果一個函數(shù)要有多個返回值,該如何書寫代碼?
# 使用多個變量,接收多個返回值
def test_return():
return 1, "hi", True
x, y, z = test_return()
print(x)
print(y)
print(z)
運(yùn)行效果:
1
hi
True
- 按照返回值的順序,寫對應(yīng)順序的多個變量接收即可
- 變量之間用逗號隔開
- 支持不同類型的數(shù)據(jù)return
2、函數(shù)多種傳參方式
(1)位置參數(shù)
位置參數(shù):調(diào)用函數(shù)時根據(jù)函數(shù)定義的參數(shù)位置來傳遞參數(shù)
def user_info(name, age, gender):
print(f"姓名是:{name},年齡是:{age},性別是:{gender}")
# 位置參數(shù) -默認(rèn)使用形式
user_info('小明', 20, '男')
user_info(20, 'a', '男')
運(yùn)行效果:
姓名是:小明,年齡是:20,性別是:男
姓名是:20,年齡是:a,性別是:男
Tip:傳遞的參數(shù) 和 定義的參數(shù) 順序及個數(shù)必須一致
(2)關(guān)鍵字參數(shù)
關(guān)鍵字參數(shù):函數(shù)調(diào)用時通過"鍵=值"形式傳遞參數(shù)
作用:讓函數(shù)更加清晰、容易使用,同時也清除了參數(shù)的順序需求
def user_info(name, age, gender):
print(f"姓名是:{name},年齡是:{age},性別是:{gender}")
# 關(guān)鍵字參數(shù)
user_info(name='小王', age=20, gender='女')
user_info(age=20, name='bb', gender='女') # 可以不按照參數(shù)的定義順序傳參
user_info('甜甜', gender="女", age=9) # 混用
運(yùn)行效果:
姓名是:小王,年齡是:20,性別是:女
姓名是:bb,年齡是:20,性別是:女
姓名是:甜甜,年齡是:9,性別是:女
Tip:函數(shù)調(diào)用是,如果有位置參數(shù)是,位置參數(shù)必須在關(guān)鍵字參數(shù)的前面,但關(guān)鍵字參數(shù)之間不存在先后順序
(3)缺省參數(shù)
缺省參數(shù):缺省參數(shù)也叫默認(rèn)參數(shù),用于定義函數(shù),為參數(shù)提供默認(rèn)值,調(diào)用函數(shù)時可不傳該默認(rèn)參數(shù)的值(注意:所有位置參數(shù)必須出現(xiàn)在默認(rèn)參數(shù)前,包括函數(shù)定義和調(diào)用)
作用:當(dāng)調(diào)用函數(shù)時沒有傳遞參數(shù),就會使用默認(rèn)是缺省參數(shù)對應(yīng)的值
# 缺省參數(shù)
def user_info(name, age, gender='male'):
print(f"姓名是:{name},年齡是:{age},性別是:{gender}")
user_info('TOM', 20)
user_info('Mary', 67, 'female')
運(yùn)行效果:
姓名是:TOM,年齡是:20,性別是:male
姓名是:Mary,年齡是:67,性別是:female
Tip1:函數(shù)調(diào)用時,如果為缺省參數(shù)傳值則修改沒人參數(shù)值,否則使用這個默認(rèn)值
Tip2:默認(rèn)參數(shù)必須寫在最后面
(4)不定長參數(shù)
不定長參數(shù):不定長參數(shù)也叫可變參數(shù),用于不確定調(diào)用的時候會傳遞多少個參數(shù)(不傳參也可以)的場景
作用:當(dāng)調(diào)用函數(shù)是不確定參數(shù)個數(shù)時,可以使用不定長參數(shù)
-
不定長參數(shù)的類型:
- 位置傳遞
- 關(guān)鍵字傳遞
位置傳遞
# 不定長傳遞 -位置傳遞
# 不定長定義的形式參數(shù)會作為元組存在,接收不定長數(shù)量的參數(shù)傳入
def user_info(*args): # 示例代碼中通過一個星號去定義一個形式參數(shù)
print(f"args參數(shù)的類型是:{type(args)},內(nèi)容是:{args}")
user_info(1, 2, 'Tom') # 返回一個只有TOM的元組:('Tom',)
user_info('hi', 'Tom', 18) # 返回由tom和18組成的元組:('Tom', 18)
# 通過這種形式想傳多少參數(shù)都可以,這是通過*得到的不定長
運(yùn)行效果:
args參數(shù)的類型是:<class 'tuple'>,內(nèi)容是:(1, 2, 'Tom')
args參數(shù)的類型是:<class 'tuple'>,內(nèi)容是:('hi', 'Tom', 18)
Tip:傳進(jìn)的所有參數(shù) 都會被args變量收集,它會根據(jù)傳進(jìn)參數(shù)的位置合并為一個元組(tuple),args是元組類型,這既是位置傳遞
關(guān)鍵字傳遞
兩個*表示:
- 同樣,數(shù)量是不受限的
- 同時,內(nèi)容應(yīng)滿足Key=Value的鍵值對形式
所以,這個kwargs形式參數(shù),就是一共前面所學(xué)習(xí)過的數(shù)據(jù)容器之字典
調(diào)用的時候,只需要按照字典的形式傳入即可
e.g. name=‘Tom’
# 不定長傳遞 -關(guān)鍵字傳遞
# kw指keyword
# 兩個*,數(shù)量不受限,數(shù)據(jù)形式受限(必須是KV型)
def user_info(**kwargs):
print(f"kwargs參數(shù)的類型是:{type(kwargs)},內(nèi)容是:{kwargs}")
# {'name': 'TOM', 'age': 18, 'id': 110}
user_info(name='TOM', age=18, id=110)
運(yùn)行效果:
kwargs參數(shù)的類型是:<class 'dict'>,內(nèi)容是:{'name': 'TOM', 'age': 18, 'id': 110}
Tip:參數(shù)是“鍵=值”形式 的情況下,所以的“鍵=值
3、小結(jié)
- 位置參數(shù):
- 根據(jù)參數(shù)位置來傳遞參數(shù)
- 關(guān)鍵字參數(shù):
- 通過”鍵=值“形式傳遞參數(shù),可以不限參數(shù)順序
- 可以和位置參數(shù)混用,位置參數(shù)需在前
- 缺省參數(shù)
- 不傳遞參數(shù)值時會使用默認(rèn)的參數(shù)
- 默認(rèn)值的參數(shù)必須定義在最后
- 不定長參數(shù)
- 位置不定長傳遞 以*號標(biāo)記一個形式參數(shù),以元組的形式接受參數(shù),形式參數(shù)一般命名為args
- 關(guān)鍵字不定長傳遞 以**號標(biāo)記一個形式參數(shù),以字典的形式接受參數(shù),形式參數(shù)一般命名為kwargs
匿名函數(shù)
1、函數(shù)作為參數(shù)傳遞
在前面的函數(shù)學(xué)習(xí)中,一種使用的函數(shù),都是接受數(shù)據(jù)作為參數(shù)傳入:
- 數(shù)字
- 字符串
- 字典、列表、元組等
其實(shí),我們學(xué)習(xí)的函數(shù)本身,也可以作為參數(shù)傳入另一個函數(shù)內(nèi)
def test_func(compute):
result = compute(1, 2)
print(result)
def compute(x, y):
return x + y
test_func(compute) # 結(jié)果:3
函數(shù)compute,作為參數(shù),傳入了test_func函數(shù)中使用。
- test_func需要一個函數(shù)作為參數(shù)傳入,這個函數(shù)需要接受2個數(shù)字進(jìn)行計(jì)算,計(jì)算邏輯由這個被傳入函數(shù)決定
- compute函數(shù)接收2個數(shù)字對其進(jìn)行計(jì)算,compute函數(shù)作為參數(shù),傳遞給了test——func函數(shù)使用
- 最終,在test_func函數(shù)內(nèi)部,由傳入的compute函數(shù),完成了對數(shù)字的計(jì)算操作
所以,這是一種,計(jì)算邏輯的傳遞,而非數(shù)據(jù)的傳遞
就像上述代碼那樣,不僅僅是相加、相減、相處、等任何邏輯都可以自定義并作為函數(shù)傳入
//什么叫計(jì)算邏輯的傳遞?
e.g.
def add(x,y):
? return x + y
這個函數(shù)的功能是完成兩數(shù)相加,其接收的參數(shù)是被相加的數(shù)字
所以當(dāng)我們將數(shù)字傳遞進(jìn)去的時候,傳遞的是數(shù)據(jù)
而test_func函數(shù)要求傳入的是函數(shù),[函數(shù) 是一堆代碼的封裝,即 在函數(shù)體中包含了具體的執(zhí)行邏輯]
所以,要求傳入函數(shù),本質(zhì)上是傳入代碼的執(zhí)行邏輯
- 傳入數(shù)據(jù)的函數(shù),它的計(jì)算邏輯是確定的,不確定的是被計(jì)算的數(shù)據(jù)
- 傳入邏輯的函數(shù),數(shù)據(jù)是確定的,不確定的是計(jì)算的邏輯
# 定義一個函數(shù),接收另一個函數(shù)作為傳入?yún)?shù)
def test_func(compute):
result = compute(1, 2) # 確定cpmpute是函數(shù)
print(f"compute參數(shù)的類型是:{type(compute)}")
print(f"計(jì)算結(jié)果:{result}")
# 定義一個函數(shù),準(zhǔn)備作為參數(shù)傳入另一個函數(shù)
def compute(x, y):
return x + y
# 調(diào)用,并傳入函數(shù)
test_func(compute) # 結(jié)果:3
小結(jié)
- 函數(shù)本身是可以作為參數(shù),傳入另一個函數(shù)中進(jìn)行使用的。
- 將函數(shù)傳入的作用 在于:傳入計(jì)算邏輯,而非傳入數(shù)據(jù)
2、lambda匿名函數(shù)
函數(shù)的定義中
- def關(guān)鍵字,可以定義帶有名稱的函數(shù)
- lambda關(guān)鍵字,可以定義匿名函數(shù)(無名稱)
有名稱的函數(shù),可以基于名稱重復(fù)使用
無名稱的匿名函數(shù),只可臨時使用一次
匿名函數(shù)定義語法:
lambda 傳入?yún)?shù): 函數(shù)體(一行代碼)
- lambda是關(guān)鍵字,表示定義匿名函數(shù)
- 傳入?yún)?shù)表示匿名函數(shù)的形式參數(shù),如:x,y表示接收2個形式參數(shù)
- 函數(shù)體,就是函數(shù)的執(zhí)行邏輯,要注意:只能寫一行,無法寫多行代碼
Tip:lambda不用return語句,默認(rèn)直接return
# lambda 傳入?yún)?shù): 函數(shù)體(一行代碼)
def test_func(compute):
result = compute(1, 2)
print(f"結(jié)果是:{result}")
# 通過lambda匿名函數(shù)的形式,將匿名函數(shù)作為參數(shù)傳入
test_func(lambda x, y: x + y)
test_func(lambda x, y: x + y)
# 雖然不能重復(fù)使用 但十分簡潔
# 只要代碼是一行內(nèi)容能夠完成的 使用lambda會變得更加簡潔
小結(jié)
-
匿名函數(shù)使用lambda關(guān)鍵字進(jìn)行定義
-
定義語法:文章來源:http://www.zghlxwxcb.cn/news/detail-476585.html
lambda 傳入?yún)?shù): 函數(shù)體(一行代碼)
-
注意事項(xiàng):文章來源地址http://www.zghlxwxcb.cn/news/detail-476585.html
- 匿名函數(shù)用于臨時構(gòu)建一個函數(shù),只使用一次的場景
- 匿名函數(shù)的定義中,函數(shù)體只能寫一行代碼,如果函數(shù)體要寫多行代碼,不可用lambda匿名函數(shù),應(yīng)使用def定義帶名函數(shù)
附:系列文章
序號 | 文章目錄 | 直達(dá)鏈接 |
---|---|---|
1 | 列表 | https://want595.blog.csdn.net/article/details/131114057 |
2 | 元組 | https://want595.blog.csdn.net/article/details/131114201 |
3 | 字符串 | https://want595.blog.csdn.net/article/details/131114257 |
4 | 集合 | https://want595.blog.csdn.net/article/details/131114355 |
5 | 字典 | https://want595.blog.csdn.net/article/details/131117668 |
6 | 切片 | https://want595.blog.csdn.net/article/details/131117775 |
7 | 數(shù)據(jù)容器 | https://want595.blog.csdn.net/article/details/131117719 |
8 | 函數(shù) | https://want595.blog.csdn.net/article/details/131117957 |
9 | 庫 | https://want595.blog.csdn.net/article/details/131118042 |
10 | 異常捕獲 | https://want595.blog.csdn.net/article/details/131117982 |
11 | 模塊 | https://want595.blog.csdn.net/article/details/131118002 |
到了這里,關(guān)于【Python基礎(chǔ)】Python函數(shù)(匿名函數(shù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!