函數的內置方法
abs():
絕對值函數。如abs(-1)= 1
>>> abs(-10) 10 >>> f = abs >>> f(-1) 1 >>> abs=id >>> abs(1) 1869788224
以abs()函數為例,展示兩個特性。一是,內置函數是可以被賦值給其他變量的,同樣也可以將其他對象賦值給內置函數,這時就完全變了。所以,內置函數不是Python關鍵字,要注意對它們的保護,不要使用和內置函數重名的變量名,這會讓代碼混亂,容易發生難以排查的錯誤。
all()
接收一個可迭代對象,如果對象里的所有元素的bool運算值都是True,那么返回True,否則False。不要小瞧了這個函數,用好了,有化腐朽為神奇的特效。
>>> all([1,1,1]) True >>> all([1,1,0]) False
any()
接收一個可迭代對象,如果迭代對象里有一個元素的bool運算值是True,那么返回True,否則False。與all()是一對兄弟。
>>> any([0,0,1]) True >>> any([0,0,0]) False
ascii()
調用對象的__repr__()
方法,獲得該方法的返回值。__repr__()
方法是由對象所屬類型實現的方法。不可以簡單地理解為print或echo。
>>>s = “haha” >>> ascii(s) "'haha'" >>> a = [1,2,3] >>> ascii(a) '[1, 2, 3]'
bin()、oct()、hex()
三個函數是將十進制數分別轉換為2/8/16進制。
>>> i = 10 >>> bin(i) '0b1010' >>> oct(i) '0o12' >>> hex(i) '0xa'
bool()
測試一個對象或表達式的執行結果是True還是False。實際上bool是一個類,不是函數,bool()的返回值是一個布爾類型的實例。builtins中的很多函數,其實都是類,比如bytes(),str()等等。其中bool對於一個空列表或者帶有0的列表,返回的是False。
>>> bool(1==2) False >>> bool(abs(-1)) True >>> bool(None) False >>>a = [] >>>bool(a) False
bytearray()
描述
bytearray() 方法返回一個新字節數組。這個數組里的元素是可變的,並且每個元素的值范圍: 0 <= x < 256。
語法
bytearray()方法語法:
class bytearray([source[, encoding[, errors]]])
參數
- 如果 source 為整數,則返回一個長度為 source 的初始化數組;
- 如果 source 為字符串,則按照指定的 encoding 將字符串轉換為字節序列;
- 如果 source 為可迭代類型,則元素必須為[0 ,255] 中的整數;
- 如果 source 為與 buffer 接口一致的對象,則此對象也可以被用於初始化 bytearray。
- 如果沒有輸入任何參數,默認就是初始化數組為0個元素。
返回值
返回新字節數組。
實例
以下實例展示了 bytearray() 的使用方法:
>>>bytearray() bytearray(b'') >>> bytearray([1,2,3]) bytearray(b'\x01\x02\x03') >>> bytearray('runoob', 'utf-8') bytearray(b'runoob') >>>
bytes()
將對象轉換成字節類型。例如:s = '張三';m = bytes(s,encoding='utf-8')
>>> i=2 >>> bytes(i) b'\x00\x00' >>> s = 'haha' >>> bytes(s) Traceback (most recent call last): File "<pyshell#24>", line 1, in <module> bytes(s) TypeError: string argument without an encoding >>> bytes(s, encoding="utf-8") b'haha' >>> bytes(s, encoding="GBK") b'haha'
str()
將對象轉換成字符串類型,同樣也可以指定編碼方式。例如:str(bytes對象,encoding='utf-8')
>>> i = 2 >>> str(i) '2' >>> b = b"haha" >>> str(b) # 注意! "b'haha'" >>> str(b,encoding="gb2312") 'haha' >>> str([1,2,3,]) '[1, 2, 3]'
Bytes和string之間的互相轉換,更多使用的是encode()和decode()方法。
callable()
判斷對象是否可以被調用。如果某個對象具有__call__
方法,那它就能被調用。 例如,def f1(): pass
,那么callable(f1)
返回True。常用於判斷一個變量是否是函數。函數可調用。
>>> def f1(): pass >>> callable(f1) True >>> a = "123" >>> callable(a) False >>> class Foo: def __init__(self,name,age): self.name = name self.age = age >>> f_obj = Foo("jack",20) >>> callable(f_obj) False >>> callable(Foo) True
chr()
返回某個十進制數對應的ASCII字符,例如:chr(99) = ‘c’
。它可以配合random.randint(65,91)
隨機方法,生成隨機字符,用於生產隨機驗證碼。
import random for i in range(10): a = random.randint(65,91) c = chr(a) print(c)
ord()
與chr()相反,返回某個ASCII字符對應的十進制數,例如,ord('A') = 65
>>> ord("A") 65 >>> ord("\n") 10
classmethod()、staticmethod()和property()
類機制中,用於生成類方法、靜態方法和屬性的函數。在面向對象章節會有詳細介紹。
compile()
將字符串編譯成Python能識別或執行的代碼。 也可以將文件讀成字符串再編譯。
>>> s = "print('helloworld')" >>> r = compile(s,"<string>","exec") >>> r <code object <module> at 0x000001B23E6BE660, file "<string>", line 1> >>> r() Traceback (most recent call last): File "<pyshell#14>", line 1, in <module> r() TypeError: 'code' object is not callable >>> exec(r) helloworld >>> eval(r) helloworld
complex()
通過數字或字符串生成復數類型對象。
>>>complex(1, 2) (1 + 2j) >>> complex(1) # 數字 (1 + 0j) >>> complex("1") # 當做字符串處理 (1 + 0j) # 注意:這個地方在"+"號兩邊不能有空格,也就是不能寫成"1 + 2j",應該是"1+2j",否則會報錯 >>> complex("1+2j") (1 + 2j)
使用字符串的時候,+號左右不能有空白。
delattr()、setattr()、getattr()、hasattr()
類機制中,分別用來刪除、設置、獲取和判斷屬性。后面會有詳解。
dir()
顯示對象所有的屬性和方法。打印當前程序的所有變量。最好用的輔助函數之一。
>>> dir() ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'builtins', 'r', 's'] >>> dir([1,2,]) ['__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']
int()、float()、list()、dict()、set()、tuple()
與bool()、str()、bytes()一樣,它們都是實例化對應數據類型的類。
divmod()
除法,同時返回商和余數的元組。
>>> divmod(10,3) (3, 1) >>> divmod(11,4) (2, 3)
enumerate()
enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。
Python 2.3. 以上版本可用,2.6 添加 start 參數。
語法
以下是 enumerate() 方法的語法:
enumerate(sequence, [start=0])
參數
- sequence -- 一個序列、迭代器或其他支持迭代對象。
- start -- 下標起始位置。
# 實例 # 以下展示了使用 enumerate() 方法的實例: >>>seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>> list(enumerate(seasons, start=1)) # 小標從 1 開始 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')] # 普通的 for 循環 >>>i = 0 >>> seq = ['one', 'two', 'three'] >>> for element in seq: ... print i, seq[i] ... i +=1 ... 0 one 1 two 2 three # for 循環使用 enumerate >>>seq = ['one', 'two', 'three'] >>> for i, element in enumerate(seq): ... print i, element ... 0 one 1 two 2 three
通常用於對那些無法提供序號的迭代對象使用。但對於字典,依然是無序的。
eval()
eval() 函數用來執行一個字符串表達式,並返回表達式的值。
語法
以下是 eval() 方法的語法:
eval(expression[, globals[, locals]])
參數
- expression -- 表達式。
- globals -- 變量作用域,全局命名空間,如果被提供,則必須是一個字典對象。
- locals -- 變量作用域,局部命名空間,如果被提供,可以是任何映射對象。
返回值
返回表達式計算結果。
實例
以下展示了使用 eval() 方法的實例:
>>>x = 7 >>> eval( '3 * x' ) 21 >>> eval('pow(2,2)') 4 >>> eval('2 + 2') 4 >>> n=81 >>> eval("n + 4") 85
exec()
描述
exec 執行儲存在字符串或文件中的Python語句,相比於 eval,exec可以執行更復雜的 Python 代碼。
需要說明的是在 Python2 中exec不是函數,而是一個內置語句(statement),但是Python 2中有一個 execfile() 函數。可以理解為 Python 3 把 exec 這個 statement 和 execfile() 函數的功能夠整合到一個新的 exec() 函數中去了。
語法
以下是 exec 的語法:
exec obj
參數
- obj -- 要執行的表達式。
返回值
exec 返回值永遠為 None。
實例
以下展示了使用 exec 的實例:
實例 1
>>>exec 'print "Hello World"' Hello World # 單行語句字符串 >>> exec "print 'runoob.com'" runoob.com # 多行語句字符串 >>> exec """
...for i in range(5): ... print "iter time: %d" % i ... """ iter time: 0 iter time: 1 iter time: 2 iter time: 3 iter time: 4
實例 2
x = 10 expr = """ z = 30 sum = x + y + z print(sum) """ def func(): y = 20 exec(expr) exec(expr, {'x': 1, 'y': 2}) exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4}) func() 輸出結果: 60 33 34
eval() exec()
eval()只能處理單行代碼而exec()可以處理多行代碼
eval()有返回值,exec沒有返回值
res = eval('1+3+2') res2 = exec('1+3+2') print('res', res, res2) # 執行結果 res 7 None
format()
執行format(),其實就是調用該對象所屬類的__format__
方法。類似print功能。
>>> format("324324") '324324' >>> format([1,2,3]) '[1, 2, 3]'
frozenset()
描述
frozenset() 返回一個凍結的集合,凍結后集合不能再添加或刪除任何元素。
語法
frozenset() 函數語法:
class frozenset([iterable])
參數
- iterable -- 可迭代的對象,比如列表、字典、元組等等。
返回值
返回新的 frozenset 對象,如果不提供任何參數,默認會生成空集合。
實例
以下實例展示了 frozenset() 的使用方法:
>>>a = frozenset(range(10)) # 生成一個新的不可變集合 >>> a frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> b = frozenset('runoob') >>> b frozenset(['b', 'r', 'u', 'o', 'n']) # 創建不可變集合 >>>
globals()
列出當前環境下所有的全局變量。注意要與global關鍵字區分!在本節的開始,我們就已經展示了它的用法。
hash()
為不可變對象,例如字符串生成哈希值的函數!
>>> hash("i am jack") 5602200374213231465 >>> hash(1) 1 >>> hash(100000) 100000 >>> hash([1,2,3,]) Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> hash([1,2,3,]) TypeError: unhashable type: 'list' >>> hash((1,2,3)) 2528502973977326415
help()
返回對象的幫助文檔。誰用誰知道!
>>> a = [1,2,3] >>> help(a) Help on list object: class list(object) | list() -> new empty list | list(iterable) -> new list initialized from iterable's items ...
id()
返回對象的內存地址,常用來查看變量引用的變化,對象是否相同等。常用功能之一!
>>> id(0) 1456845856 >>> id(True) 1456365792 >>> a = "Python" >>> id(a) 37116704
input()
接收用戶輸入,返回一個輸入的字符串。
>>> a = input("Please input a number: ") Please input a number: 100 >>> a '100' >>> type(a) <class 'str'>
isinstance()
判斷一個對象是否是某個類的實例。比type()方法適用面更廣。
>>> isinstance("haha", str) True >>> isinstance(1, str) False
issubclass()
issubclass(a,b),判斷a是否是b的子類。
>>> class Foo: pass >>> class Goo(Foo): pass >>> issubclass(Goo, Foo) True
iter()
制造一個迭代器,使其具備next()能力。
>>> lis = [1, 2, 3] >>> next(lis) Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> next(lis) TypeError: 'list' object is not an iterator >>> i = iter(lis) >>> i <list_iterator object at 0x0000000002B4A128> >>> next(i) 1
len()
返回對象的長度。不能再常用的函數之一了。
locals()
locals() 函數會以字典類型返回當前位置的全部局部變量。簡單點就是返回局部變量。
對於函數, 方法, lambda 函式, 類, 以及實現了 __call__ 方法的類實例, 它都返回 True。
返回值:字典類型的局部變量
>>>def runoob(arg): # 兩個局部變量:arg、z ... z = 1 ... print (locals()) ... >>> runoob(4) {'z': 1, 'arg': 4} # 返回一個名字/值對的字典 >>>
max()/min():
返回給定集合里的最大或者最小的元素。可以指定排序的方法!
lst=['abcdhush8','abc9iujtwertwert','abcdjlas','abcdj897h'] a = min(lst,key=len) print(a)
memoryview(obj)
返回obj的內存視圖對象。obj只能是bytes或bytesarray類型。memoryview對象的使用方法如下:
>>> v = memoryview(b'abcefg') >>> v[1] 98 >>> v[-1] 103 >>> v[1:4] <memory at 0x7f3ddc9f4350> >>> bytes(v[1:4]) b'bce'
next()
通過調用迭代器的__next__()
方法,獲取下一個元素。
object()
該方法不接收任何參數,返回一個沒有任何功能的對象。object是Python所有類的基類。
open()
打開文件的方法。在Python2里,還有一個file()方法,Python3中被廢棄了。后面章節會詳細介紹open()的用法。
pow()
冪函數。
>>> pow(3, 2) 9
print()
語法
以下是 print() 方法的語法:
print(*objects, sep=' ', end='\n', file=sys.stdout)
參數
- objects -- 復數,表示可以一次輸出多個對象。輸出多個對象時,需要用 , 分隔。
- sep -- 用來間隔多個對象,默認值是一個空格。
- end -- 用來設定以什么結尾。默認值是換行符 \n,我們可以換成其他字符串。
- file -- 要寫入的文件對象。
>>> print("www","runoob","com",sep=".") # 設置間隔符 www.runoob.com
>>>print(1)
1
>>> print("Hello World")
Hello World
>>> a = 1
>>> b = 'runoob'
>>> print(a,b)
1 runoob
>>> print("aaa""bbb")
aaabbb
>>> print("aaa","bbb")
aaa bbb
range()
沒錯,這是Python內置的函數,前面已經介紹了。
repr()
repr() 函數將對象轉化為供解釋器讀取的形式。並且返回一個對象的 string 格式。
>>>s = 'RUNOOB' >>> repr(s) "'RUNOOB'" >>> dict = {'runoob': 'runoob.com', 'google': 'google.com'}; >>> repr(dict) "{'google': 'google.com', 'runoob': 'runoob.com'}"
reversed()
反轉,逆序對象
>>> reversed # reversed本身是個類 <class 'reversed'> >>> reversed([1,2,3,4,5]) # 獲得一個列表反轉器 <list_reverseiterator object at 0x0000022E322B5128> >>> a = reversed([1,2,3,4,5]) >>> a <list_reverseiterator object at 0x0000022E32359668> >>> list(a) # 使用list方法將它轉換為一個列表 [5, 4, 3, 2, 1]
round()
描述
round() 方法返回浮點數x的四舍五入值。
語法
以下是 round() 方法的語法:
round( x [, n] )
參數
- x -- 數值表達式。
- n -- 數值表達式。
返回值
返回浮點數x的四舍五入值。
a = round(2.33333, 2) print(a) b = round(3.555, 1) print(b) # 執行結果 2.33 3.6
slice()
返回一個切片類型的對象。slice是一個類,一種Python的數據類型。Python將對列表等序列數據類型的切片功能單獨拿出來設計了一個slice類,可在某些場合下使用。
>>> s = slice(1, 10, 2) >>> s slice(1, 10, 2) >>> type(s) <class 'slice'> >>> lis = [i for i in range(10)] >>> lis [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> lis[s] # 注意用法 [1, 3, 5, 7, 9]
sum()
求和.
>>> sum(1,2,3) # 需要傳入一個可迭代的對象 Traceback (most recent call last): File "<pyshell#15>", line 1, in <module> sum(1,2,3) TypeError: sum expected at most 2 arguments, got 3 >>> sum([1,2,3]) # 傳入一個列表 6 >>> sum({1:1,2:2}) # 突發奇想,作死傳入一個字典 3
super()
調用父類。面向對象中類的機制相關。后面介紹。
type()
顯示對象所屬的數據類型。常用方法!前面已經展示過。
vars()
與dir()方法類似,不過dir()方法返回的是key,vars()方法返回key的同時還把value一起打印了。
>>> vars() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': <list_reverseiterator object at 0x0000022E32359668>, 's': 'ha'}
map()
描述
map() 會根據提供的函數對指定序列做映射。
第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
語法
map() 函數語法:
map(function, iterable, ...)
參數
- function -- 函數,有兩個參數
- iterable -- 一個或多個序列
返回值
Python 2.x 返回列表。
Python 3.x 返回迭代器。
實例
以下實例展示了 map() 的使用方法:
>>>def square(x) : # 計算平方數 ... return x ** 2 ... >>> map(square, [1,2,3,4,5]) # 計算列表各個元素的平方 [1, 4, 9, 16, 25] >>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函數 [1, 4, 9, 16, 25] # 提供了兩個列表,對相同位置的列表數據進行相加 >>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) [3, 7, 11, 15, 19]
filter()
描述
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然后返回 True 或 False,最后將返回 True 的元素放到新列表中。
語法
以下是 filter() 方法的語法:
filter(function, iterable)
參數
- function -- 判斷函數。
- iterable -- 可迭代對象。
返回值
返回列表。
實例
以下展示了使用 filter 函數的實例:
過濾出列表中的所有奇數:
#!/usr/bin/python # -*- coding: UTF-8 -*- def is_odd(n): return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(newlist) #執行結果 [1, 3, 5, 7, 9]
過濾出1~100中平方根是整數的數:
#!/usr/bin/python # -*- coding: UTF-8 -*- import math def is_sqr(x): return math.sqrt(x) % 1 == 0 newlist = filter(is_sqr, range(1, 101)) print(newlist) # 輸出結果 : [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
zip()
描述
zip() 函數用於將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表。
如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用 * 號操作符,可以將元組解壓為列表。
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中為了減少內存,zip() 返回的是一個對象。如需展示列表,需手動 list() 轉換。
如果需要了解 Pyhton3 的應用,可以參考 Python3 zip()。
語法
zip 語法:
zip([iterable, ...])
參數說明:
- iterabl -- 一個或多個迭代器;
返回值
返回元組列表。
實例
以下實例展示了 zip 的使用方法:
>>>a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = zip(a,b) # 打包為元組的列表 [(1, 4), (2, 5), (3, 6)] >>> zip(a,c) # 元素個數與最短的列表一致 [(1, 4), (2, 5), (3, 6)] >>> zip(*zipped) # 與 zip 相反,*zipped 可理解為解壓,返回二維矩陣式 [(1, 2, 3), (4, 5, 6)]
sorted()
排序方法。有key和reverse兩個重要參數。
基礎用法: 直接對序列進行排序
>>> sorted([36, 5, -12, 9, -21]) [-21, -12, 5, 9, 36]
指定排序的關鍵字。關鍵字必須是一個可調用的對象。例如下面的例子,規則是誰的絕對值大,誰就排在后面。
>>> sorted([36, 5, -12, 9, -21], key=abs) [5, 9, -12, -21, 36] # 或者可以使用lambda函數指定列表的那個排序
d = {}
for i in range(10):
d[i] = i - 50
print(d)
d2 = d.items()
d[2] = 5
d3 = sorted(d2, key=lambda x:x[1]) # key后面還可以添加recerse = True進行反轉排序
print(d3)
# 執行結果
# {0: -50, 1: -49, 2: -48, 3: -47, 4: -46, 5: -45, 6: -44, 7: -43, 8: -42, 9: -41}
# [(0, -50), (1, -49), (3, -47), (4, -46), (5, -45), (6, -44), (7, -43), (8, -42), (9, -41), (2, 5)]
指定按反序排列。下面的例子,首先按忽略大小寫的字母順序排序,然后倒序排列。
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True) ['Zoo', 'Credit', 'bob', 'about']
hash()
描述
hash() 用於獲取取一個對象(字符串或者數值等)的哈希值。
語法
hash 語法:
hash(object)
參數說明:
- object -- 對象;
返回值
返回對象的哈希值。
實例
以下實例展示了 hash 的使用方法:
>>>hash('test') # 字符串 2314058222102390712 >>> hash(1) # 數字 1 >>> hash(str([1,2,3])) # 集合 1335416675971793195 >>> hash(str(sorted({'1':1}))) # 字典 7666464346782421378 >>>
__import__(name)
這個方法為我們提供了一種通過字符串反射包、庫或模塊的手段。其中的name是你想要導入的庫的名稱的字符串。
t = __import__("time") print(t.time())
例子中,利用字符串“time”,導入了實際的time庫,並賦值給t變量。這個變量實際就相當於import time的結果。然后使用t.time()進行調用。
在某些場景下,這個方法非常有用。但是很多時候,它也存在安全問題,Python官方不建議經常使用它。
至此,除了個別遺留,近80個內置函數就基本介紹完畢。