Python常用的內置函數

  • 2020 年 1 月 19 日
  • 筆記

一  反射相關

  1 hasattr   根據字元串的形式 , 去判斷對象中是否有成員

hasattr(object,name)  判斷對象object是否包含名為name的特性(hasattr是通過調用getattr(object,name))是否拋出異常來實現的。  參數object:對象  參數name:特性名稱  >>> hasattr(list, 'append')  True  >>> hasattr(list, 'add')  False

View Code

  2 getattr  根據字元串的形式,去對象中找成員.   第一個參數是(模組或對象或類),  第二個參數是(用戶輸入或值)getattr(object, name [, defalut])獲取對象object名為name的特性,如果object不包含名為name的特性,將會拋出AttributeError異常;如果不包含名為name的特性

且提供default參數,將返回default。  參數object:對象  參數name:對象的特性名  參數default:預設返回值  >>> class test():  ...  name="ming"  ...   def run(self):  ...     return "Hello World"  ...  >>> t=test()  >>> getattr(t, "name") #獲取name屬性,存在就列印出來。  'ming'  >>> getattr(t, "run") #獲取run方法,存在就列印出方法的記憶體地址。  <bound method test.run of <__main__.test instance at 0x0269C878>>  >>> ret = getattr(t, "run")() #獲取run方法,後面加括弧可以將這個方法運行。  >>> print(ret)    'Hello World'  >>> getattr(t, "age") #獲取一個不存在的屬性。  Traceback (most recent call last):  File "<stdin>", line 1, in <module>  AttributeError: test instance has no attribute 'age'  >>> getattr(t, "age","18") #若屬性不存在,返回一個默認值。  '18'  >>>

  3 setattr   根據字元串的形式 , 動態的設置一個成員(在記憶體中)  (三個參數, 第一個參數是要設置的變數, 第三個變數是要設置的值)

給對象的屬性賦值,若屬性不存在,先創建再賦值  >>> class test():  ...     name="ming"  ...     def run(self):  ...             return "Hello World"  ...  >>> t=test()  >>> hasattr(t, "age")   #判斷屬性是否存在  False  >>> setattr(t, "age", "18")   #為屬相賦值,並沒有返回值  >>> hasattr(t, "age")    #屬性存在了  True

View Code

  4 delattr     

綜合使用

>>> class test():         name="ming"         def run(self):               return "Hello World">>> t=test()  >>> getattr(t, "age")    #age屬性不存在  Traceback (most recent call last):    File "<stdin>", line 1, in <module>  AttributeError: test instance has no attribute 'age'      >>> if getattr(t ,"age") is  none:   #當獲取到這個age值為空時,需要給這個age重新賦值      setattr(t,"age","18")  'True'    >>>getattr(t,"age")  '18'

二 基礎數據類型相關

  1 bool     

  2 int

  3 float

  4 complex   複數   

complex(5,6)    (5+6j)

  5 bin  整型轉換為二進位

  6 oct  整型轉換為八進位

  7 hex  整型轉換為十六進位

  8 abs  求絕對值

  9 divmod  (除,餘數)

  10 round     (值,小數後幾位)

 ret =  round(4.563111347,3)     print(ret)     4.563

  11 pow  冪運算

ret = pow(2,3)  print(ret)    8

  12 sum  

  13 max

  14 min

  15 list 

  16 tuple

  17 reversed  

       18  slice   和切片有關

  19 str

  20 format    

  21 bytes

  22 bytearry

  23 memoryview

  24 ord

  25 chr

  26 ascill

  27 repr

  28 dict

  29 set()

  30 frozenset

  31 len

  32 sorted

a = [1,3,5,-2,-4,-6]  b = sorted(a,key=abs)  print(a)  print(b)

  33 enumerate   

 a = enumerate()  返回一個元祖  a[0]序列號,a[1]數據

  34 all

接受一個迭代器,如果迭代器的所有元素都為真,那麼返回True,否則返回False    >>> tmp_1 = ['python',123]  >>> all(tmp_1)  True  >>> tmp_2 = []  >>> all(tmp_2)  True  >>> tmp_3 = [0]  >>> all(tmp_3)  False

  35 any

接受一個迭代器,如果迭代器里有一個元素為真,那麼返回True,否則返回False    a = []  ret = any(a)  print(ret)  b = [1]  ret1 = any(b)  print(ret1)

  36 zip

list1 = [1, 2, 3, 4]  list2 = ["a", "b", "c"]  s = zip(list1, list2)  print(list(s)) 

  37 filter

filter()函數接收一個函數 f 和一個list,這個函數 f 的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list    def is_odd(x):      return x % 2 == 1  然後,利用filter()過濾掉偶數:    list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17]))

  38 map

map函數應用於每一個可迭代的項,返回的是一個結果list。如果有其他的可迭代參數傳進來,map函數則會把每一個參數都以相應的處理函數進行迭代處理。map()函數接收兩個參數,一個是函數,一個是序列,map將傳入的函數依次作用到序列的每個元素,並把結果作為新的list返回。    >>> L = [1,2,3,4,]  >>> def pow2(x):  ... return x*x  ...  >>> list(map(pow2,L))  [1, 4, 9, 16] 

三 作用域相關

  1 locals   獲取執行本方法所在命名空間內的局部變數的字典

  2 globals  獲取全局變數的字典

四 面向對象相關

  1 type  元類,類的最高層

  2 object

  3 classmethod    類方法,用來修改類變數的

  4 staticmethod    靜態方法,用來處理一些和操作類無關的事

  5 property    可以像調用一個變數一樣調用一個方法

 class Pager:       def __init__(self,page):           self.page = page         self.page_num = 12        @property       def start(self):           ret = (self.page - 1) * self.page_num           return ret       @property       def end(self):           ret = self.page * self.page_num          return ret     p = Pager(5)   # print(p.start())   # print(p.end())   print(p.start)   print(p.end)

  6  vars  

  7 super  在多繼承中,可以保證頂層父類只被調用一次 ,用 _ _mro_ _ 查看多繼承規律時,遵循深度優先原則

  8 issubclass

檢查第一個參數是否是第二個參數的子子孫孫類    返回  :   是一個布爾值    class Base(object):      pass    class Foo(Base):      pass    class Bar(Foo):      pass    print(issubclass(Bar,Base))  # 檢查第一個參數是否是第二個參數的子子孫孫類

  9 isinstance

檢查第一個參數(對象) 是否是第二個參數(類及父類)的實例.    返回值:  布爾型    class Base(object):      pass    class Foo(Base):      pass    obj = Foo()    print(isinstance(obj,Foo))  print(isinstance(obj,Base))    判斷一個數據是什麼數據類型  a = "python"  ret = isinstance(a,str)  print(a)

五 迭代/生成器相關

  1 next

  2 iter  

  3 range

range 是一個生成器,他只用來存儲數據的生成方式,而不直接存儲數據  # 列表解析  sum([i for i in range(100000000)])# 記憶體佔用大,機器容易卡死    # 生成器表達式  sum(i for i in range(100000000))# 幾乎不佔記憶體

六 其他

  字元串類型程式碼執行相關  

  1 eval

eval() 將字元串類型的程式碼執行並返回結果    print(eval('1+2+3+4'))    還可以用來操作文件,將文件裡面的內容轉化為字典,方便調用

  2 exec

exec()將自字元串類型的程式碼執行    print(exec("1+2+3+4"))  exec("print('hello,world')")

  3 compile

參數說明:        1> 參數source:字元串或者AST(Abstract Syntax Trees)對象。即需要動態執行的程式碼段。          2>參數 filename:程式碼文件名稱,如果不是從文件讀取程式碼則傳遞一些可辨認的值。當傳入了source參數時,filename參數傳入空字元即可。          3> 參數model:指定編譯程式碼的種類,可以指定為 『exec』,』eval』,』single』。當source中包含流程語句時,model應指定為『exec』;當source中只包含一個簡單的求值表       達式,model應指定為『eval』;當source中包含了互動式命令語句,model應指定為'single'。

  輸入/輸出相關

  4 input

  5 print

def print(self, *args, sep=' ', end='n', file=None): # known special case of print      """        print(value, ..., sep=' ', end='n', file=sys.stdout, flush=False)        file: 默認是輸出到螢幕,如果設置為文件句柄,輸出到文件        sep: 列印多個值之間的分隔符,默認為空格        end: 每一次列印的結尾,默認為換行符        flush: 立即把內容輸出到流文件,不作快取      """        file() 和文件有關的關鍵字        f = open('tmp_file','w')      print(123,456,sep=',',file = f,flush=True)        列印進度條               import time        for i in range(0,101,2):        time.sleep(0.1)        char_num = i//2 #列印多少個'*'        per_str = 'r%s%% : %sn' % (i, '*' * char_num) if i == 100 else 'r%s%% : %s'%(i,'*'*char_num)        print(per_str,end='', flush=True)        #小越越 : r 可以把游標移動到行首但不換行

  記憶體相關

  6 id

  7 hash

  文件操作相關

  8 open

共有六種操作文件的方分別為:  r、w、a、r+、w+、a+  ,每一種都可以用二進位文件來操作:rb、wb、ab、rb+、wb+、ab+,也可以指定編碼格式

  模組相關

  9 __import__

  幫助相關

  10 help

  調用相關

  11 callable      檢測一個對象能否被調用

  查看內置屬性和方法

  12 dir

dir(list)  dir(a)  dir(123)

內置函數官方文檔        https://docs.python.org/3/library/functions.html#object