x =
55def
func()
: x =
99print
(x)print
('全域性變數x:'
,x)print
('函式內變數x:'
)func(
)輸出:
全域性變數x:
55函式內變數x:
99
區域性作用域local不能修改全域性作用域global的變數
x =
55def
func()
:global x
x =99print
(x)print
('全域性變數x'
,x)print
('函式內變數x:'
)func(
)print
('全域性變數x'
,x)輸出:
全域性變數x 55
函式內變數x:
99全域性變數x 99
使用global關鍵字可宣告全域性變數
def
func()
: x =
1def
nested()
: x =
2print
(x) nested(
)print
(x)func(
)輸出:
21
區域性作用域local不能修改封裝作用域enclosure(外層函式)的變數
def
func()
: x =
1def
nested()
:nonlocal x
x =2print
(x) nested(
)print
(x)func(
)輸出:
22
使用nonlocal關鍵字可宣告外層作用域變數
def
change_number
(x):
x +=
1x =
1print
('x={}'
.format
(x))
change_number(x)
print
('x={}'
.format
(x))
輸出:x=1x=
1
def
change_str
(s):
s ='abc'
str=
'a'print
(str
)change_str(
str)
print
(str
)輸出:
aa
向函式傳遞不可變型別如**中的整型、字串時,是生成副本傳遞給函式,函式內是對副本進行操作,不影響原始值
def
change_list
(l):
l[0]
=1l =[
'a',
'b',
'c']
print
('原始列表:'
,l)change_list(l)
print
('操作後列表'
,l)輸出:
原始列表: [
'a',
'b',
'c']
操作後列表 [1,
'b',
'c']
向函式傳遞可變型別如列表、字典表時,是引用傳遞方式,函式內的操作會影響原始值
def
change_list
(l):
l[0]
=1l =[
'a',
'b',
'c']
print
('原始列表:'
,l)change_list(l.copy())
#或者 change_list(l[:])
print
('操作後列表'
,l)輸出:
原始列表: [
'a',
'b',
'c']
操作後列表 [
'a',
'b',
'c']
可以通過向函式傳遞列表的副本來避免讓函式修改原始列表 python傳遞變數 python變數傳遞
python變數傳遞 數值 num 1 123 num 2 num 1 改變num 2值前 print num 1 num 2 format num 1,num 2 num 2 0 改變num 2值後 print num 1 num 2 format num 1,num 2 輸出num 1 123,...
python 函式巢狀及作用域
函式可以巢狀嗎?當然可以 我們可以看到,外部函式outer func 的函式體中巢狀了乙個函式inner func 並且outer func 體中 還呼叫了內部函式inner func 所以每當呼叫outer func 的時候,都會呼叫一次inner func 我 們來看一下列印結果 我們可以看到,...
python函式定義及作用域
函式 引數 引數解構 引數解構發生在函式呼叫時,可變引數發生函式定義的時候。引數解構分為兩種形式,一種是必備引數解構,另一種是不定長引數解構。def func a,b,c print a,b,c lst 1,2,3 func lst 1 2 3 def func a,b,c print a,b,c ...