Python函式作用域及傳遞變數筆記

2021-10-02 06:51:17 字數 2246 閱讀 4587

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 ...