1. 程式人生 > >Python 入門基礎12 ---函數基礎5 匿名函數、內置函數

Python 入門基礎12 ---函數基礎5 匿名函數、內置函數

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 for
k, 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() 函數的代碼的上下文中,returnyield 語句也不能在函數定義之外使用。
    該函數返回值是 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
5.類型轉化
技術分享圖片
bool() # 返回一個布爾值,True 或者 False。
str() # 返回一個 str 版本的 object 。
bytes() # 返回一個 str 版本的 object 。
chr() # 返回 Unicode 碼位為整數 i 的字符的字符串格式。例如,chr(97) 返回字符串 ‘a‘,chr(8364) 返回字符串 ‘€‘。這是 ord() 的逆函數。
ord(c) # 對表示單個 Unicode 字符的字符串,返回代表它 Unicode 碼點的整數。例如 ord(‘a‘) 返回整數 97, ord(‘€‘) (歐元符合)返回 8364 。這是 chr() 的逆函數。
View Code

Python 入門基礎12 ---函數基礎5 匿名函數、內置函數