Python 入門基礎12 ---函數基礎5 匿名函數、內置函數
阿新 • • 發佈:2019-04-05
erro 字典生成 應用 對象類型 for sci 編碼 pre 字典推導式
今日內容:
-
1.三元表達式
-
2.列表、元組生成式 | 字典生成式
-
3.遞歸
-
4.匿名函數
-
5.內置函數
一、三元表達式
三元運算符:就是 if...else... 語法糖
前提:if 和 else
# 三元運算符的結果不一定要與條件有直接性關系 res = ‘b為較小的數‘ if a > b else ‘a為較小的數‘ # 求小值 print(res) # 案例:得到兩個數中較大的值 a = 20 b = 30 res = a if a > b else b print(res)
二、列表、元組生成式、字典生成式
# 列表(元組)推導式
dic = {‘a‘: 1, ‘b‘: 2, ‘c‘: 3} # =>[(‘a‘,1),(‘b‘,2),(‘c‘,2)] res = [(k, v) for k, v in dic.items()] print(res)
# 元組推導式
res = ((k, v)for k, v in dic.items()) print(tuple(res))
# 字典推導式
ls = [(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)] # => {‘a‘: 1, ‘b‘: 2, ‘c‘: 3} res = {k: v fork, v in ls} print(res)
三、遞歸
回溯:詢問答案的過程
遞推:推出答案的過程
前提:
回溯到一個有具體結果的值,開始遞推
回溯與遞推的條件要有規律
遞歸本質:函數的自我調用(自己調自己)
四、匿名函數
沒有名字的函數 語法:lambda 參數列表:一個返回值表達式 匿名函數:沒有函數名,沒有函數體,只有有一個返回值 關鍵字:lambda | 參數列表省略()| 返回值return關鍵字也省略 應用場景: 1.匿名函數函數地址可以被一個變量接收,該變量就可以作為函數名來使用,但就違背了匿名初衷2.結合內置函數來使用:內置函數某些參數需要一個函數地址,可以復制一個有名函數名,也可以直接賦值匿名函數
五、內置函數
後面涉及的內容: # classmethod() :把一個方法封裝成類方法。一個類方法把類自己作為第一個實參,就像一個實例方法把實例自己作為第一個實參。 # staticmenthod():將方法轉換為靜態方法。靜態方法不會接收隱式的第一個參數。 # super() # object() # 反射 # getattr() # setattr() # delattr()後面內容
官方文檔:https://docs.python.org/zh-cn/3.7/library/functions.html
1.名稱空間
globals():返回表示當前全局符號表的字典。 locals():更新並返回一個包含了當前局部作用域中符號表的字典。 # 名稱空間 <=> 可執行字符串 exec(object[, globals[, locals]]): 這個函數支持動態執行 Python 代碼。 object 必須是字符串或者代碼對象。如果是字符串,那麽該字符串將被解析為一系列 Python 語句並執行(除非發生語法錯誤)。 [1] 如果是代碼對象,它將被直接執行。 在任何情況下,被執行的代碼都需要和文件輸入一樣是有效的(見參考手冊中關於文件輸入的章節)。 請註意即使在傳遞給 exec() 函數的代碼的上下文中,return 和 yield 語句也不能在函數定義之外使用。 該函數返回值是 None 。 eval(expression, globals=None, locals=None) 實參是一個字符串,以及可選的 globals 和 locals。globals 實參必須是一個字典。locals 可以是任何映射對象。 expression 參數會作為一個 Python 表達式(從技術上說是一個條件列表)被解析並求值,使用 globals 和 locals 字典作為全局和局部命名空間。 如果 globals 字典存在且不包含以 __builtins__ 為鍵的值,則會在解析 expression 之前插入以此為鍵的對內置模塊 builtins 的字典的引用。 這意味著 expression 通常具有對標準 builtins 模塊的完全訪問權限且受限的環境會被傳播。 如果省略 locals 字典則其默認值為 globals 字典。 如果兩個字典同時省略,表達式會在 eval() 被調用的環境中執行。 返回值為表達式求值的結果。 語法錯誤將作為異常被報告。 enumerate(): 返回一個枚舉對象。iterable 必須是一個序列,或 iterator,或其他支持叠代的對象。 enumerate() 返回的叠代器的 __next__() 方法返回一個元組, 裏面包含一個計數值(從 start 開始,默認為 0)和通過叠代 iterable 獲得的值。 isinstance(): 如果 object 實參是 classinfo 實參的實例,或者是(直接、間接或 虛擬)子類的實例,則返回 true。 如果 object 不是給定類型的對象,函數始終返回 false。 如果 classinfo 是對象類型(或多個遞歸元組)的元組,如果 object 是其中的任何一個的實例則返回 true。 如果 classinfo 既不是類型,也不是類型元組或類型的遞歸元組,那麽會觸發 TypeError 異常。 len(): 返回對象的長度(元素個數)。 實參可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。 max((arg1, arg2, *args[, key]): 返回可叠代對象中最大的元素,或者返回兩個及以上實參中最大的。 如果只提供了一個位置參數,它必須是非空 iterable,返回可叠代對象中最大的元素; 如果提供了兩個及以上的位置參數,則返回最大的位置參數。 有兩個可選只能用關鍵字的實參。 key 實參指定排序函數用的參數,如傳給 list.sort() 的。 default 實參是當可叠代對象為空時返回的值。 如果可叠代對象為空,並且沒有給 default ,則會觸發 ValueError。 如果有多個最大元素,則此函數將返回第一個找到的。 min(arg1, arg2, *args[, key]): 返回可叠代對象中最小的元素,或者返回兩個及以上實參中最小的。 如果只提供了一個位置參數,它必須是 iterable,返回可叠代對象中最小的元素; 如果提供了兩個及以上的位置參數,則返回最小的位置參數。 有兩個可選只能用關鍵字的實參。key 實參指定排序函數用的參數,如傳給 list.sort() 的。 default 實參是當可叠代對象為空時返回的值。 如果可叠代對象為空,並且沒有給 default ,則會觸發 ValueError。View Code
2.運算
abs(x) : 返回一個數的絕對值。實參可以是整數或浮點數。如果實參是一個復數,返回它的模。 pow(x, y[, z]) # 返回 x 的 y 次冪;如果 z 存在,則對 z 取余(比直接 pow(x, y) % z 計算更高效)。兩個參數形式的 pow(x, y) 等價於冪運算符: x**y。 sum(iterable[, start]) # 從 start 開始自左向右對 iterable 中的項求和並返回總計值。 start 默認為 0。 iterable 的項通常為數字,開始值則不允許為字符串。 divmod(a, b) # 它將兩個(非復數)數字作為實參,並在執行整數除法時返回一對商和余數。 對於混合操作數類型,適用雙目算術運算符的規則。對於整數,結果和 (a // b, a % b) 一致。 對於浮點數,結果是 (q, a % b) ,q 通常是 math.floor(a / b) 但可能會比 1 小。 在任何情況下, q * b + a % b 和 a 基本相等;如果 a % b 非零,它的符號和 b 一樣,並且 0 <= abs(a % b) < abs(b) 。 集合判斷操作 # all(iterable) # 如果 iterable 的所有元素為真(或叠代器為空),返回 True 。 any(iterable) # 如果*iterable*的任一元素為真則返回``True``。如果叠代器為空,返回``False``。 lambda x: x % 2 == 0, [1, 2, 3, 4, 5]) # 偶數才能通過過濾View Code
3.原義字符串
ascii(object) # 就像函數 repr(),返回一個對象可打印的字符串, 但是 repr() 返回的字符串中非 ASCII 編碼的字符,會使用 \x、\u 和 \U 來轉義。 生成的字符串和 Python 2 的 repr() 返回的結果相似。 repr(object) # 返回包含一個對象的可打印表示形式的字符串。 對於許多類型來說,該函數會嘗試返回的字符串將會與該對象被傳遞給 eval() 時所生成的對象具有相同的值, 在其他情況下表示形式會是一個括在尖括號中的字符串, 其中包含對象類型的名稱與通常包括對象名稱和地址的附加信息。 類可以通過定義 __repr__() 方法來控制此函數為它的實例所返回的內容。View Code
4. 進制
bin(x) # 將一個整數轉變為一個前綴為“0b”的二進制字符串。 結果是一個合法的 Python 表達式。 如果 x 不是 Python 的 int 對象,那它需要定義 __index__() 方法返回一個整數。 oct(x) # 將一個整數轉變為一個前綴為“0o”的八進制字符串。結果是一個合法的 Python 表達式。 如果 x 不是 Python 的 int 對象,那它需要定義 __index__() 方法返回一個整數。 hex(x) # 將整數轉換為以“0x”為前綴的小寫十六進制字符串。 如果 x 不是 Python int 對象,則必須定義返回整數的 __index__() 方法。View Code