這篇文章將為大家詳細(xì)講解有關(guān)python函數(shù)、參數(shù)解構(gòu)以及函數(shù)作用域的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)公司專注于邱縣網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供邱縣營銷型網(wǎng)站建設(shè),邱縣網(wǎng)站制作、邱縣網(wǎng)頁設(shè)計(jì)、邱縣網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造邱縣網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供邱縣網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
def 函數(shù)名(參數(shù)列表) 函數(shù)體 [return 返還值]
例:
def add(x,y):
return x + y
add(10,2) #位置傳參
add(x=10,y=2) #關(guān)鍵字傳參,按照形參的名字一一對(duì)應(yīng)
def add(x=3,y=4):
return x + y
add()
默認(rèn)不輸入,缺省值為x=3,y=4,輸入后已輸入的為準(zhǔn)
def sum1(iterable): #iterable 用作可迭代對(duì)象
result = 0
for x in iterable:
result += x
return result
def sum1(iterable): #代表可變形參,將多個(gè)參數(shù)封裝到元組,不可變。和上面區(qū)別:(參數(shù)為[1,3]就錯(cuò)了)
result = 0
for x in iterable:
result += x
return result
可變未知參數(shù):形參前用* 必須用位置傳參。
如上;
可變關(guān)鍵字參數(shù):形參前使用 如kwargs 必須用關(guān)鍵字參數(shù)
如下:
def showconfig(**kwargs): #k-v對(duì)傳參
print(type(kwargs))
print(kwargs)
showconfig(host='192.168.1.1','username'='tom')
形參定義順序:普通參數(shù)、位置參數(shù)、關(guān)鍵字參數(shù)
username,*args,**kwargs
keyword-only: # 在一個(gè)args之后出現(xiàn)的普通參數(shù),成為keyword-only
def fn(args,x) # x只能關(guān)鍵字傳參
def fn3(x,y,*,z) # ''純粹為了改變'z'變成keyword-only
將必須使用名稱的才能使用的參數(shù),定義為keyword-only
add(*[4,5]) 相當(dāng)于add(4,5) add(**{'a':2,'b':4}) 相當(dāng)于add(a=2,b=4) add(*{'a':2,'b':4}) 相當(dāng)于add(a,b) add(*{'a':2,'b':4}.values())
return語句執(zhí)行之后,不會(huì)再進(jìn)行執(zhí)行函數(shù)內(nèi)其他語句
在函數(shù)內(nèi)定義的變量只能在此函數(shù)中
def fn()
print('~~~')
x = 100 #x可見范圍只在函數(shù)內(nèi)部
fn()
print(x) #不能輸出x
每一個(gè)函數(shù)都會(huì)開辟一個(gè)作用域
作用域分類:
全局作用域
在整個(gè)程序運(yùn)行環(huán)境中都可見
global
局部作用域
在函數(shù)、類等內(nèi)部可見
局部作用域中的變量成為局部變量,適用范圍不能超過其所在作用域
local作用域
創(chuàng)建的.py的文件中,非函數(shù)的變量是全局變量
x = 1000
def fn2():
print(2,x)
print(1,x)
fn2()
打?。?br/>1 1000
2 1000
對(duì)外不可見,對(duì)內(nèi)可見
例1:
x = 100
def fn():
x+= 200 #賦值即定義,x變成局部,但沒被賦值,所以這么寫會(huì)報(bào)錯(cuò)
fn()
例2:
x = 100
def fn()
print(x) #會(huì)報(bào)錯(cuò),只定義了x為局部變量,此時(shí)沒有賦值
x = 200 #先定義為局部,等執(zhí)行進(jìn)行賦值
print(x)
fn()
例3:
x = 100
def fn()
global x #聲明x為全局變量
print(x)
x += 200
print(x)
fn()
print(x)
打?。?br/>100
100
300
自由變量:#未在本地作用域中定義的變量,
例如定義在內(nèi)層函數(shù)外的外層函數(shù)的作用域中的變量
閉包:指的是內(nèi)層函數(shù)引用到了外層函數(shù)的自由變量,就形成了閉包
內(nèi)層函數(shù)如沒有用到外層函數(shù)的變量,則外層的變量會(huì)消亡,用到則不會(huì)消亡
def counter():
c = 0
def inc()
nonlocal c #聲明c不是當(dāng)前函數(shù)本地變量,而在上一級(jí)定義,也不是全局變量
c += 1
return
nonlocal :不適用于最外層函數(shù)
缺省值
def foo (x=1) # 默認(rèn)x = 1
x += 1
print(x)
foo()
foo()
打?。?br/>1
1
def bar (x=[]) # x=[]是引用類型
x += 1
print(x)
foo()
foo()
打?。?br/>[1]
[1][1]
bar.defaults
([1,1],)
如果有keyword-only:
.kwdefults
例:
def foo (xyz,m=123,*,n='abc',t = [1,2]:
print(foo.defaults,foo.kwdefults)
(123,){'n':'abc','t':[1,2]}
a += [5] #相當(dāng)于a.extend([5]),就地修改,不會(huì)更改地址值
a = a + [5] #相當(dāng)于創(chuàng)建了新列表
Local
Enclosing
Global
Build-in 內(nèi)置模塊的命名空間 #print(open) print open
所以一個(gè)名詞的查找順序就是LEGB
函數(shù)的消亡
本質(zhì)使其引用計(jì)數(shù)清零
關(guān)于“python函數(shù)、參數(shù)解構(gòu)以及函數(shù)作用域的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。