python的部分內建函式

吾有一劍發表於2018-12-12

內建函式思維導圖:https://www.processon.com/mindmap/5c10ca52e4b0c2ee256ac034

內建函式

匿名函式

  匿名函式統一的名字是:<lambda>

  使用場景: 配合著sorted, map, filter 一起使用

 

fn = lambda a, b : a + b # 定義一個很簡單的函式. 複雜的函式不要用lambda
ret = fn(3, 5)
print(ret)
print(fn)

 

sorted  排序函式. 讓你自己去定義排序的規則

執行流程:

把可迭代物件中的每一項拿出來, 作為引數傳遞給後面key函式.

函式返回數字. 根據數字進行排序

 

lst = [11,5,36,1,27,58]
s = sorted(lst) # 預設從小到大排序.
print(s)
lst1 = ["胡一菲", "張偉", "關穀神奇", "曾小賢呂小布", "諾瀾"]
def func(s):
    return len(s) # 返回長度
s = sorted(lst, key=func)
print(s)
#使用匿名函式配合sorted使用
#print(sorted(lst, key=lambda s:len(s) ))

 

 

 

filter  過濾

把可迭代物件開啟. 把內部元素一個一個的傳遞給前面的函式. 由這個函式決定此項是否保留

 

lst = ["張無忌", "張翠山", "范冰冰", "金毛獅王", "李冰冰"]
# 過濾掉姓張的人
f = filter(lambda name : not name.startswith(""), lst)
print("__iter__" in dir(f)) # 可迭代物件
for el in f:
    print(el)

lst = [
    {"name":"alex", "shengao":150, "tizhong":250},
    {"name":"wusir", "shengao":158, "tizhong":150},
    {"name":"taibai", "shengao":177, "tizhong":130},
    {"name":"ritian", "shengao":165, "tizhong":130},
    {"name":"nvshen", "shengao":160, "tizhong":120},
    {"name":"baolang", "shengao":183, "tizhong":190}
]
# 過濾掉體重大於180的人   想要的是 小於180
f = filter(lambda d : d[`tizhong`] <= 180, lst)
print(list(f))

 

 

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))

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(c) # 執行程式碼

 

 

 

相關文章