此部分介紹推導式、生成器表達式、lambda匿名函數以及部分內置函數,內容很多覺得有幫助的可以收藏~~~ ...
今日主要內容
- 推導式
- 生成器表達式
- lambda匿名函數
- 內置函數介紹
一、推導式
(一)列表推導式
先來看一段代碼
- 建立一個空列表,向空列表中添加元素
lst = list() for i in range(5): lst.append(i) print(lst) 運行結果: [0, 1, 2, 3, 4]
- 利用列表推導式,效果一樣
lst = [i for i in range(5)] print(lst) 運行結果: [0, 1, 2, 3, 4]
迴圈模式:
- 格式:
[元素 for 元素 in 可迭代對象]
- 執行流程:每次for迴圈將元素添加到列表中
lst = [i for i in range(5)] print(lst) 運行結果: [0, 1, 2, 3, 4]
- 格式:
篩選模式
篩選模式:
- 格式:
[元素 for 變數 in 可迭代對象 if 條件]
- 執行流程:執行for迴圈並判斷元素是否符合條件,將符合條件的元素添加到列表中
lst = [i for i in range(5) if i > 2] print(lst) 運行結果: [3, 4]
- 格式:
(二)字典推導式
同理,先來看一段代碼
- 建立一個空字典,向字典中添加鍵值對
dic = dict() for i in range(1, 5): dic[f"k{i}"] = i print(dic) 運行結果: {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
- 使用字典推導式,效果一樣
dic = {f"k{i}": i for i in range(1, 5)} print(dic) 運行結果: {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
迴圈模式:
- 格式:
{鍵值對 for 元素 in 可迭代對象}
- 執行流程:執行for迴圈利用元素組成鍵值對添加到字典中
dic = {f"k{i}": i for i in range(1, 5)} print(dic) 運行結果: {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
- 格式:
篩選模式:
- 格式:
{鍵值對 for 元素 in 可迭代對象 if 條件}
- 執行流程:執行for迴圈並判斷元素是否符合條件,利用符合條件的元素組成鍵值對添加到字典中
dic = {f"k{i}": i for i in range(1, 5) if i > 2} print(dic) 運行結果: {'k3': 3, 'k4': 4}
- 格式:
(三)集合推導式
- 與列表一樣,這裡就不再舉例了
迴圈模式:
- 格式:
{元素 for 元素 in 可迭代對象}
- 執行流程:每次for迴圈將元素添加到集合中
st = {i for i in range(5)} print(st) 運行結果: {0, 1, 2, 3, 4}
- 格式:
篩選模式:
- 格式:{元素 for 變數 in 可迭代對象 if 條件}`
- 執行流程:執行for迴圈並判斷元素是否符合條件,將符合條件的元素添加到集合中
lst = {i for i in range(5) if i > 2} print(st) 運行結果: {3, 4}
(四)推導式應用
- 來看幾個推導式的應用例題
求字元串
s = "zxdhnbhnb"
中"h"的索引s = "zxdhnbhnb" lst = [i for i in range(len(s)) if s[i] == "h"] print(lst) 運行結果: [3, 6]
將下列列表中帶兩個"e"的元素添加到新列表
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] lst = [name for i in names for name in i if name.count("e") == 2] print(lst) 運行結果: ['Jefferson', 'Wesley', 'Steven', 'Jennifer']
二、生成器表達式
(一)回顧:通過函數實現生成器
回顧一下通過函數實現生成器
- 將函數
return
變成yield
就變成了生成器
def func(): yield 1 yield 2 yield 3 g = func() print(next(g)) print(next(g)) print(next(g)) 運行結果: 1 2 3
- 將函數
(二)生成器表達式
通過表達式實現生成器
- 將列表推導式的方括弧
[]
變成圓括弧()
,就成了生成器表達式
lst = [i for i in range(5)] print(type(lst)) g = (i for i in range(5)) print(type(g)) 運行結果: <class 'list'> <class 'generator'>
- 轉換成通過函數實現的生成器(二者等價)
# g = (i for i in range(5)) def func(): # 二者等價 for i in range(5): yield i g= func() print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) 運行結果: 0 1 2 3 4
- 將列表推導式的方括弧
生成器表達式結構:
普通模式:
- 格式:
(元素 for 元素 in 可迭代對象)
- 運行機制:惰性機制,不取值不運行,每次取值得到一個結果
g = (i for i in range(5)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) 運行結果: 0 1 2 3 4
- 格式:
篩選模式:
- 格式:
(元素 for 元素 in 可迭代對象 if 條件)
- 運行機制:惰性機制,不取值不運行,每次取值得到一個滿足判斷條件的結果
g = (i for i in range(5) if i > 2) print(next(g)) print(next(g)) 運行結果: 3 4
- 格式:
生成器的取值方式補充:
- 之前提到過的最正宗的
next(生成器)
g = (i for i in range(5)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) 運行結果: 0 1 2 3 4
- 通過for迴圈取值
g = (i for i in range(5)) for el in g: print(el) 運行結果: 0 1 2 3 4
- 通過
list()
、tuple()
、set()
取值
g = (i for i in range(5)) print(list(g)) print(tuple(g)) print(set(g)) 運行結果: [0, 1, 2, 3, 4] (0, 1, 2, 3, 4) {0, 1, 2, 3, 4}
- 之前提到過的最正宗的
真正理解生成器的惰性機制,來看一道例題:
def add(a, b): return a + b def test(): for r_i in range(4): yield r_i g = test() for n in [2, 10]: g = (add(n, i) for i in g) print(list(g)) 運行結果: [20,21,22,23]
解析:生成器只有在取值的時候才會去運行,上述例題只有最後'print(list(g))'取值。 """ g = test() for n in [2, 10]: g = (add(n, i) for i in g) """ 所以上面的for迴圈可以寫成如下代碼: """ n = 10 g = (add(n, i) for i in (add(n, i) for i in test())) """ 最終代入得到的列表為:[20, 21, 22, 23]
三、lambda匿名函數
(一)匿名函數定義
python中為瞭解決一些簡單的需求可以使用一句話定義一個函數,這就是lambda匿名函數
lambda語法結構:
函數名 = lambda 形參:返回值
# def func(x, y): # return x + y # print(func(1, 2)) func = lambda x, y: x+y # 兩個函數等價 print(func(1, 2)) 運行結果: 3
註意事項:
- 形參:可以接受多個所有類型參數(位置、動態位置、預設值、動態關鍵字)
func = lambda a,b,*args,sex= 'alex',c,**kwargs: kwargs print(func(3, 4,c=666,name='zxd')) # 只返回kwargs 運行結果: {'name': 'zxd'}
- 返回值:只能返回一個數據(任意數據類型),必須寫
func = lambda x:(x[0],x[2]) print(func('zxdnb')) 運行結果: ('z', 'd')
- 返回值也可以是三元表達式
func = lambda x,y: x if x > y else y print(func(3,100)) 運行結果: 100
(二)結合匿名函數的列表推導式
例一:
- 列表推導式:
g = [lambda :i+1 for i in range(3)] print([em() for em in g]) 運行結果: [3, 3, 3]
- 轉換為普通代碼
g = list() for i in range(3): def func(): return i + 1 g.append(func) new_g = list() for em in g: new_g.append(em()) print(new_g) 運行結果: [3, 3, 3]
例二:
- 列表推導式:
g = [lambda i:i+1 for i in range(3)] print([em(3) for em in g]) 運行結果: [4, 4, 4]
- 轉換為普通代碼
g = list() for i in range(3): def func(i): return i + 1 g.append(func) new_g = list() for em in g: new_g.append(em(3)) print(new_g) 運行結果: [4, 4, 4]
(三)結合匿名函數的生成器表達式
例一:
- 生成器表達式:
g = (lambda i:i+1 for i in range(3)) print([em(3) for em in g]) 運行結果: [4, 4, 4]
- 轉換為函數實現的生成器:
def g(): for i in range(3): def func(i): return i + 1 yield func new_g = list() for em in g(): new_g.append(em(3)) print(new_g) 運行結果: [4, 4, 4]
例二:
- 生成器表達式:
g = (lambda :i+1 for i in range(3)) print([em() for em in g]) 運行結果: [1, 2, 3]
- 轉換為函數實現的生成器:
def g(): for i in range(3): def func(): return i + 1 yield func new_g = list() for em in g(): new_g.append(em()) print(new_g) 運行結果: [1, 2, 3]
例三:
- 生成器表達式
g = (lambda x:x*i for i in range(3)) for j in [2,10]: g1 = (em(3) for em in g) print([e+j for e in g1]) 運行結果: [10, 13, 16]
- 轉換為普通代碼
def g(): for i in range(3): def func(x): return x * i yield func for j in [2, 10]: def g1(): for em in g(): yield em(3) new_g = list() for e in g1(): new_g.append(e + j) print(new_g) 運行結果: [10, 13, 16]
四、內置函數
查看解釋器內置常量和內置函數的方法
dir(__builtins__)
Python3.6.8的內置函數(共72個)
abs all any ascii bin bool bytearray bytes callable chr classmethod compile complex copyright credits delattr dict dir divmod enumerate eval exec exit filter float format frozenset getattr globals hasattr hash help hex id input int isinstance issubclass iter len license list locals map max memoryview min next object oct open ord pow print property quit range repr reversed round set setattr slice sorted staticmethod str sum super tuple type vars zip
(一)基礎函數(瞭解)
all() any() bytes() callable() chr() ord() complex() divmid() eval() exec() frozenset() help() globals() locals() hash() id() iter() next() bin() oct() int() hex() pow() repr() round() bool()
all()
- 函數定義:
all(*args, **kwargs)
- 函數說明:填入參數為可迭代對象,如果可迭代對象中每一項元素的布爾值為真,則返回True,若可迭代對象為空,返回True
print(all([1, 2, 3, 4, 5])) print(all([0, 1, 2, 3, 4])) print(all([])) 運行結果: True False True
- 函數定義:
any()
- 函數定義:
any(*args, **kwargs)
- 函數說明:填入參數為可迭代對象,如果可迭代對象中只要有一項元素的布爾值為真,則返回True,若可迭代對象為空,返回True
print(any([0, "", 1, False])) print(any([0, "", [], False])) print(any([])) 運行結果: True False False
- 函數定義:
bytes()
- 函數定義:
bytes(value=b'', encoding=None, errors='strict')
- 函數說明:將填入對象轉換為位元組形式,需要指定編碼方式
print("張旭東".encode("utf-8")) print(bytes("張旭東", encoding="utf-8")) 運行結果: b'\xe5\xbc\xa0\xe6\x97\xad\xe4\xb8\x9c' b'\xe5\xbc\xa0\xe6\x97\xad\xe4\xb8\x9c'
- 函數定義:
callable()
- 函數定義:
callable(i_e_, some_kind_of_function)
- 函數說明:判斷對象是否可以調用(類也是可調用的,類的實例可調用
__call__()
方法)
def func(): print("hello world") print(callable(func)) 運行結果: True
- 函數定義:
chr()
- 函數定義:
chr(*args, **kwargs)
- 函數說明:返回Unicode對應的字元串
print(chr(65)) 運行結果: A
- 函數定義:
ord()
- 函數定義:
ord(*args, **kwargs)
- 函數說明:返回一個字元串對應的Unicode編碼值
print(ord("A")) 運行結果: 65
- 函數定義:
complex()
- 函數定義:
complex(real, imag=None)
- 函數說明:返回一個數的複數形式
print(complex(20)) 運行結果: (20+0j)
- 函數定義:
divmid()
- 函數定義:
divmod(x, y)
- 函數說明:返回元組
(x // y, x % y)
print(divmod(10, 3)) 運行結果: (3, 1)
- 函數定義:
eval()(不推薦使用)
- 函數定義:
eval(*args, **kwargs)
- 函數說明:可以計算給定的參數,參數只能是簡單表達式
print(eval("5 + 3")) 運行結果: 8
- 函數定義:
exec()(不推薦使用)
- 函數定義:
exec(*args, **kwargs)
- 函數說明:可以計算給定的參數,參數可以是代碼塊
exec("for i in range(10):print(i)") 運行結果: 0 1 2 3 4
- 函數定義:
frozenset()
- 函數定義:
frozenset(obj)
- 函數說明:將對象轉換為不可變集合
print(frozenset((1,2,3))) 運行結果: frozenset({1, 2, 3})
- 函數定義:
help()
- 函數定義:
help(args)
- 函數說明:查看幫助
help(list.append) 運行結果: Help on method_descriptor: append(...) L.append(object) -> None -- append object to end
- 函數定義:
globals()
- 函數定義:
globals(*args, **kwargs)
- 函數說明:返回包含當前作用域的全局變數的字典
a = 5 b = 10 def func(): print("hello world") print(globals()) 運行結果: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000221ED9D69E8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/python_S26/day12/exercise.py', '__cached__': None, 'a': 5, 'b': 10, 'func': <function func at 0x00000221ED8D1EA0>}
- 函數定義:
locals()
- 函數定義:
locals(*args, **kwargs)
- 函數說明:返回一個包含當前作用域的局部變數的字典
a = 5 def func(): b = 10 print(locals()) func() 運行結果: {'b': 10}
- 函數定義:
hash()
- 函數定義:
hash(*args, **kwargs)
- 函數說明:返回對象的哈希值
print(hash("zxd")) 運行結果: 5236597812272808709
- 函數定義:
id()
- 函數定義:
id(*args, **kwargs)
- 函數說明:返回對象的id,在CPython中返回的是對象的記憶體地址
print(id(10)) 運行結果: 1864728976
- 函數定義:
iter()
- 函數定義:
iter(iterable, sentinel=None)
- 函數說明:傳入可迭代對象,獲取迭代器
lst = [1, 2, 3, 4, 5] t = iter(lst) print(t) 運行結果: <list_iterator object at 0x00000181FB2CA9B0>
- 函數定義:
next()
- 函數定義:
next(iterator, default=None)
- 函數說明:返回迭代器的下一項,若提供了預設值,並且迭代器已耗盡,則返回它而不是引發StopIteration
t = iter([1, 2, 3, 4, 5]) print(next(t, None)) print(next(t, None)) print(next(t, None)) print(next(t, None)) print(next(t, None)) print(next(t, None)) 運行結果: 1 2 3 4 5 None
- 函數定義:
bin()
- 函數定義:
bin(*args, **kwargs)
- 函數說明:返回整數的二進位形式
print(bin(10)) 運行結果: 0b1010
- 函數定義:
oct()
- 函數定義:
oct(*args, **kwargs)
- 函數說明:返回整數的八進位形式
print(oct(10)) 運行結果: 0o12
- 函數定義:
int()
- 函數定義:
int(x, base=10)
- 函數說明:返回對應進位的十進位,需填入對應進位數字元串形式,並填入進位數
print(int("0b1010", 2)) print(int("0o12", 8)) 運行結果: 10 10
- 函數定義:
hex()
- 函數定義:
hex(*args, **kwargs)
- 函數說明:返回整數的十六進位形式
print(hex(20)) 運行結果: 0x14
- 函數定義:
pow()
- 函數定義:
pow(*args, **kwargs)
- 函數說明:填入兩個參數時,求x的y次冪;填入三個參數時,求x的y次冪在與z取餘
print(pow(2, 4)) print(pow(2, 4, 3)) 運行結果: 16 1
- 函數定義:
repr()
- 函數定義:
repr(obj)
- 函數說明:返回規範字元串的表現形式
s = "zxd" print(repr(s)) 運行結果: 'zxd'
- 函數定義:
round()
- 函數定義:
round(number, ndigits=None)
- 函數說明:將數字四捨五入為十進位整數
print(round(3.5)) 運行結果: 4
- 函數定義:
(二)常用函數(會用)
abs() format() enumerate() open() range() print() input() len() list() dict() str() set() tuple() float() reversed sum() dir() type() zip() bool()
abs()
- 函數定義:
abs(*args, **kwargs)
- 函數說明:返回參數的絕對值
print(abs(-1)) 運行結果: 1
- 函數定義:
format()
- 函數定義:
format(*args, **kwargs)
- 函數說明:返回格式化後的字元串
s = "你好" print(format(s, ">20")) # 右對齊20位,多餘的部分用空格補齊 print(format(s, "<20")) # 左對齊20位,多餘的部分用空格補齊 print(format(s, "^20")) # 居中共20位,多餘的部分用空格補齊 運行結果: 你好 你好 你好
s = 18 print(format(s, "08b")) # 共八位,轉換為二進位 print(format(s, "08o")) # 共八位,轉換為八進位 print(format(s, "08x")) # 共八位,轉換為十六進位 print(format(s, "08d")) # 共八位,轉換為十進位 運行結果: 00010010 00000022 00000012 00000018
- 函數定義:
enumerate()
- 函數定義:
enumerate(iterable, start=0)
- 函數說明:枚舉,遍歷可迭代對象並給定對應遍歷的數字,以元組的形式返回,第二個參數可指定遍曆數字的起始值
lst = [1, 2, 3, 4, 5] for i in enumerate(lst): print(i) 運行結果: (0, 1) (1, 2) (2, 3) (3, 4) (4, 5)
lst = [1, 2, 3, 4, 5] for i in enumerate(lst, 10): # 指定起始值 print(i) 運行結果: (10, 1) (11, 2) (12, 3) (13, 4) (14, 5)
- 函數定義:
open()
- 函數定義:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
- 函數說明:打開一個文件,指定文件路徑
file
、文件打開模式mode
、文件編碼encoding
,返回一個文件句柄用於操作文件,其餘參數暫時忽略
f = open("text.txt", mode="r", encoding="utf-8") f.read() f.close()
- 函數定義:
range()
- 函數定義:
range(start, stop[, step])
- 函數說明:返回一個對象,該對象可以從開始一個一個返回一個遞增的整數序列一直到結束,如果有步長參數,則按照步長返回
for i in range(5): print(i) 運行結果: 0 1 2 3 4
- 函數定義:
print()
- 函數定義:
print(self, *args, sep=' ', end='\n', file=None)
- 函數說明:在控制台列印參數,可填入參數
sep
來替代元素之間的逗號,可填入參數end
來控制結尾的換行,可填入參數file
將列印的內容寫入文件
print("zxd", "znb", sep="-", end="!") 運行結果: zxd-znb!
- 函數定義:
input()
- 函數定義:
input(*args, **kwargs)
- 函數說明:將輸入內容轉換為字元串,可填出參數用來提示用戶
name = input("請輸入姓名:") print(name) 運行結果: zxd
- 函數定義:
len()
- 函數定義:
len(*args, **kwargs)
- 函數說明:返回容器中的項數
lst = [1, 2, 3, 4, 5] print(len(lst)) 運行結果: 5
- 函數定義:
list()
- 函數定義:
list()
list(iterable)
- 函數說明:
- 預設創建空列表
- 將可迭代對象轉換為列表
print(list()) print(list(range(5))) 運行結果: [] [0, 1, 2, 3, 4]
- 函數定義:
dict()
- 函數定義:
dict()
dict(mapping)
dict(iterable)
dict(**kwargs)
- 函數說明:
- 預設創建空字典
- 可填入映射創建字典
- 可填入二元組列表創建字典
- 可填入關鍵字參數常見列表
print(dict()) print(dict({"k1": 1, "k2": 2})) print(dict([("k1", 1), ("k2", 2)])) print(dict(k1=1, k2=2)) 運行結果: {} {'k1': 1, 'k2': 2} {'k1': 1, 'k2': 2} {'k1': 1, 'k2': 2}
- 函數定義:
str()
函數定義:
str()
str(value='', encoding=None, errors='strict')
函數說明:
預設創建空字元串
可將參數轉換為字元串類型,若填入參數為位元組類型,需指定編碼方式
print(repr(str(123))) print(str(b'\xe5\xbc\xa0\xe6\x97\xad\xe4\xb8\x9c',encoding="utf-8")) 運行結果: 張旭東 '123'
set()
- 函數定義:
set()
set(iterable)
- 函數說明:
- 預設創建空集合
- 將可迭代對象轉換為集合(自動去重)
print(set()) print(set([1,2,3,4,5])) 運行結果: set() {1, 2, 3, 4, 5}
- 函數定義:
tuple()
- 函數定義:
tuple()
tuple(iterable)
- 函數說明:
- 預設創建空元組
- 將可迭代對象轉換為元組
print(tuple()) print(tuple([1, 2, 3, 4, 5])) 運行結果: () (1, 2, 3, 4, 5)
- 函數定義:
float()
- 函數定義:
float(x)
- 函數說明:將參數轉換為浮點型
print(float(123)) 運行結果: 123.0
- 函數定義:
reversed
- 函數定義:
reversed(sequence)
- 函數說明:將傳入的可迭代對象反向迭代,返回一個迭代器
lst = [1, 2, 3, 4, 5] print(reversed(lst)) print(list(reversed(lst))) 運行結果: <list_reverseiterator object at 0x000002043A55A9B0> [5, 4, 3, 2, 1]
- 函數定義:
sum()
- 函數定義:
sum(*args, **kwargs)
- 函數說明:將填入的參數求和,填入的參數必須是可迭代對象
print(sum([1, 2, 3, 4, 5])) 運行結果: 15
- 函數定義:
dir()
- 函數定義:
dir([object])
- 函數說明:查看對象的方法
print(dir(list)) 運行結果: ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
- 函數定義:
type()
- 函數定義:
type(object_or_name, bases, dict)
- 函數說明:查看對象的類型(其實
type()
既是函數,又是元類(創造類的類),可以通過type()
創建一個類)
print(type(list())) 運行結果: <class 'list'>
- 函數定義:
zip()
- 函數定義:
zip(iter1 [,iter2 [...]])
- 函數說明:拉鏈函數,返回一個迭代器,將所有可迭代對象的元素按照位置打包成元組,直到耗盡項數最少的可迭代對象
lst1 = [1, 2, 3] lst2 = [1, 2, 3, 4, 5] print(zip(lst1, lst2)) print(list(zip(lst1, lst2))) 運行結果: <zip object at 0x00000204D6E621C8> [(1, 1), (2, 2), (3, 3)]
- 函數定義:
bool()
- 函數定義:
bool(x)
- 函數說明:將傳入的參數轉換成布爾值,若不填入參數返回False
print(bool()) print(bool(123)) 運行結果: False True
- 函數定義:
(三)高階函數(熟練)
高階函數全部需要結合規則函數,利用lambda匿名函數構造規則函數
filter() 篩選過濾 map() 映射 sorted() 排序 max() 求最大值 min() 求最小值 reduce() 累計算
filter()
- 篩選過濾功能
- 函數定義:
filter(function or None, iterable)
- 函數說明:返回一個迭代器,該迭代器返回滿足規格函數的可迭代對象中的元素,若函數為None,返回可迭代對象中為True的元素
# 規則函數為None,返回可迭代對象中True的元素 print(list(filter(None, [0, 1, 2, 3]))) 運行結果: [1, 2, 3]
# 返回滿足規則函數可迭代對象中的元素 print(list(filter(lambda x: x > 1, [0, 1, 2, 3]))) 運行結果: [2, 3]
map()
- 映射功能
- 函數定義:
map(func, *iterables)
- 函數說明:創建一個迭代器,它使用可迭代對象中的每個元素當作參數執行規則函數,直到最短的可迭代對象耗盡為止
print(list(map(lambda x: x ** 2, [1, 2, 3]))) 運行結果: [1, 4, 9]
sorted()
- 排序功能
- 函數定義:
sorted(*args, **kwargs)
- 函數說明:返回一個列表,按照可迭代對象中的元素升序排列,還可以指定
key=規則函數
按照規則函數來排序,還可以指定reverse=True
來降序排列 - 與列表中
list.sort()
的區別:list.sort()
改變的是原有列表sorted()
建立的新列表
lst = [4, 2, 3, 7, 1] print(sorted(lst)) print(lst) # 不改變原來列表 運行結果: [1, 2, 3, 4, 7] [4, 2, 3, 7, 1]
dic = {"k1": 3, "k2": 13, "k3": 1} print(sorted(dic, key=lambda x: dic[x], reverse=True)) 運行結果: ['k2', 'k1', 'k3']
max()
返回最大值
函數定義:
max(iterable, *[, default=obj, key=func])
max(arg1, arg2, *args, *[, key=func])
函數說明:
- 使用單個可迭代對象,返回其中的最大值,可填入倆個關鍵字參數,當可迭代對象為空的時候返回default的值,可指定規則函數
lst1 = [1, 2, 3, 4, 5, -6] lst2 = [] print(max(lst1)) print(max(lst1, key=abs)) # 制定規則參數,返回絕對值最大的元素 print(max(lst2, default=1)) # 當lst2為空的時候返回1 運行結果: 5 -6 1
- 使用兩個或更多的參數,返回其中最大的參數
a = 5 b = 10 print(max(a, b)) 運行結果: 10
min()
返回最小值
函數定義:
min(iterable, *[, default=obj, key=func])
min(arg1, arg2, *args, *[, key=func])
函數說明:
- 使用單個可迭代對象,返回其中的最小值,可填入倆個關鍵字參數,當可迭代對象為空的時候返回default的值,可指定規則函數
lst1 = [1, -2, 3, -4, 5, -6] lst2 = [] print(min(lst1)) print(min(lst1, key=abs)) print(min(lst2, default=1)) 運行結果: -6 1 1
- 使用兩個或更多的參數,返回其中最小的參數
a = 5 b = 10 print(min(a, b)) 運行結果: 5
reduce()
- 累計算
- 函數定義:
reduce(function, sequence, initial=None)
- 函數說明:按照規則函數將序列從左到右累計算,若有initial參數則作為序列的第一項,併在序列為空時作為預設值
from functools import reduce print(reduce(lambda x, y: x * y, [1, 2, 3, 4, 5])) print(reduce(lambda x, y: x * y, [1, 2, 3, 4, 5], 5)) print(reduce(lambda x, y: x * y, [], 5)) 運行結果: 120 600 5
(四)面向對象函數
classmethod() delattr() getattr() hasattr() issubclass() isinstance() object() property() setattr() staticmethod() super() - 後續補充...