目錄python
咱們以前學過的叫有名函數,就是有名字的函數編程
匿名函數 就是沒有名字的函數,函數
lambda 參數:返回值ui
# 演示匿名函數的使用 f = lambda x:x print(f) # <function <lambda> at 0x00000000005D1E18> s = f(1) # 注意 ,匿名函數調用拿到的是返回值。 print(s) # 1
匿名函數通常與python內置方法連用。code
''' 用法: max(可迭代對象,匿名函數) 返回最大值 ''' 好比說咱們想要求出如下字典的最高/最低薪資的人的名字 salary_dict = { 'nick': 3000, 'jason': 100000, 'tank': 5000, 'sean': 2000 } print(max(salary_dict)) # 若是直接用max函數的話會按照字符串首字母順序來排序 # tank # 咱們能夠定義一個函數 def func(k): return salary_dict[k] print(min(salary_dict,key=func)) # sean print(max(salary_dict,key=func)) # jason ''' key=func 作的事情: 1. 循環salary_dict 取出全部的key值 2. 將每一個key值放入func函數中,返回values,返回薪資 3. max函數進行排序 ''' # 用匿名函數實現 print(max(salary_dict,key=lambda name:salary_dict[name])) # jason print(min(salary_dict,key=lambda name:salary_dict[name])) # sean
''' sorted(可迭代對象,reverse) sorted,排序,返回值找一個變量接收 ''' lis = [1, 3, 2, 5, 8, 6] lis = sorted(lis,reverse=True) # reverse=True 反轉 print(lis) # [8, 6, 5, 3, 2, 1] salary_dict = { 'nick': 3000, 'jason': 100000, 'tank': 5000, 'sean': 2000 } def f2(item): return salary_dict[item] res = sorted(salary_dict,key=f2,reverse=True) print(res) # ['jason', 'tank', 'nick', 'sean'] # 用匿名函數實現 res = sorted(salary_dict,key=lambda item:salary_dict[item],reverse=True) print(res) # ['jason', 'tank', 'nick', 'sean']
''' map(匿名函數,可迭代對象) 映射 ''' name_list = ['jason', 'tank', 'sean'] def f1(item): return item + "hahahhahahhahahhaha" res = map(f1,name_list) print(list(res)) # ['jasonhahahhahahhahahhaha', 'tankhahahhahahhahahhaha', 'seanhahahhahahhahahhaha'] # 匿名函數實現 res = map(lambda name:f"{name} sb",name_list) print(list(res)) # ['jason sb', 'tank sb', 'sean sb']
''' filter(匿名函數,可迭代對象) 篩選,按照某種條件對可迭代對象操做。 ''' name_list = ['nick', 'jason sb', 'tank sb', 'sean sb'] # 匿名函數實現 res = filter(lambda name:name.endswith("sb"),name_list) print(list(res)) # ['jason sb', 'tank sb', 'sean sb'] lis = [2,3,4,5,6,7] def function(item): if item > 5: return True else: return False res = filter(function,lis) print(list(res)) # [6, 7] # 匿名函數實現 res = filter(lambda item:item > 5,lis) print(list(res)) # [6, 7]
from functools import reduce lst=[1,2,3,4] print(reduce(lambda x,y: x+y, lst)) #計算過程以下: # 這個式子只有兩個參數,沒有初始化值,那麼就取列表前2項,經過lambda函數計算結果 #1+2=3, #上面計算的結果在與列表第三個元素經過lambda函數計算 # 3+3=6 #上面計算的結果在與列表第四個元素經過lambda函數計算 # 6+4=10 # 它還能夠傳入一個參數 print(reduce(lambda x,y: x+y, lst,100)) # 表示初始值是100,第一次計算從100加列表的第一個元素,獲得的結果再與後面的值依次相加
## 須要掌握 1.bytes() # 解碼字符 res = bytes("你好" ,encoding="utf8") # 解碼成二進制 print(res) ''' 2.chr()/ord() 按照ascil碼 將數字轉換爲對應字符 ord 將字符轉換爲數字 ''' print(chr(65)) print(ord("A")) ''' 3.divmod() 將商 餘數以元組形式返回 ''' print(divmod(10,3)) ''' 4.ennumerate() ********************重要 帶有索引的值 ''' l = ["a","b","c"] for i in enumerate(l): print(i) # (0, 'a') # (1, 'b') # (2, 'c') ''' 5.eval() ********************重要 將字符串兩邊的引號去掉,變成剩下的數據類型 ''' lis = "[1,2,3]" print(type(list)) # <class 'type'> print(type(eval(lis))) # <class 'list'> ''' 6.hash() 是否可哈希 ''' print(hash(10)) # 10 ############################################################################################## ## 瞭解 ''' 1. abs() *** 求絕對值 ''' print(abs(-1)) # 1 ''' 2. all() 可迭代對象內元素全爲真則返回真 ''' print(all([1,2,3])) # True ''' 3. any() 可迭代對象內有一元素爲真,則爲真 ''' print(any([1,2,3,0])) # True ''' 4. bin() oct() hex() 二進制、八進制、十六進制轉換 ''' print(bin(17)) print(oct(17)) print(hex(17)) # 0b10001 # 0o21 # 0x11 ''' 5. dir() 列出全部time的功能 ''' print(dir()) # ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', # '__name__', '__package__', '__spec__', 'i', 'l', 'lis', 'res'] ''' 6. frozenset() 不可變的集合 ''' set8 = frozenset({1,2,3,4,5}) print(set8) # frozenset({1, 2, 3, 4, 5}) # set8.add(10) # AttributeError: 'frozenset' object has no attribute 'add' ''' 7. globals() loacals() 查看全局、局部名字 ''' def func(): a = 1 # print(locals()) # 以字典形式返回 # print(globals()) # 打印全局名字 func() # {'a': 1} # {'__name__': '__main__', '__doc__': '\n1.bytes()\n解碼字符\n', '__package__': None, ' # __loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000001DCB208>, # '__spec__': None, '__annotations__': {}, # '__builtins__': <module 'builtins' (built-in)>, # '__file__': 'C:/Users/Administrator/Desktop/老男孩python文檔/老男孩Python程序編寫/練習/第三章Python基礎--文件操做&函數/內置函數.py', '__cached__': None, 'res': b'\xe4\xbd\xa0\xe5\xa5\xbd', 'l': ['a', 'b', 'c'], 'i': (2, 'c'), 'lis': '[1,2,3]', 'set8': frozenset({1, 2, 3, 4, 5}), 'func': <function func at 0x00000000004F1E18>} ''' 8. pow() 返回 xy(x的y次方) 的值。 ''' print(pow(5,2)) # 25 ''' 9. round() *** 返回浮點數x的四捨五入值。 ''' print(round(5.1)) # 5 ''' 10. slice() 切片對象,主要用在切片操做函數裏的參數傳遞。 slice 語法: class slice(stop) class slice(start, stop[, step]) ''' myslice = slice(5) print(myslice) ''' 11. sum() *** 進行求和計算 ''' print(sum(range(100))) # 4950 ''' 12. __import__() 經過字符串導入模塊 ''' m = __import__("time") print(m.time()) # 1569325150.957757 ''' 面向對象函數,-----^_^----- classmethod staticmethod property delattr hasattr getattr setattr isinstance() issubclass() object() super() '''
什麼叫面向過程,面向 流程 編程對象
面向過程編程是解決問題的一種思想,過程是解決問題的步驟blog
將複雜的問題拆解成一個個流程,從而作完整個事情排序
優勢:複雜的問題流程化,簡單化索引
缺點:擴展性差接口
''' 註冊功能 接受用戶輸入用戶名,進行合法性校驗,拿到合法的用戶名 ''' def check_user(): username = input(">>>").strip() if username.isalpha(): return username else: print("用戶名必須爲字母,傻逼") ''' 分層實現功能 用戶功能層:實現用戶具體的功能 接口層:鏈接數據處理層和用戶功能層 數據處理層:處理數據後把結果交給接口層 '''
異常就是程序運行時候的報錯
在python中不一樣的異常是不一樣的類型,一個異常標識一種錯誤
try: 代碼 except 錯誤類型: 代碼
print(1) num = input('請輸入數字:') dic = {'a': 1} try: print(dic['b']) # KeyError 1 / int(num) # 報錯以後,不運行下面的代碼 except ZeroDivisionError: print('傻逼,不能輸入0') except KeyError: print('傻逼,不知道什麼錯誤') print(2)
# 萬能捕捉異常 print(1) num = input('請輸入數字:') dic = {'a': 1} try: print(dic['b']) # KeyError 1 / int(num) # 報錯以後,不運行下面的代碼 except Exception as e: # 萬能異常,只要有錯誤,就捕捉 print(e) # 打印錯誤的描述信息 print('傻逼,不知道什麼錯誤') print(2)
finally 表示不管報不報錯都執行下面的代碼
# 異常捕捉只能捕捉邏輯錯誤 fr = open('test.py') try: # 文件中途報錯 1 / 0 except Exception as e: print(e) finally: # 不管你報不報錯,都執行這一行 print('finally') fr.close()
try: raise TypeError('拋出異常,類型錯誤') except Exception as e: print(e)
assert 1 == 1 try: assert 1 == 2 except Exception as e: print(e)