程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

2020年10月8日 Python變量、函數、對象作用域

編輯:Python

使用這兩個函數來查看全局和當地變量的字典。
locals()不包括通過global獲取的變量。

globals()
locals()

函數內如果沒有某個變量的賦值語句,函數內可以訪問函數外的同名變量。

>>> import re
>>> a=0
>>> def sb():
print(re)
print(a+1)
return locals()
>>> sb()
<module 're' from 'G:\\360安全浏覽器下載\\Python\\Python37-32\\lib\\re.py'>
1
{
}

但如果函數內有某個變量的賦值語句,Python就會認為這是當地變量,可能會引發錯誤。

>>> def sb():
print(re)
print(a+1)
a=a+1
return locals()
>>> sb()
<module 're' from 'G:\\360安全浏覽器下載\\Python\\Python37-32\\lib\\re.py'>
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
sb()
File "<pyshell#30>", line 3, in sb
print(a+1)
UnboundLocalError: local variable 'a' referenced before assignment

函數內可以定義重名函數(不改變外層函數)。

>>> def sb():
print(re)
print(a+1)
def sb():
a=a+1
return locals()
>>> sb()
<module 're' from 'G:\\360安全浏覽器下載\\Python\\Python37-32\\lib\\re.py'>
1
{
'sb': <function sb.<locals>.sb at 0x01E575D0>}
>>> sb()
<module 're' from 'G:\\360安全浏覽器下載\\Python\\Python37-32\\lib\\re.py'>
1
{
'sb': <function sb.<locals>.sb at 0x020C18A0>}

還可以使用global獲取自己的函數名後再對函數本身重新定義。

>>> def sb():
print(re)
print(a+1)
global sb
def sb():
a=a+1
return locals()
>>> sb()
<module 're' from 'G:\\360安全浏覽器下載\\Python\\Python37-32\\lib\\re.py'>
1
{
}
>>> sb()
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
sb()
File "<pyshell#37>", line 6, in sb
a=a+1
UnboundLocalError: local variable 'a' referenced before assignment

定義同名函數或者為其賦值時,只從這兩個地址裡來回改變。
在兩個定義函數語句中間訪問的是上面那個函數,在兩個定義函數語句上面和下面訪問的是下面那個函數。

>>> for _ in [0]:
print(0,sb,sb())
def sb():
return False
print(1,sb,sb())
sb=1
print(2,sb)
def sb():
return True
print(3,sb,sb())
0 <function sb at 0x020C1858> True
1 <function sb at 0x020C1930> False
2 1
3 <function sb at 0x020C1930> True
>>> sb
<function sb at 0x020C1930>
>>> sb
<function sb at 0x020C1930>
>>> sb()
True
>>> def sb():
return True
>>> sb
<function sb at 0x020C1858>
>>> def sb():
return True
>>> sb
<function sb at 0x020C1930>
>>> def sb():
return True
>>> sb
<function sb at 0x020C1858>
>>> def sb():
return False
>>> sb
<function sb at 0x020C1930>
>>> def sb():
return False
>>> sb
<function sb at 0x020C1858>

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved