keyword --- global & nonlocal

1. global ?#消除python對global variable的屏蔽(shadowing)作用

1.1 如果只是 Access 變量,不必加global

1.2如果在 函數中需要修改global變量,則需加global

>>> t = 5

>>> hex(id(t))

'0x64320250'

>>> def withoutGlobal():

t = 10

print("without global id of t is:",hex(id(t)))

>>> withoutGlobal()

without global id of t is: 0x643202f0

>>> def withGlobal():

global t

t = 10

print("with global id of t is:",hex(id(t)))

>>> hex(id(t))

'0x64320250'

>>> withGlobal()

with global id of t is: 0x643202f0

>>> # after call withGlobal()

>>> hex(id(t))

'0x643202f0'

>>> t

10


2.nonlocal 用在內部函數中

2.1 錯誤例子

>>> def fun1():

? ? ? ? ? ? ? ?x = 5 #相當于fun2()的全局變量

? ? ? ? ? ? ? ? ? ? ? ? ?def fun2():

? ? ? ? ? ? ? ? ? ? ? ? ? x *= x

? ? ? ? ? ? ? ?return fun2()

>>> fun1()

UnboundLocalError: local variable 'x' referenced before assignment

2.2 正確例子

>>> def fun1():

? ? ? ? ? ? ? ? ?x = 5

? ? ? ? ? ? ? ? def fun2():

? ? ? ? ? ? ? ? ? ? ? ? ? nonlocal x

? ? ? ? ? ? ? ? ? ? ? ? ? x *= x

? ? ? ? ? ? ? ? ? ? ? ? ?return x

? ? ? ? ? ? ? ? ? return fun2()

>>> fun1()

25



最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 如果一個人被自己的過去流放,這是一種怎樣的感覺?有人說:會死在過去!而我看到的卻是深藏于心的孤獨。一個人,被過去流...
    晨曦奮進閱讀 145評論 0 1
  • 昨晚,做了一個很奇怪的夢,我想現實生活中的植物人大抵也是同夢所揭示的一樣:為愛流連;如果現實生活中沒有他所愛的東西...
    pan02閱讀 170評論 0 0
  • 含羞草,獨自芬芳獨自惱 (作者:心遙) 五月份的某一天,我們從市場買回一盆青翠欲滴的含羞草。 孩子顯得特別興奮,也...
    心遙閱讀 1,020評論 3 5