函式返回值:
作用域乙個識別符號的可見範圍, 這就是識別符號的作用域; 一般常說的變數的作用域
上例中的x不可以訪問到, 會丟擲異常(nameerror:name 『x』 is not defined), 原因在於函式是乙個封裝, 它會開闢乙個作用域, x變數被限制在這個作用域中, 所以在函式外部x變數不可見
注意:每乙個函式的都會開闢乙個作用域
作用域分類
1.全域性作用域
2.區域性作用域
函式巢狀
函式巢狀:在乙個函式中定義了另外乙個函式
內部函式不能在外部直接使用, 會丟擲nameerror異常, 因為它在函式外部不可見
內部函式不過就是乙個識別符號, 就是乙個函式內部定義的變數而已
巢狀結構的作用域:
從執行的結果來看:
global語句
錯誤原因分析:
這個問題就可以用global語句解決:
global語句:
注意,下面試驗如果在ipython、jupyter中做,上下文執行環境中有可能有x的定義,稍微不注意,就測試不出效果
def foo():
global x
x += 1
print(x)
foo()
使用global關鍵字定義的變數,雖然在foo函式中宣告,但是這將告訴當前foo函式作用域,這個x變數將使用外部全域性作用域中的x。
def foo():
global x
x = 10
x += 1
print(x)
foo()
print(x)
即使是在foo中又寫了x=10,也不會在foo這個區域性作用域中定義區域性變數x了。
使用了global,foo中的x不再是區域性變數了,它是全域性變數總結global使用原則閉包自由變數:未在本地作用域中定義的變數。例如定義在內層函式外的外層函式的作用域中的變數
閉包:就是乙個概念,出現在巢狀函式中,指的是內層函式引用到了外層函式的自由變數,就形成了閉包
**分析
這是python2中實現閉包的方式,python3還可以使用nonlocal關鍵字
nonlocal語句
nonlocal:將變數標記為不在本地作用域定義,而是在上級的某一級區域性作用域中定義,但不能是全域性作用域中定義
內部函式使用nonlocal關鍵字宣告count變數在上級作用域而非本地作用域中定義。
**中內層函式引用外部區域性作用域中的自由變數,形成閉包。
預設值的作用域
因為xyz有預設值, 所以兩次呼叫xyz的值都是1
為什麼第二次呼叫foo函式列印的是[1,1]?
函式位址並沒有變,就是說foo這個函式物件的沒有變過,呼叫它,它的屬性__defaults__中使用元組儲存預設值
xyz預設值是引用型別,引用型別的元素變動,並不是元組的變化
屬性__defaults__中使用元組儲存所有位置引數預設值,它不會因為在函式體內改變了區域性變數(形參)的值而發生改變
屬性__defaults__中使用元組儲存所有位置引數預設值
屬性__kwdefaults__中使用字典儲存所有keyword-only引數的預設值
再看乙個例子:
只有一句不同,卻輸出結果不同?
這就要說到列表的+和+=的區別:
所以乙個名詞的查詢順序就是legb
python 函式返回值
帶有返回值的函式 def add2num a,b c a b return c或者 def add2num a,b return a b在本小節剛開始的時候,說過的 買菸 的例子中,最後兒子給你菸時,你一定是從兒子手中接過來 對麼,程式也是如此,如果乙個函式返回了乙個資料,那麼想要用這個資料,那麼就...
python 函式返回值
python 函式返回值有兩種形式 1 返回乙個值。2 返回多個值。現看看返回乙個值的吧。deffirstvalue a b c a b return cprint firstvalue 1 2 結果 3 再看看返回多個值的 那怎麼可以返回多個值呢,其他的語言一般呼叫函式的話,只能返回乙個值,可能我...
python 函式返回值
函式返回值 return 1 返回乙個值 return result 2 返回多個值 如果返回多個資料,資料之間使用逗號進行分割,那麼返回的是元組型別 return first num,second num,result 3 注意 函式中有return,函式執行到return,函式一定會中斷 如果沒...