重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
# 定義函數(shù)
def fn():
print("這是函數(shù)內(nèi)部")
# 調(diào)用
fn()
fn()
# 區(qū)分
fn: 這是真正意義上的函數(shù)本身
fn(): 這是調(diào)用函數(shù)
函數(shù)參數(shù)可有可無,要看具體使用
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、通榆網(wǎng)站維護(hù)、網(wǎng)站推廣。
形參是定義函數(shù)的參數(shù)
實(shí)參就是調(diào)用函數(shù)時(shí)需要傳遞的參數(shù),函數(shù)有多少個(gè)形參就要傳遞多少個(gè)實(shí)參
形參里面可以設(shè)置默認(rèn)值參數(shù)
def fn(a,b=1)
print(a+b)
fn(1) # 正確 結(jié)果: 2
fn(1,2) # 正確 結(jié)果: 3
1.位置參數(shù)
# 根據(jù)位置傳遞參數(shù),缺點(diǎn)需要記住每一個(gè)參數(shù)的位置
2.關(guān)鍵字參數(shù)
def fn(a,b,c):
pass
fn(b=1,a=2,c=3)
*args: 可接受任意的位置參數(shù),并保存在一個(gè)元組中
def fn(*args):
pass
fn(1,2,3,4,5,6,7)
**kwargs: 可接受任意的關(guān)鍵字參數(shù),并保存在一個(gè)字典中
def fn1(**kwargs):
pass
fn(a=1,n=2,c=3,bb=1)
# 可接受任意參數(shù)
def fn(*args,**kwargs):
pass
函數(shù)執(zhí)行完之后一般都有結(jié)果,用return關(guān)鍵字來返回值
def fn():
return 1
print(fn()) # 1
# fn = 返回值
如果函數(shù)中不屑返回值默認(rèn)是None
def fn1():
pass
print(fn1()) # None
? 將一個(gè)函數(shù)賦值給另一個(gè)變量,現(xiàn)在改變量相當(dāng)于那個(gè)函數(shù)
def fn():
print('我是fn')
def fn2(x):
x() # x() == fn()
fn2(fn) # fn -> x
def fn():
print("這是fn")
return fn1
def fn1():
print("這是fn1")
fn()() # fn() 返回fn1相當(dāng)于fn1() 打印'這是fn1'
def fn():
print('這是fn')
list1 = [1,2,'hello',fn]
list1[3]() # 相當(dāng)于調(diào)用fn,打印'這是fn'
匿名函數(shù): 沒有名字的函數(shù)
語法: lambda 參數(shù)列表:返回值(表達(dá)式)
lambda x : x+1 # 這就是一個(gè)匿名函數(shù)
匿名函數(shù)可以賦值給變量
fn = lambda x : x+1
等價(jià)于
def fn(x):
return x+1
高階函數(shù): 就是函數(shù)作為參數(shù)的函數(shù)
普通函數(shù):
abs() # 求數(shù)字的絕對值
round() # 四舍五入,但是準(zhǔn)換為二進(jìn)制的時(shí)候精度缺失,實(shí)際是 奇數(shù)時(shí)四舍五入,偶數(shù)5舍大于5入
定義一個(gè)高級函數(shù):
def func(a,b,fn):
return fn(a)+fn(b)
print(func(3,-5,abs)) # 8
print(func(3.4,4.5,round)) # 7
高階函數(shù):
1.map()
規(guī)則: 必須只有一個(gè)形參
語法: map(fn,list)
# 將fn作用到序列中每一個(gè)元素中,結(jié)果返回一個(gè)迭代器
list1 = [1,2,3,4]
print(list(map(lambda x:x*x,list1))) # [1, 4, 9, 16]
# 注意原列表不會改變
2.filter()
語法:filter(fn,list)
# 將fn作用到序列中每一個(gè)元素中,結(jié)果返回一個(gè)迭代器
# 用域過濾序列,過濾掉不符合的元素
list2 = [i for i in range(1,11)]
print(list(filter(lambda x:x%2==0,list2))) # [2, 4, 6, 8, 10]
3.sorted()
語法:sorted(list,key=)
# 將序列進(jìn)行排序,返回一個(gè)序列
# 以成績排序降序
list3 = ["小李子=150","小紅=99","小明=79","小張=89","小川=92"]
print(sorted(list3,key=lambda x:int(x.split("=")[1])))
# ['小明=79', '小張=89', '小川=92', '小紅=99', '小李子=150']
4.reduce() # 該函數(shù)需要導(dǎo)入functools
語法:reduce(fn,list)
# 把序列中的元素做累計(jì)計(jì)算,結(jié)果返回一個(gè)序列
# 計(jì)算從1加到10
from functools import reduce
list4 = [i for i in range(1,11)]
print(reduce(lambda x,y:x+y,list4)) # 55
如果一個(gè)函數(shù)在自己的內(nèi)部調(diào)用了他自己,就叫做遞歸
先進(jìn)后出,后進(jìn)先出
使用遞歸必須設(shè)置出口
# 設(shè)計(jì)一個(gè)階乘
def fn(x):
if x == 1 : # 1的階乘結(jié)果等于1
return 1
return x*fn(x-1) # 如果不是1那么就等于這個(gè)數(shù)乘這個(gè)數(shù)減一的階乘
# 例如5的階乘推導(dǎo)
f(5) = 5 * f(4)
= 5 * 4 * f(3)
= 5 * 4 * 3 * f(2)
= 5 * 4 * 3 * 2 * f(1)
= 5 * 4 * 3 * 2 * 1
閉包:如果在一個(gè)內(nèi)部函數(shù),對在外作用域(但不是全局作用域)的變量進(jìn)行了引用,呢么內(nèi)部函數(shù)就叫做閉包
是一個(gè)內(nèi)部函數(shù)
使用了外部環(huán)境(非全局)
閉包 = 內(nèi)部函數(shù) + 定義函數(shù)的環(huán)境
作用: 在不修改原來函數(shù)的情況下, 拓展功能
開放封閉原則:
? 開放: 對于拓展功能進(jìn)行開放
? 封閉: 不可修改原函數(shù)
def new_fn(func):
def inner(*args,**kwargs):
...
res = func(*args,**kwargs)
...
return res
reutrn inner
@new_fn # a = new_fn(a)
def a():
pass
a() -> new_fn(a)() -> inner() 中間有閉包環(huán)節(jié)