python內置函數概要

什麼是內置函數? 就是python給你提供的拿來直接⽤的函數, 比如print,input等等。python 解釋器內置了很多函數和類型,python3內置函數大概60多個,以下按字母表順序列出它們:
在這裏插入圖片描述
python內置函數思維導圖:
作用域相關:
1.locals() 返回當前作⽤域中的名字
2.globals() 返回全局作⽤域中的名字
迭代器相關:
3.range() ⽣成數據
4.next() 迭代器向下執⾏⼀次, 內部實際使⽤了__next__()⽅法返回迭代器的下⼀個項⽬
5.iter() 獲取迭代器, 內部實際使⽤的是__iter__()⽅法來獲取迭代器
字符串類
6.eval() 執⾏字符串類型的代碼. 並返回最終結果
7.exec() 執⾏字符串類型的代碼

exec("""
for i in range(6):
 print(i)
""")
exec("""
def func():
 print("一定要站在你所熱愛的世界裏閃閃發光。")
func()
""")

執行結果:
在這裏插入圖片描述
8.compile() 即compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
參數說明:

  1. resource ,要執⾏的代碼, 動態代碼⽚段
  2. filename,⽂件名, 代碼存放的⽂件名, 當傳⼊了第⼀個參數的時候, 這個參數給空就可以了
  3. mode,模式, 取值有3個:

1. exec: ⼀般放⼀些流程語句的時候
2. eval: resource只存放⼀個求值表達式.
3. single: resource存放的代碼有交互的時候. mode應爲single

有返回值的字符串形式的代碼⽤eval(). 沒有返回值的字符串形式的代碼⽤**exec()**⼀般很少⽤到compile().實際上這兩個也是python內置函數。
可選參數 flags 和 dont_inherit 控制在編譯 source 時要用到哪個 future 語句。 如果兩者都未提供(或都爲零)則會使用調用 compile() 的代碼中有效的 future 語句來編譯代碼。 如果給出了 flags 參數但沒有 dont_inherit (或是爲零) 則 flags 參數所指定的 以及那些無論如何都有效的 future 語句會被使用。 如果 dont_inherit 爲一個非零整數,則只使用 flags 參數 – 在調用外圍有效的 future 語句將被忽略。

Future 語句使用比特位來指定,多個語句可以通過按位或來指定。具體特性的比特位可以通過 future 模塊中的 _Feature 類的實例的 compiler_flag 屬性來獲得。

optimize 實參指定編譯器的優化級別;默認值 -1 選擇與解釋器的 -O 選項相同的優化級別。顯式級別爲 0 (沒有優化;debug 爲真)、1 (斷言被刪除, debug 爲假)或 2 (文檔字符串也被刪除)。

如果編譯的源碼不合法,此函數會觸發 SyntaxError 異常;如果源碼包含 null 字節,則會觸發 ValueError 異常。

code1 = "for i in range(10): print(i)"
c1 = compile(code1, "", mode="exec")
exec(c1)
code2 = "1+2+3"
c2 = compile(code2, "", mode="eval")
a = eval(c2)
print(a)
code3 = "name = input('請輸⼊你的名字:')"
c3 = compile(code3, "", mode="single")
exec(c3)
print(name)

執行結果:
在這裏插入圖片描述
輸入和輸出相關:
9.input() 獲取⽤戶輸入的內容
10.print() 打印輸出
內存相關:
11.hash() 獲取到對象的哈希值(int, str, bool, tuple)
12.id() 獲取到對象的內存地址
文件操作相關:
13.open() ⽤於⼝打開⼀個⽂件, 創建⼀個⽂件句柄
模塊相關:
14.import() ⽤於動態加載類和函數
幫助:
15.help() 函數⽤於查看函數或模塊⽤途的詳細說明
調⽤相關:
16. callable() ⽤於檢查⼀個對象是否是可調⽤的. 如果返回True, object有可能調⽤失敗, 但如果返回False. 那調⽤絕對不會成功
查看內置屬性:
17.dir() 查看對象的內置屬性, ⽅法. 訪問的是對象中的__dir__()⽅法
基礎數據類型相關:
1.數字相關:
18.bool() 將給定的數據轉換成bool值. 如果不給值. 返回False
19.int() 將給定的數據轉換成int值. 如果不給值, 返回0
20.float() 將給定的數據轉換成float值. 也就是⼩數
21.complex() 創建⼀個複數. 第⼀個參數爲實部, 第⼆個參數爲虛部. 或者第⼀個參數直接⽤字符串來描述複數
2.進制轉換:
22.bin() 將給的參數轉換成⼆進制
23.otc() 將給的參數轉換成八進制
24.hex() 將給的參數轉換成⼗六進制

3.數學運算:
25.abs() 返回絕對值
26.divmod() 返回商和餘數
27. round() 四捨五入(不知道你們有沒有遇到測試時輸入2.5它給輸出2,輸入2.51就變成3,是不是不合理呢?爲此我特意查了一下,如果我們閱讀一下python3的文檔,裏面是這麼寫的:“values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done toward the even choice.” 如果距離兩邊一樣遠,會保留到偶數的一邊。比如round(0.5)和round(-0.5)都會保留到0,而round(1.5)會保留到2,round(2.5)也會保留到2(偶數))
28. pow(a, b) 求a的b次冪, 如果有三個參數. 則求完次冪後對第三個數取餘
29. sum() 求和
30.min() 求最⼩值
31.max() 求最⼤值
和數據結構相關:
列表和元組:

32. list() 將⼀個可迭代對象轉換成列表
33. tuple() 將⼀個可迭代對象轉換成元組
34. reversed() 將⼀個序列翻轉, 返回翻轉序列的迭代器
35.slice() 列表的切片
字符串相關:
36. str() 將數據轉化成字符串
37.format() 與具體數據相關, ⽤於計算各種小數, 精算等

# # 字符串
print(format('test', '<10')) # 左對⻬
print(format('test', '>10')) # 右對⻬
print(format('test', '^10')) # 居中
# # 數值
print(format(3, 'b')) # ⼆進制 11
print(format(97, 'c')) # 轉換成unicode字符
print(format(11, 'd')) # ⼗進制 11
print(format(11, 'o')) # ⼋進制 13
print(format(11, 'x')) # ⼗六進制(小寫字母) b
print(format(11, 'X')) # ⼗六進制 B
print(format(11, 'n')) # 和d⼀樣 11
print(format(11)) # 和d⼀樣 11
# # 浮點數
print(format(123456789, 'e')) # 科學計數法. 默認保留6位⼩數 1.234568e+08
print(format(123456789, '0.2e')) # 科學計數法. 保留2位⼩數(⼩寫) 1.23e+08
print(format(123456789, '0.2E')) # 科學計數法. 保留2位⼩數(⼤寫) 1.23E+08
print(format(1.23456789, 'f')) # ⼩數點計數法. 保留6位⼩數 1.234568
print(format(1.23456789, '0.2f')) # ⼩數點計數法. 保留2位⼩數 1.23
print(format(1.23456789, '0.10f')) # ⼩數點計數法. 保留10位⼩數 1.2345678900
print(format(1.23456789e+10000, 'F')) # ⼩數點計數法 INF

38.bytes() 把字符串轉化成bytes類型
39.bytearray() 返回⼀個新字節數組. 這個數字⾥的元素是可變的, 並且每個元素的值的範圍是[0,256)


ret = bytearray('alex',encoding='utf-8')
print(ret[0]) # 97
print(ret) # bytearray(b'alex')

40.memoryview() 查看bytes在內存中的情況

s = memoryview("你好呀".encode("utf-8"))
print(s) # <memory at 0x000001CF2513F648>

41.ord() 輸入字符找帶字符編碼的位置
42.chr() 輸入位置數字找出對應的字符
43.ascii() 是ascii碼中的返回該值 不是就返回\u…

# 找到對應字符的編碼位置
print(ord('a')) #97
print(ord('中')) # 20013
# 找到對應編碼位置的字符
print(chr(97)) # a
print(chr(20013)) # 中
# 在ascii中就返回這個值. 如果不在就返回\u...
print(ascii('a')) # 'a'
print(ascii('好')) # '\u597d'

44.repr() 返回⼀個對象的string形式,字符串原封不動的輸出, 內部引號和轉義字符都不起作⽤
數據集合:
45. dict() 創建⼀個字典
46. set() 創建⼀個集合
47. frozenset() 創建⼀個凍結的集合,凍結的集合不能進⾏添加和刪除操作
其他相關:
48.len() 返回⼀個對象中的元素的個數
49.sorted() 對可迭代對象進⾏排序操作
50. enumerate() 獲取集合的枚舉對象


lst = ["春天", "垂柳", "桃花"]
for index, el in enumerate(lst):
   print(str(index)+"==>"+el)

運行結果:
在這裏插入圖片描述
51.all() 可迭代對象中全部是True, 結果纔是True
52.any() 可迭代對象中有⼀個是True, 結果就是True


print(all([1,True,0])) #False
print(any([1,'',0])) #True

53.zip() 函數用於將可迭代的對象作爲參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的對象,這樣做的好處是節約了不少的內存。
我們可以使用 list() 轉換來輸出列表。如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用 * 號操作符,可以將元組解壓爲列表。


l1 = [1,2,3,]
l2 = ['a','b','c',5]
l3 = ('*','**',(1,2,3))
for i in zip(l1,l2,l3):
    print(i)

運行結果:
在這裏插入圖片描述

l1=[1,2,3]
l2=[4,5,6]
z=zip(l1,l2)
print(z)
print(list(z))
l3,l4=zip(*zip(l1,l2))
print(l1==list(l3)and l2==list(l4))

運行結果:
在這裏插入圖片描述
lamda匿名函數lambda是Python預留的關鍵字,並不是內置函數,不需要⽤def來聲明, ⼀句話就可以聲明出⼀個函數
語法:
函數名 = lambda 參數: 返回值
注意:

  1. 函數的參數可以有多個, 多個參數之間⽤逗號隔開
  2. 匿名函數不管多複雜,只能寫⼀⾏, 且邏輯結束後直接返回數據
  3. 返回值和正常的函數⼀樣, 可以是任意數據類型
# 計算n的n次⽅
def func(n):
    return n**n
print(func(10)) # 10000000000
f = lambda n: n**n
print(f(10)) # 10000000000

下面是一些lambda函數示例:
lambda:None;函數沒有輸入參數,輸出是None
lambda *args: sum(args); 輸入是任意個數的參數,輸出是它們的和(隱性要求是輸入參數必須能夠進行加法運算)
lambda **kwargs: 1;輸入是任意鍵值對參數,輸出是1
匿名函數並不是說⼀定沒有名字,這⾥前⾯的變量就是⼀個函數名。說它是匿名原因是我們通過__name__查看的時候是沒有名字的, 統⼀都叫lambda。在調⽤的時候沒有什麼特別之處,像正常的函數調⽤即可。

54.sorted()
排序函數.
語法: sorted(Iterable, key=None, reverse=False)
Iterable: 可迭代對象。
key: 排序規則(排序函數), 在sorted內部會將可迭代對象中的每⼀個元素傳遞給這個函數的參數. 根據函數運算的結果進⾏排序。
reverse: 是否是倒敘. True: 倒敘, False: 正序。

dic = {1:'A', 3:'C', 2:'B'}
print(sorted(dic)) # 如果是字典. 則返回排序過後的key即[1,2,3]
# 根據字符串⻓度進⾏排序
lst = ["責任", "必將成爲中流砥柱", "與擔當"]
# 計算字符串⻓度
def func(s):
   return len(s)
print(sorted(lst, key=func))
# 根據字符串⻓度進⾏排序
lst = ["責任", "必將成爲中流砥柱", "與擔當"]
# 計算字符串⻓度
def func(s):
    return len(s)
print(sorted(lst, key=lambda s: len(s)))

lst = [{"id":1, "name":'a', "age":18},
 {"id":2, "name":'c', "age":16},
 {"id":3, "name":'b', "age":17}]
# 按照年齡進⾏排序
print(sorted(lst, key=lambda e: e['age']))

在這裏插入圖片描述
55.filter()
篩選函數
語法: filter(function. Iterable)
function: ⽤來篩選的函數. 在filter中會⾃動的把iterable中的元素傳遞給function. 然後根據function返回的True或者False來判斷是否保留此項數據
Iterable: 可迭代對象

lst = [1,2,3,4,5,6,7]
ll = filter(lambda x: x%2==0, lst) # 篩選所有的偶數
print(ll)
print(list(ll))
lst = [{"id":1, "name":'a', "age":18},
 {"id":2, "name":'c', "age":16},
 {"id":3, "name":'b', "age":17}]
fl = filter(lambda e: e['age'] > 16, lst) # 篩選年齡⼤於16的數據
print(list(fl))

執行結果:
在這裏插入圖片描述
56 .map()
映射函數
語法: map(function, iterable) 可以對可迭代對象中的每⼀個元素進⾏映射. 分別取執⾏function

#計算列表中每個元素的平⽅ ,返回新列表
# 法一
def func(e):
    return e*e
mp = map(func, [1, 2, 3, 4, 5])
print(mp)
print(list(mp))

#法二用lambda
print(list(map(lambda x: x * x, [1, 2, 3, 4, 5])))

法一執行結果:
在這裏插入圖片描述

#計算兩個列表中相同位置的數據的和
lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 4, 6, 8, 10]
print(list(map(lambda x, y: x+y, lst1, lst2)))

執行結果:
在這裏插入圖片描述
57.classmethod 修飾符
classmethod 修飾符對應的函數不需要實例化,不需要 self 參數,但第一個參數需要是表示自身類的 cls 參數,可以來調用類的屬性,類的方法,實例化對象等。


class A(object):
    bar = 1
    def func1(self):
        print('foo')
    @classmethod
    def func2(cls):
        print('func2')
        print(cls.bar)
        cls().func1()  # 調用 foo 方法
A.func2()  # 不需要實例化

執行結果:

58.getattr() 函數
getattr() 函數用於返回一個對象屬性值。
語法:getattr(object, name[, default])
參數
object – 對象。
name – 字符串,對象屬性。
default – 默認返回值,如果不提供該參數,在沒有對應屬性時,將觸發 AttributeError。

class A(object):
    def set(self, a, b):
        x = a
        a = b
        b = x
        print(a,b)
a = A()
c = getattr(a, 'set')
c(a='1', b='2')

執行結果:
在這裏插入圖片描述
59. hasattr() 函數
hasattr() 函數用於判斷對象是否包含對應的屬性。
語法:hasattr(object, name)
參數
object – 對象。
name – 字符串,屬性名。

class Coordinate:
    x = 10
    y = -5
    z = 0
point1 = Coordinate()
print(hasattr(point1, 'x')) #True
print(hasattr(point1, 'y')) #True
print(hasattr(point1, 'z'))#True
print(hasattr(point1, 'no'))  #False 沒有該屬性

60.issubclass() 函數
issubclass() 方法用於判斷參數 class 是否是類型參數 classinfo 的子類。
issubclass() 方法的語法:issubclass(class, classinfo)
參數:
class – 類。
classinfo – 類。
返回值:如果 class 是 classinfo 的子類返回 True,否則返回 False。

class A:
    pass
class B(A):
    pass
print(issubclass(B, A))  # 返回 True
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章