函式--內建函式、匿名函式、
阿新 • • 發佈:2018-12-12
一.內建函式。
作用域相關
globals()——獲取全域性變數的字典
locals()——獲取執行本方法所在名稱空間內的區域性變數的字典
迭代器相關:
renge() 生成資料
next() 迭代器向下執行一次
iter() 獲取迭代器,內部實際使用的是__iter__()方法來獲取迭代器
字串型別相關:
eval() 執⾏字串型別的程式碼. 並返回最終結果,有返回值的字串形式的程式碼用eval()exec() 執⾏字串型別的程式碼,沒有返回值的字串形式的程式碼用exec() compile() 將字串型別的程式碼變異. 程式碼物件能夠通過exec語句來執⾏或者eval()進⾏求 值,很少用
輸入輸出相關:
input() 獲取使用者輸入的內容 print() 列印輸出
記憶體相關:
hash() 獲取到物件的雜湊值(int,str,bool,tuple)
id() 獲取到物件的記憶體地址
檔案操作相關:
open() 用於開啟一個檔案,建立一個檔案控制代碼
模擬相關:
__import__() 用於動態載入類和函式
呼叫相關:
callable() 用於檢查一個物件是否是可呼叫的,如果返回True,object有可能呼叫失敗,但如何返回False,那呼叫絕對不會成功
檢視內建屬性:
dir() 檢視物件的內建屬性,方法,訪問的是物件中的__idr__()方法
基礎資料型別相關:
數字相關: bool() 將給定的資料轉換成bool值. 如果不給值. 返回False int() 將給定的資料轉換成int值. 如果不給值, 返回0 float() 將給定的資料轉換成float值. 也就是⼩數 complex() 建立⼀個複數. 第⼀個引數為實部, 第⼆個引數為虛部. 或者第⼀個引數直接
⽤字串來描述複數
進位制轉換:
bin() 將給的引數轉換成⼆進位制
otc() 將給的引數轉換成八進位制
hex() 將給的引數轉換成⼗六進位制
數學運算:
abs() 返回絕對值
divmode() 返回商和餘數
round() 四捨五入
pow(a, b) 求a的b次冪, 如果有三個引數. 則求完次冪後對第三個數取餘
sum() 求和
min() 求最⼩值
max() 求最⼤值
和資料結構相關:
列表和元組:
list() 將⼀個可迭代物件轉換成列表
tuple() 將⼀個可迭代物件轉換成元組
reversed() 將⼀個序列翻轉, 返回翻轉序列的迭代器
slice() 列表的切片
字串相關:
str() 將資料轉化成字串
format() 與具體資料相關, ⽤於計算各種⼩數, 精算等
bytes() 把字串轉化成bytes型別 bytearray() 返回⼀個新位元組陣列. 這個數字⾥的元素是可變的, 並且每個元素的值得範圍是[0,256) memoryview() 檢視bytes在記憶體中的情況 ord() 輸入字元找帶字元編碼的位置 chr() 輸入位置數字找出對應的字元 ascii() 是ascii碼中的返回該值 不是就返回\u... repr() 返回⼀個物件的string形式,就是原封不動的輸出, 引號和轉義字元都不起作⽤ %r 原封不動的寫出來 name = 'taibai' print('我叫%r' % name)
資料集合: dict() 建立一個字典 set() 建立一個集合 frozenset() 建立一個凍結的集合,凍結的集合不能進行新增和刪除操作 其他相關: len() 返回一個物件中的元素的個數 sorted() 對可迭代物件進行排序操作 enumerate() 獲取集合的列舉物件 lst = ["alex","wusir","taibai"] for index,el in enumerate(lst): print(str(index)+"==>"+el) all() 可迭代物件中全部都是True,結果才是True any() 可迭代物件中有一個是True,結果就是True zip() 函式用於將可迭代的物件作為引數,將物件總對應的元素打包成一個個元組,然後返回有這些元組組成的表,如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同. filter() 過濾 map() 會根據提供的函式對指定序列做對映
二.匿名函式.
匿名函式統意的名字是: lambda
fn = lambda a,b :a+b #定義一個很簡單的函式,複雜的函式不要用lambda ret = fn(3,5) print(ret) print(func) print(fn) #使用場景:配合著sorted,map,filter 一起使用
三、本節部分函式詳解。
sorted 排序函式,讓你自己取定義排序的規則
lst = [11,5,36,1,27,58] s = sorted(lst) #預設從小到大排序 print(s) lst = ["胡一菲", "張偉", "關穀神奇", "曾小賢呂小布", "諾瀾"] #按照字串長度排序 def func(s): return len(s) #返回長度 執行流程: 把可迭代物件中的每一項拿出來,作為引數傳遞給後面key函式.函式返回數字,根據數字進行排序 s = sorted(lst,ky = func) print(s) print(sorted(lst,key=lambda s:len(s)))
eval 函式是把字串型別的資料作為程式碼進行執行
s = "18+2" ret = eval(s) # 執行字串型別的程式碼 print(ret)
s = "{'name':'alex', 'age':18, 'isMan':False}" # 字串
# 把字串型別的程式碼還原回字典, 列表, 元組
ret = eval(s) # 側重的有返回值
print(ret)
print(type(ret))
exec execute 函式執行字串型別的程式碼,不能太長,不能太亂.
code = input("請輸入你要執行的程式碼") exec(code) # 沒有返回值. 想要返回值用eval print(a) # pycharm報錯不一定準
compile 函式編譯,把你要執行的程式碼先預編譯.通過exec和eval可以執行我們的程式碼
code = '''
for i in range(10):
if i % 2 == 0:
print(i)
'''
c = compile(code, "", "exec") # 預載入程式碼
# exec
exec(c) # 執行程式碼
# 可以使用complie寫一個程式設計大賽.
map() 對映函式
lst = ["籃球", "打打檯球", "唱歌", "爬慌山", "步"] m = map(lambda s: "愛好:"+s , lst) print(list(m)) lst = [1,5,78,12,16] # 計算每個數字的平方 print([i **2 for i in lst]) m = map(lambda i: i ** 2, lst) print(list(m))
filter 過濾
lst = ["張無忌", "張翠山", "范冰冰", "金毛獅王", "李冰冰"] 過濾掉姓張的人 把可迭代物件開啟. 把內部元素一個一個的傳遞給前面的函式. 由這個函式決定此項是否保留 f = filter(lambda name : not name.startswith("張"), lst) print("__iter__" in dir(f)) # 可迭代物件 for el in f: print(el)