Python標準庫(3.x): 內建函數掃盲

来源:https://www.cnblogs.com/tp1226/archive/2018/02/19/8446503.html
-Advertisement-
Play Games

abs(x) 求一個數的絕對值。 all(iterable) 如果迭代器中的所有值都為“真”則返回 True, 否則返回 False 註意: 如果迭代器為空,返回 True any(iterable) 如果迭代器中的任意一個值為“真”則返回 True, 否則返回 False 註意: 如果迭代器為空, ...


Built-in Functions
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate()   
input() oct() staticmethod() 
bin() eval() int() open() str()
bool() exec() isinstance()  ord() sum()
bytearray() filter() issubclass()  pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property()    
type()
chr() frozenset() list() range() vars()
classmethod()  getattr() locals() repr() zip()
compile() globals() map() reversed()    
complex() hasattr() max() round()  
delattr() hash() memoryview() set()  

 

abs(x)

  求一個數的絕對值。

>>> abs(13)
13
>>> abs(-15)
15

all(iterable)

  如果迭代器中的所有值都為“真”則返回 True, 否則返回 False

  註意: 如果迭代器為空,返回 True

>>> all([1,1,1])
True
>>> all([1,0,1])
False
>>> all([])
True

any(iterable)

  如果迭代器中的任意一個值為“真”則返回 True, 否則返回 False

  註意: 如果迭代器為空,返回 False

>>> any([1,0,0])
True
>>> any([0,0,0])
False
>>> any([])
False

ascii(object)

  該函數返回表示對象的可列印ascii字元串,如果字元串中含有非ascii字元,則以\x, \u 或者 \U 編碼來表示

  函數其實是返回了對象的 __repr__() 方法的值

>>> a = 123
>>> a.__repr__()
'123'
>>> ascii(a)
'123'
>>> 
>>> b = 'test'
>>> b.__repr__()
"'test'"
>>> ascii(b)
"'test'"
>>>
>>> class MyTest:
...     def __repr__(self):
...         return 'Hello, world.'
... 
>>> t = MyTest()
>>> t.__repr__()
'Hello, world.'
>>> ascii(t)
'Hello, world.'

bin(x)

  將整型轉換為二進位的字元串,字元串以'0b' 開頭.

  不過說是將整型轉換為二進位,其實是將對象的__index__() 方法返回的值轉換為二進位字元串

  註意: 如果對象沒有__index__() 方法,將會產生異常

>>> bin(11)
'0b1011'
>>> class MyTest():
...     def __index__(self):
...         return 5
... 
>>> t = MyTest()
>>> bin(t)
'0b101'

 bool(x)

  如果對象為“真”則返回 True, 否則返回 False

>>> bool(0)
False
>>> bool(1)
True

 bytearray([source[, encoding[, errors]]])

  創建一個 “可變的” byte數組,可以使用整型,字元串和迭代器來初始化

  參數為字元串時,字元串中的每一個字元將轉換為數組的元素,因此需要提供編碼類型,類似utf-8, ascii

  參數為整型時,整形值將作為數組的初始化大小,數組的元素則初始化為0

  參數為迭代器時,迭代器的每一個元素將作為數組的元素,因此迭代器的值必須為0-255的整型,否則將產生異常。

>>> a = bytearray(10)
>>> a
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
>>> a[0]
0
>>> len(a)
10
>>> 
>>> b = bytearray('abc', 'utf-8')
>>> b
bytearray(b'abc')
>>> b[0]
97
>>> 
>>> c = bytearray(range(1,5))
>>> c
bytearray(b'\x01\x02\x03\x04')
>>> c[0]
1
>>> 
>>> d = bytearray([1,2,3])
>>> d
bytearray(b'\x01\x02\x03')
>>> d[1] = 20
>>> d
bytearray(b'\x01\x14\x03')

bytes([source[, encoding[, errors]]])

  bytesbytearray的一個不可變的版本,其他的可以參考bytearray

>>> d = bytes([1,2,3])
>>> d
b'\x01\x02\x03'
>>> d[1] = 20
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'bytes' object does not support item assignment

callable(object)

  判斷對象是否可以調用,如果可以則返回 True, 否則返回 False

  是可調用的,調用後返回一個的實例。對象如果包含了__call__() 方法也是可調用的。

  其實,只要可以寫成 object() 的,都是callable

>>> def foo():
...     pass
... 
>>> callable(foo)
True
>>> 
>>> class MyTest:
...     def __call__(self):
...         pass
... 
>>> callable(MyTest)
True
>>> a = MyTest()
>>> callable(a)
True
>>> 
>>> b = 1
>>> callable(b)
False

 chr(i)

  返回Unicode對應的字元。

  參數範圍為 0 -- 1114111, 超過此範圍將產生異常

>>> chr(97)
'a'
>>> chr(1666)
'ڂ'
>>> chr(1200000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: chr() arg not in range(0x110000)

classmethod(function)

  一般作為函數裝飾器 @classmethod

  將類中的一個方法指定為類方法。被指定的類方法第一個參數必須為cls(方法所在的類)

  類方法的調用可以直接通過類調用,即C.f(); 也可以通過實例調用,即C().f()

  類方法有一個比較方便的用處就是作為類似C++中的初始化函數重載

class MyTest():
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day 

    @classmethod
    def from_string(cls, date_string):
        year, month, day = map(int, date_string.split('-'))
        return cls(year, month, day)
    
    def output(self):
        print('Birthday: {}-{}-{}'.format(self.year, self.month, self.day))



>>> a = MyTest(1989, 12, 26)
>>> a.output()
Birthday: 1989-12-26
>>> 
>>> b = MyTest.from_string('1990-1-1')
>>> b.output()
Birthday: 1990-1-1

compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

  該函數將含有python語句的字元串編譯成可執行的位元組碼,編譯的結果配合 eval, 或 exec 使用。

  source -- 需要編譯的字元串

  filename -- 存儲字元串的文件

  mode -- 'eval' 配合 eval 使用, 'exec' 配合多語句的 exec 使用,'single' 配合單語句的 exec 使用

  註:實測中,編譯的時候會判斷mode, 但是執行的時候使用 exec 或者 eval,結果一樣

>>> a = compile('1+2', filename='',  mode='eval')
>>> eval(a)
3
>>> 
>>> b = compile('for i in range(3): print(i)', filename='', mode='exec')
>>> exec(b)
0
1
2
>>> 
>>> c = compile('print("Hello, world.")', filename='', mode='exec')
>>> exec(c)
Hello, world.

complex([real[, imag]])

  返回一個複數。複數值為  real + imag*1j

  參數也可以為一個表示覆數的字元串,但是字元串中不能有空格。使用字元串作為參數時,沒有第二個參數。

  註1: 兩個參數的預設值均為0

  註2: 直接用複數表達式 a+bj 創建的對象也是 complex 類型

>>> a = complex(1, 2)
>>> a
(1+2j)
>>> 
>>> b = 2+3j
>>> type(b)
<class 'complex'>
>>> 
>>> c = complex('5+6j')
>>> c
(5+6j)
>>> 
>>> d = complex(1+2j, 1+2j)
>>> d
(-1+3j)

delattr(object, name)

  刪除對象的一個屬性(不能是對象的方法),但是不會影響該類的其他對象。同 del object.name

  註: 參數 name 是一個字元串

>>> class MyTest():
...     def __init__(self):
...         self.test = 'test'
... 
>>> a = MyTest()
>>> a.test
'test'
>>> b = MyTest()
>>> b.test
'test'
>>> delattr(a, 'test')
>>> a.test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'MyTest' object has no attribute 'test'
>>> 
>>> b.test
'test'

dict(**kwarg)  dict(mapping, **kwarg)  dict(iterable, **kwarg)

  創建並返回一個字典對象。初始化參數可以有三種傳入方式。

  關鍵字方式,將直接根據關鍵字生成字典

  迭代器方式,迭代器中的對象必須只有兩個元素,第一個元素將作為key,第二個作為值

  映射方式,其實也是一種迭代器方式

  註: 當然也可以直接使用字典作為參數來初始化

>>> dict(one=1, two=2, three=3)
{'two': 2, 'one': 1, 'three': 3}
>>> 
>>> dict(zip(['one', 'two', 'three'], [1, 2, 3]))
{'one': 1, 'two': 2, 'three': 3}
>>> 
>>> dict([('one', 1), ('two', 2), ('three', 3)])
{'one': 1, 'two': 2, 'three': 3}
>>> 
>>> dict({'one':1, 'two':2, 'three':3})
{'one': 1, 'two': 2, 'three': 3}

dir([object])

  很有用的幫助函數。顯示當前命名空間,對象或者類的所有屬性和方法。

  object 可以為對象或者類,如果省略表示當前的命名空間

>>> class MyTest():
...     pass
... 
>>> def foo():
...     pass
... 
>>> a = 1
>>> 
>>> dir()
['MyTest', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'foo']
>>> 
>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
>>> 
>>> d = dict()
>>> dir(d)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

divmod(a, b)

  返回 (a // b, a % b) 的元組

  註:a,b可以為整型或者浮點型,但是不能是複數

>>> divmod(7, 3)
(2, 1)
>>> 
>>> divmod(4.3, 1.5)
(2.0, 1.2999999999999998)
>>> 
>>> (4.3 // 1.5, 4.3 % 1.5)
(2.0, 1.2999999999999998)

enumerate(iterable, start=0)

  返回一個可迭代的枚舉類型。

  迭代器中的對象,第一個元素為序號(預設從start=0開始),第二個元素為傳入迭代器中的對象。

  註: 多用於for遍歷過程中,需要同時得到序號的情況。

>>> names = ['Tom', 'Jack', 'Lily']
>>> for i, name in enumerate(names, start=1):
...     print(i ,name)
... 
1 Tom
2 Jack
3 Lily

eval(expression, globals=None, locals=None)

  將一個表示python表達式的字元串編譯成python語句並執行(慎用!

  返回值,如果傳入參數是字元串或者mode='eval'編譯的位元組碼,則返回互動式運行結果,否則返回None

  globalslocals為高級用法,此處不展開。預設使用當前命名空間。

  註1: 語句必須是單條語句

  註2: 字元串中可以帶入變數,但變數必須在命令空間中定義。

  註3: 可以配合compile()使用

>>> eval('2+5')
7
>>> x = 3
>>> eval('x**2 + 3*x + 5')
23

 exec(object, [globals[, locals]])

  將一個表示python表達式的字元串編譯成python語句並執行(慎用!

  返回值為None

  globalslocals為高級用法,此處不展開。預設使用當前命名空間。

  註1: 語句可以是多條

  註2: 字元串中可以帶入變數,但變數必須在命令空間中定義。

  註3: 可以配合compile()使用

>>> exec('for i in range(5): print(i)')
0
1
2
3
4

filter(function, iterable)

  將一個可迭代的對象按傳入的函數進行過濾。函數返回 True 的元素將保留,其它將被過濾掉。

>>> a = [1,2,3,4,5,6,7,8,9]
>>> list(filter(lambda x: x % 2, a))
[1, 3, 5, 7, 9]

float([x])

  創建並返回一個浮點型的對象。

  x可以為一個數或者一個表示浮點數的字元串,預設值為0

>>> float(3)
3.0
>>> float('1.23')
1.23

format(value [, format_spec])

  將value按格式化轉化為字元串,並返回。

  目前較多的用法是調用字元串的format方法。

  format_spec 指定格式化方式,此處不展開(將會有專題博文)。

>>> format(10, 'b')
'1010'
>>> format('555', '0>5')
'00555'

frozenset([iterable])

  傳入一個可迭代的對象,創建一個不可變的集合。除了元素不能添加刪除外,其他和可變集合類似。

  如果沒有參數,則創建一個空集合。

>>> a = frozenset([1,2,2,3,4,5])
>>> a
frozenset({1, 2, 3, 4, 5})
>>> 2 in a
True

getattr(object, name [, default])

  獲取對象的一個屬性的值。

  如果對象存在該屬性則返回屬性值。

  如果屬性不存在,當傳了default時返回default的值,否則產生異常。

  註:參數 name 是一個字元串

>>> class MyTest():
...     def __init__(self):
...         self.test = 'test'
... 
>>> a = MyTest()
>>> getattr(a, 'test')
'test'
>>> getattr(a, 'foo', 'attr not exist')
'attr not exist'
>>> 
>>> getattr(a, 'foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'MyTest' object has no attribute 'foo'

globals()

  返回當前全局域的{對象: 值} 字典

>>> globals()
{'__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', 
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 當solr數據量小,併發少的時候,一臺solr伺服器足以應付,如果solr數據量比較大,併發多的時候,一臺solr不能應對的時候,是否需要對solr進行集群。這裡需要先對zookeeper進行集群,因為zookeeper會作為solr集群的配置信息中心。 集群介紹 zookeeper集群的時候 ...
  • python是一門動態解釋型的強類型定義語言(先編譯後解釋) 動態類型語言 動態類型的語言編程時,永遠也不用給任何變數指定數據類型,該語言會在你第一次賦值給變數時,在內部將數據類型記錄下來 解釋型 程式每執行到源程式的某一條指令,則會有一個稱之為解釋程式的外殼程式將源代碼轉換成二進位代碼以供執行,總 ...
  • 以往tp3.2里模型插入資料庫的方法通常使用add tp5後一開始我發現save與create方法都能插入數據 也不知道有什麼分別,後來一般都使用create方法 終於有一次操作關聯表時,由於使用create沒有返回主鍵 導致關聯表的另一個欄位沒有寫入到調用的實例里 通過查看文檔使用save解決 ...
  • 2018-02-19 17:15:14 Python語言相對於其他語言較為簡潔,也相對好入門比如後面不加分號,基本見不著大括弧等優點 第一個程式,也是學每門語言都需要掌握的第一個代碼 print("Hello World") print 語句用法 接下來是輸入用戶名密碼 進行格式化拼接 由以上可以看 ...
  • 一、單例模式 a、單例模式分為四種:文件,類,基於__new__方法實現單例模式,基於metaclass方式實現 b、類實現如下: c、基於__new__方法實現單例模式 d、基於metaclass方式實現單例模式 ...
  • 一、冒泡排序 a、冒泡排序 優化 如果冒泡排序中執行一趟而沒有交換,則列表已經是有序狀態,可以直接結演算法 二、選擇排序 a、一趟遍歷記錄最小的數,放到第一個位置; b、在一趟遍歷記錄剩餘列表中最小的數,繼續放置 三、插入排序 a、列表被分為有序區和無序區兩個部分,最初有序區只有一個元素 b、每次從無 ...
  • 本系列上一篇文章中我們就說到了,這一次我們要說 pop3 收信了。雖然我覺得應該先說完 mime 格式,不過估計大家已經不耐煩了 -- 怎麼老在說發送啊?我們要看收取! 好吧,來啦,來啦!收取郵件現在常用的有 pop3 和 imap 協議,不過從傳統來說 pop3 受眾要廣得多。有了前面的基礎,要實 ...
  • 使用opencv-python一段時間了,因為之前沒有大量接觸過c++下的opencv,在網上看c++的一些程式想改成python遇到了不少坑,正好在這裡總結一下。 1.opencv 中x,y,height, width,rows,cols 的關係(轉自http://blog.csdn.net/ik ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...