1、內置函數python
1.一、做用域相關數組
locals() #以字典的類型返回當前位置的所有局部變量。 globals() #以字典的類型返回所有全局變量。
1.二、迭代器生成器相關函數
range() #可建立一個整數對象,通常用在 for 循環中 next() #內部實際使用了__next__方法,返回迭代器的下一個項目。 iter() #用來生成迭代器(將一個可迭代對象,生成迭代器)同於:__iter__()
1.三、基礎數據類型相關編碼
bool() #用於將給定參數轉換爲布爾類型,若是沒有參數,返回 False int() #用於將一個字符串或數字轉換爲整型。 float() #用於將整數和字符串轉換成浮點數。 list() #將一個可迭代對象轉化成列表 tuple() #將一個可迭代對象轉化成元祖 dict() #建立一個字典 set() #建立一個集合 str() #轉化成字符串
1.四、轉換及運算相關code
bin() #將十進制轉換成二進制並返回。 oct()#將十進制轉化成八進制字符串並返回 hex()#將十進制轉化成十六進制字符串並返回。 print(bin(10),type(bin(10))) # 0b1010 <class 'str'> print(oct(10),type(oct(10))) # 0o12 <class 'str'> print(hex(10),type(hex(10))) # 0xa <class 'str'> abs()#返回數字的絕對值。 divmod()#計算除數與被除數的結果,返回一個包含商和餘數的元組(a // b, a % b)。 round()#保留浮點數的小數位數,默認保留整數。 pow()#求x**y次冪。(三個參數爲x**y的結果對z取餘) print(abs(-5)) # 5 print(divmod(7,2)) # (3, 1) print(round(7/3,2)) # 2.33 print(round(7/3)) # 2 print(round(3.32567,3)) # 3.326 print(pow(2,3)) # 兩個參數爲2**3次冪 結果8 print(pow(2,3,3)) # 三個參數爲2**3次冪,對3取餘。 餘數2 sum()#對可迭代對象進行求和計算(可設置初始值)。 min()#返回可迭代對象的最小值(可加key,key爲函數名,經過函數的規則,返回最小值) max()#返回可迭代對象的最大值(可加key,key爲函數名,經過函數的規則,返回最大值) print(sum([1,2,3])) #6 print(sum((1,2,3),100)) #106 print(min([1,2,3])) # 返回此序列最小值1 ret = min([1,2,-5,],key=abs) # 按照絕對值的大小,返回此序列最小值 print(ret) #1 dic = {'a':3,'b':2,'c':1} print(min(dic,key=lambda x:dic[x]))# x爲dic的key,lambda的返回值(即dic的值進行比較)返回最小的值對應的鍵 print(max([1,2,3])) # 返回此序列最大值3 ret = max([1,2,-5,],key=abs) # 按照絕對值的大小,返回此序列最大值-5 print(ret) dic = {'a':3,'b':2,'c':1} print(max(dic,key=lambda x:dic[x]))# x爲dic的key,lambda的返回值(即dic的值進行比較)返回最大的值對應的鍵 reversed() #將一個序列翻轉,並返回此翻轉序列的迭代器。 slice() #構造一個切片對象,用於列表的切片 ite = reversed(['a',2,3,'c',4,2]) for i in ite: print(i) #2 4 c 3 2 a li = ['a','b','c','d','e','f','g'] sli_obj = slice(3) print(li[sli_obj]) #['a', 'b', 'c'] sli_obj = slice(0,7,2) print(li[sli_obj]) #['a', 'c', 'e', 'g'],開始、結束、步長 format() #與具體數據相關,用於計算各類小數,精算等 bytes()#用於不一樣編碼之間的轉化。 s = '你好' bs = s.encode('utf-8') print(bs) #b'\xe4\xbd\xa0\xe5\xa5\xbd' bs = bytes(s,encoding='utf-8') print(bs) #b'\xe4\xbd\xa0\xe5\xa5\xbd' s1 = bs.decode('utf-8') print(s1) #你好 bytearry()#返回一個新字節數組。這個數組裏的元素是可變的,而且每一個元素的值範圍: 0 <= x < 256 ret = bytearray('jump',encoding='utf-8') print(id(ret)) print(ret) print(ret[0]) ret[0] = 65 print(ret) print(id(ret)) memoryview() ret = memoryview(bytes('你好',encoding='utf-8')) print(len(ret)) #6 print(ret) #<memory at 0x008A0BF8> print(bytes(ret[:3]).decode('utf-8')) #你 print(bytes(ret[3:]).decode('utf-8')) #好 ord()#輸入字符找該字符編碼的位置 chr()#輸入位置數字找出其對應的字符 ascii()#是ascii碼中的返回該值,不是就返回/u... print(ord('a')) #97 print(ord('中')) #20013 #chr 輸入位置數字找出其對應的字符 print(chr(97)) #a print(chr(20013)) #中 #是ascii碼中的返回該值,不是就返回/u... print(ascii('a')) #"a" print(ascii('中')) #'\u4e2d' repr()#返回一個對象的string形式
1.五、經常使用相關orm
id() #用於獲取對象的內存地址 hash#獲取一個對象(可哈希對象:int,str,Bool,tuple)的哈希值 print() #輸出 input() #輸入 open() #打開文件 type() #對象類型 len#返回一個對象中元素的個數(長度) dir() #查看一個對象的方法 help() #幫助方法 isinstance() #來判斷一個對象是不是一個已知的類型,相似 type() a=123 isinstance (a,int) #True __import__ #用於動態加載類和函數 __import__('a') # 導入 a.py 模塊
1.六、其餘相關對象
eval()#執行字符串類型的代碼,並返回最終結果 exec()#執行字符串類型的代碼。 compile()#將字符串類型的代碼編譯。代碼對象可以經過exec語句來執行或者eval()進行求值。 eval('2 + 2') # 4 s = ''' for i in [1,2,3]: print(i) ''' exec(s) #1 2 3 complex()#函數用於建立一個值爲 real + imag * j 的複數或者轉化一個字符串或數爲複數。若是第一個參數爲字符串,則不須要指定第二個參數。 filter()#過濾 def func(x):return x%2 == 0 ret = filter(func,[1,2,3,4,5,6,7]) print(ret) #<filter object at 0x006327B0> for i in ret: print(i) #2,4,6 zip() #拉鍊方法 #用於將可迭代的對象做爲參數,將對象中對應的元素打包成一個個元組,而後返回由這些元組組成的列表。若是各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同 l1 = [1,2,3,] l2 = ['a','b','c',5] l3 = ('*','**',(1,2,3)) for i in zip(l1,l2,l3): print(i) #(1, 'a', '*') (2, 'b', '**') (3, 'c', (1, 2, 3)) map()#會根據提供的函數對指定序列作映射。 def square(x) : # 計算平方數 return x ** 2 map(square, [1,2,3,4,5]) # 計算列表各個元素的平方 [1, 4, 9, 16, 25] sorted()#對全部可迭代的對象進行排序操做 L = [('a', 1), ('c', 3), ('d', 4),('b', 2), ] sorted(L, key=lambda x:x[1]) # 利用key[('a', 1), ('b', 2), ('c', 3), ('d', 4)] students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] sorted(students, key=lambda s: s[2]) # 按年齡排序[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] sorted(students, key=lambda s: s[2], reverse=True) # 按降序[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] frozenset()#返回一個凍結的集合,凍結後集合不能再添加或刪除任何元素。 enumerate()#枚舉,返回一個枚舉對象 (可迭代對象加序號) li = ['a','b','c','d','e'] for i in enumerate(li): print(i) for index,name in enumerate(li,1): #索引默認從0開始,可改爲1開始 print(index,name) all()#可迭代對象中,全都是True纔是True any()#可迭代對象中,有一個True 就是True callable() 檢查是不是函數 返回True、False def add(x,y):return x+y callable(add) # 返回 True a=123 callable(a) #返回False
1.七、類相關blog
object() #是Python中全部類的基類,若是定義一個類時沒有指定繼承哪一個類,則默認繼承object類。 staticmethod()#靜態方法 classmethod()#是一個裝飾器函數,用來標示一個方法爲類方法 property()#靜態屬性 super() #用於調用父類(超類)的一個方法 issubclass() #方法用於判斷參數 class 是不是類型參數 classinfo 的子類。若是 class 是 classinfo 的子類返回 True,不然返回 False。 vars() #返回對象object的屬性和屬性值的字典對象,若是沒有參數,就打印當前調用位置的屬性和屬性值 相似 locals() hasattr(object,name) #判斷name是否在object,判斷object中是否有一個叫name的方法或者屬性 getattr(object,name,"xxx")#取object中name 的值,xxx爲找不到報錯信息,不然找不到報錯 setattr(x,y,v) #給x對象中的y屬性設置值v delattr(x,y)#刪除對象x中y
1.八、幾個重要的內置函數排序
zip() filter() map() max() min() sorted() enumerate()
2、匿名函數繼承
lambda a,b:a**b #關鍵字 參數:返回值 #參數能夠有多個,用逗號隔開 #匿名函數無論邏輯多複雜,只能寫一行,且邏輯執行結束後的內容就是返回值 #返回值和正常的函數同樣能夠是任意數據類型
3、遞歸函數
遞歸函數:在一個函數裏在調用這個函數自己。
遞歸的最大深度:998
def fun(count): print(count) count += 1 fun(count) fun(1)
能夠修改遞歸最大深度 import sys sys.setrecursionlimit(2000)
遞歸調用應該分爲兩個明確的階段:遞推,回溯
- 回溯就是從外向裏一層一層遞歸調用下去,回溯階段必需要有一個明確地結束條件,每進入下一次遞歸時,問題的規模都應該有所減小
- 遞推就是從裏向外一層一層結束遞歸
#a(5) = a(4) -10 #a(4) = a(3) -10 #a(3) = a(2) -10 #a(2) = a(1) -10 #a(1) = 50 def a(n): if n == 1: return 50 return a(n-1)-10 print(a(5)) #10
遞歸方式實現斐波那契(生成前20項)
def fun(n): if n==0: return 0 elif n==1 or n==2: return 1 else: return fun(n-1)+fun(n-2) for i in range(20): print(fun(i))
#循環方式 a,b=0,1 while b<1000: print(b) a,b=b,a+b
4、二分法 (遞歸)
想從一個按照從小到大排列的數字列表中找到指定的數字,遍歷的效率過低,用二分法能夠極大的縮小查找規模
l=[2,23,34,45,56,78,89,90] def find(num,l,start=0,end=len(l)): print(end,start) if start <= end: index=start+(end-start)//2 print('start:[%s] end:[%s] index:[%s] index_val:[%s]' %(start,end,index,l[index])) if num > l[index]: start=index+1 elif num < l[index]: end=index-1 elif num == l[index]: print('find it',index) return find(num,l,start,end) else: print("找不到了") find(89, l) #find it 6