1. 程式人生 > 其它 >用故事解釋順序結構與鏈式結構

用故事解釋順序結構與鏈式結構

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物件,可以用listtuple檢視結果

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基礎