這篇文章介紹一下python的高階函式。
目錄
1.偏函式
2.lambda表示式(匿名函式)
3.遞迴函式
4.推導式
5.函式閉包
6.命名元組
6.zip函式
7.filter函式
8.map函式
9.global() 和 locals() 函式
作用:固定函式的引數,重寫原函式,設定函式引數的預設值。
from functools import partial
def func(name, age, gender):
print(f"名字:,性別:,性別:")
# 使用偏函式固定引數,遵循函式傳參的規則
# 將func作為偏函式的第乙個引數,設定func原有引數的固定值
new_fun1 = partial(func, "小明") # 固定func的name為小明
new_fun2 = partial(func, age=18) # 固定func的age為18
new_fun1(19, "男")
new_fun1(20, "女")
new_fun2(name='小李', gender='boy')
執行結果:
名字:小明,性別:19,性別:男
名字:小明,性別:20,性別:女
名字:小李,性別:18,性別:boy
作用:實現某些簡單的函式,而不用給函式命名
lambda 引數列表: 返回值
foo = lambda x, y: x + y
print(foo)
print(foo(11, 22))
at 0x0000023ddeacc1e0>
33
作用:函式內部調自身 ,python最大遞迴深度限制:1000次 ,python使用遞迴比較耗記憶體
def fun(number):
"""實現 1+50的和
:param number:
:return:
"""if number == 1:
return number
else:
return number + fun(number - 1)
print(fun(100))
(1)列表推導式: 快速生成乙個有規律的列表資料
普通使用方法:[i for i in range(100)]
結合if條件一起使用:[i for i in range(100) if i%2==0]
(2)字典推導式 普通使用:
注:沒有元組推導式,那個叫生成器
# 列表推導式
li = [f'hello' for i in range(5)]
print(li)
# 列表推導式後加上條件判斷
li_3 = [i for i in range(100) if i % 2 == 0]
print(li_3)
# 字典推導式
dic = '.format(i) for i in range(100)}
print(dic)
函式閉包的三大條件:
(1)函式中有巢狀函式
(2)外層函式的返回值是內層函式的函式名
(3)記憶體函式對外部作用域有非全域性變數的引用: 定義的變數 傳進來的引數 閉包函式的作用
def fun():
a = 100
def in_fun():
print("這個是內部定義的函式")
print(a)
return in_fun # 可以外部呼叫
f = fun()
給列表中的值加上「表頭」
python中的基本資料型別:
數值:int float bool complex
序列:str list tuple range
雜湊:set dict 命名元組型別
from collections import namedtuple
student = namedtuple("students", ['name', 'age', 'gender'])
s1 = student('s1', 18, '男')
s2 = student('s2', 16, '女')
print(s1.age)
print(s1.name)
print(s1.gender)
作用:聚合打包函式,以最短的為準,進行對應打包。
使用方法:zip()
str1 = 'beijing'
title = ('a', 'b', 'c')
data0 = [1, 2, 3, 4]
data1 = [1, 2, 3, 4, 5, 6]
data2 = [1, 2, 3, 3, 5, 6, 7]
# 進行聚合打包
res1 = zip(str1, data0)
res2 = zip(title, data0, data1, data2)
# 只聚合了兩組資料時,可以轉為字典物件
print(dict(res1))
# 聚合了多組資料時,轉換為巢狀元組的列表
print(list(res2))
執行結果:
[('a', 1, 1, 1), ('b', 2, 2, 2), ('c', 3, 3, 3)]
引數1:函式
引數2:可迭代物件
作用:過濾器函式 ,自動遍歷第二個引數,把每個元素當成引數傳到第乙個引數中,根據函式返回值是true還是fasle來進行過濾 將可迭代物件中的資料再次進行返回。返回的是乙個fliter物件,需要轉換為list、tuple等進行輸出。
li = [22, 33, 44, 55]
res3 = filter(lambda x: x > 33, li)
print(tuple(res3))
(44, 55)
引數1:函式
引數2:可迭代物件
作用:將可迭代物件的每項作為引數傳給前面的函式。
res = map(lambda x: x * 2, [11, 22, 33, 44])
res = list(res)
print(res)
res2 = map(lambda x, y: x + y, [11, 22, 33, 44], [22, 33, 44, 55, 66])
res2 = list(res2)
print(res2)
[22, 44, 66, 88]
[33, 55, 77, 99]
作用:
locals:獲取當前作用域的全域性變數,並打包成字典
def foo(c):
aa = 100
bb = 100
dic1 = locals()
print(dic1)
foo(999)
globals:獲取全域性作用域的變數,並打包成字典
def foo2(c):
dic1 = globals()
c = 1000
print(dic1)
foo2(100)
name = 999
if name in globals():
print('name已經在全域性作用域中了')
else:
name = 999
, '__builtins__': , '__file__': 'd:/pythonpro/free_lemon_sdet/day_02/內建函式.py', '__cached__': none, 'foo2': }
《完》 python 函式高階 python 函式高階
形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...
Python高階 函式高階
閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...
python 函式 高階函式
filter 函式是 python 內建的另乙個有用的高階函式,filter 函式接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。例如判斷奇偶數 def...