用故事解釋順序結構與鏈式結構
阿新 • • 發佈:2022-04-06
Python常用內建函式
匿名函式lambda
語法:lambda 引數1,引數2:函式體
多個引數之間逗號隔開,引數與函式體之間冒號隔開
呼叫方式大概有以下兩種:
# 給lambda函式起一個名字,然後就象普通函式一樣呼叫即可
fun = lambda x, y : x+y
fun(3, 4) # 函式名(實參)
# 直接給lambda加一個括號
(lambda x, y : x+y)(2, 3)
map
函式
語法:map(函式名/lambda表示式,可迭代物件)
,返回的是一個map
型別物件,可以用list
轉為列表輸出
作用就是將可迭代物件中的每個值分別作為實參傳入前面的函式
list(map(lambda x:x**2, range(5))) # [0, 1, 4, 9, 16] # 和下面的結果一樣 [(lambda x:x**2)(i) for i in range(5)] # [0, 1, 4, 9, 16] # 對於多個輸入值的函式對映,可以通過追加迭代物件實現,多個迭代物件逗號隔開即可 list(map(lambda x, y:str(x)+'_'+y, range(5), list('abcde')))
zip函式
將傳入的等長度的迭代物件相應位置的元素打包成一個元組,返回所有位置構成的元組的zip
物件,可以用list
或tuple
檢視結果
list(zip([1, 2, 3], [3, 4, 5])) # [(1, 3), (2, 4), (3, 5)]
for m,n in zip([1, 2, 3], [3, 4, 5]):
print(m, n)
"""
1 3
2 4
3 5
"""
dict(zip([1, 2, 3], [1, 1, 5])) # 當需要將兩個列表對應元素做字典的鍵值對對映時,可以用dict+zip實現
*
的用法
*
後面接列表或者其他可迭代物件時是將可迭代物件中的元素解出來,相當於列表去掉外面的括號只保留裡面的元素一樣
表示式中不能單獨使用*後面接變數形式,*
一般用於print語句;與zip結合;函式接受形參或者傳遞實參中
l = [1, 2, 4]
*l # 這個會報錯
print(*l) # 1 2 4 為啥放在print中就不會報錯了?,這裡可以看到把l中的元素解出來了
m = [2, 3, 4]
zip_ = zip(m, l)
list(zip_) # [(2, 1), (3, 2), (4, 4)]
list(zip(*zip_)) # [(2, 3, 4), (1, 2, 4)]
print(*list(zip(*zip_))) # (2, 3, 4) (1, 2, 4)
*
**
用在函式的形參中用於接受多個未知引數或者關鍵字傳參
# 函式形參中新增是為了在呼叫函式時,直接將傳入的多個位置引數放入一個元組中
def fun1(*a): # 將多個位置引數放入一個元組中賦值給a
print(a)
def fun2(**b): # 將多個關鍵字傳參放入一個字典中賦值給b
print(b)
fun1(1, 2)
fun2(m='n', a='1')
# 輸出
"""
(1, 2)
{'m': 'n', 'a': '1'}
"""
# *後面接字典
print(*{'m':10, 'n':2}) # m n
print(*{'m':10, 'n':2}.items()) # ('m', 10) ('n', 2)
*
和**
用在函式的實參中用於解開實參分別賦值給相應的形參
def f1(a, b):
print(a)
def f2(m, n):
print(m)
f1(*[1, 2])
f2(**{'m':10, 'n':2}) # 注意傳入字典中的鍵要和形參名一致
"""
1
10
"""
enumerate函式
enumerate
是一種特殊的打包,它可以在迭代時繫結迭代元素的遍歷序號:
L = list('ab')
for index, value in enumerate(L):
print(index, value)
"""
0 a
1 b
"""
input函式
變數 = input("提示性文字")
將使用者輸入賦值給一個變數,會把使用者的輸入轉為字串,即使你輸入的是數字
a = input('輸入一串數字,空格隔開')
a # '1 2 3'
關於字串的一些處理,可以處理接受input
的變數,因為該變數是字串
' 234 55'.strip() # 取出字串前後的空格
' 234 55 1'.split() # 預設分隔符為空格(一個或多個),用空格劃分字串,並將結果放入列表中
"""
'234 55'
['234', '55', '1']
"""
# input搭配eval函式,可以將字串轉為數字
a = eval(input('請輸入一個數字:')) # 輸入999,輸出就是int型數字,不是字串了
type(a) # int
# input搭配split,map,lambda使用,可以將輸入的一串空格隔開的數字放入列表中
n = input('輸入一串數字空格隔開') # 輸入'1 2 3'
n = list(map(lambda x: int(x), n.split())) # 也可以用[(lambda x: int(x))(x) for x in n.split()]代替
n # [1, 2, 3, 4]
參考連結:
[1] python函式引數中令人看不懂的*,**表示什麼?
[2] Python基礎