您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關python函數、參數解構以及函數作用域的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
def 函數名(參數列表) 函數體 [return 返還值]
例:
def add(x,y):
return x + y
add(10,2) #位置傳參
add(x=10,y=2) #關鍵字傳參,按照形參的名字一一對應
def add(x=3,y=4):
return x + y
add()
默認不輸入,缺省值為x=3,y=4,輸入后已輸入的為準
def sum1(iterable): #iterable 用作可迭代對象
result = 0
for x in iterable:
result += x
return result
def sum1(iterable): #代表可變形參,將多個參數封裝到元組,不可變。和上面區別:(參數為[1,3]就錯了)
result = 0
for x in iterable:
result += x
return result
可變未知參數:形參前用* 必須用位置傳參。
如上;
可變關鍵字參數:形參前使用 如kwargs 必須用關鍵字參數
如下:
def showconfig(**kwargs): #k-v對傳參
print(type(kwargs))
print(kwargs)
showconfig(host='192.168.1.1','username'='tom')
形參定義順序:普通參數、位置參數、關鍵字參數
username,*args,**kwargs
keyword-only: # 在一個args之后出現的普通參數,成為keyword-only
def fn(args,x) # x只能關鍵字傳參
def fn3(x,y,*,z) # ''純粹為了改變'z'變成keyword-only
將必須使用名稱的才能使用的參數,定義為keyword-only
add(*[4,5]) 相當于add(4,5) add(**{'a':2,'b':4}) 相當于add(a=2,b=4) add(*{'a':2,'b':4}) 相當于add(a,b) add(*{'a':2,'b':4}.values())
return語句執行之后,不會再進行執行函數內其他語句
在函數內定義的變量只能在此函數中
def fn()
print('~~~')
x = 100 #x可見范圍只在函數內部
fn()
print(x) #不能輸出x
每一個函數都會開辟一個作用域
作用域分類:
全局作用域
在整個程序運行環境中都可見
global
局部作用域
在函數、類等內部可見
局部作用域中的變量成為局部變量,適用范圍不能超過其所在作用域
local作用域
創建的.py的文件中,非函數的變量是全局變量
x = 1000
def fn2():
print(2,x)
print(1,x)
fn2()
打印:
1 1000
2 1000
對外不可見,對內可見
例1:
x = 100
def fn():
x+= 200 #賦值即定義,x變成局部,但沒被賦值,所以這么寫會報錯
fn()
例2:
x = 100
def fn()
print(x) #會報錯,只定義了x為局部變量,此時沒有賦值
x = 200 #先定義為局部,等執行進行賦值
print(x)
fn()
例3:
x = 100
def fn()
global x #聲明x為全局變量
print(x)
x += 200
print(x)
fn()
print(x)
打印:
100
100
300
自由變量:#未在本地作用域中定義的變量,
例如定義在內層函數外的外層函數的作用域中的變量
閉包:指的是內層函數引用到了外層函數的自由變量,就形成了閉包
內層函數如沒有用到外層函數的變量,則外層的變量會消亡,用到則不會消亡
def counter():
c = 0
def inc()
nonlocal c #聲明c不是當前函數本地變量,而在上一級定義,也不是全局變量
c += 1
return
nonlocal :不適用于最外層函數
缺省值
def foo (x=1) # 默認x = 1
x += 1
print(x)
foo()
foo()
打印:
1
1
def bar (x=[]) # x=[]是引用類型
x += 1
print(x)
foo()
foo()
打印:
[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] #相當于a.extend([5]),就地修改,不會更改地址值
a = a + [5] #相當于創建了新列表
Local
Enclosing
Global
Build-in 內置模塊的命名空間 #print(open) print open
所以一個名詞的查找順序就是LEGB
函數的消亡
本質使其引用計數清零
關于“python函數、參數解構以及函數作用域的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。