1樓:匿名使用者
當一行**要使用變數 x 的值時,python 會到所有可用的名字空間去查詢變數,按照如下順序:
1、區域性名稱空間:特指當前函式或類的方法。如果函式定義了一個區域性變數 x,或一個引數 x,python 將使用它,然後停止搜尋。
2、全域性名稱空間:特指當前的模組。如果模組定義了一個名為 x 的變數,函式或類,python 將使用它然後停止搜尋。
3、內建名稱空間:對每個模組都是全域性的。作為最後的嘗試,python 將假設 x 是內建函式或變數。
4、如果 python 在這些名字空間找不到 x,它將放棄查詢並引發一個 nameerror 異常,如,nameerror: name 'aa' is not defined。
巢狀函式的情況:
1、先在當前 (巢狀的或 lambda) 函式的名稱空間中搜尋
2、然後是在父函式的名稱空間中搜尋
3、接著是模組名稱空間中搜尋
4、最後在內建名稱空間中搜尋
求問python大神,為什麼已經設定了全域性變數,還現實未定義變數? 5
2樓:匿名使用者
#你沒有
理解global的意義
markov_dicts = {}
def parse():
global markov_dicts # 以後出現的就是修改global的內容
markov_dicts["a"] = 1print(markov_dicts) # 直接呼叫def print_globvar():
print(markov_dicts) # 直接呼叫parse()
print_globvar()
你原始**裡面print的時候那個markov_dicts 還沒有定義。
>>> def a():
... global m
... m = 1
...>>> a()
>>> m
1>>> print m
1>>> def b():
... global n
... n = 2
...>>> print n
traceback (most recent call last):
file "", line 1, in
nameerror: name 'n' is not defined>>> b()
>>> n2
python class裡面的全域性變數問題
3樓:匿名使用者
你在ex裡面定義的oo,所以你得先執行過ex之後才能執行start。
class test:
def __init__(self,name='testa'):
self.x = 'age'
self.name = name
self.ex() #加上這個
self.start()
def ex(self):
global oo
oo = 'this is test'
def start(self):
print oo
t=test()
如果不適用全域性變數的話,你可以self.oo:
class test:
def __init__(self,name='testa'):
self.x = 'age'
self.name = name
self.ex()
self.start()
def ex(self):
self.oo = 'this is test'
def start(self):
print self.oo
t=test()
4樓:匿名使用者
因為你定義oo是在self.ex(self)這個函式裡,所以在這個函式被執行前,global裡並沒有 oo這個變數。
如果你明白這個道理就知道了怎麼去列印你的oo了。
簡單的說這樣
t=test()
t.ex()
t.start()
5樓:匿名使用者
class test:
def __init__(self,name='testa'):
self.x = 'age'
self.name = name
self.oo="this is test"
self.start()
def ex(self):
oo = 'this is test'
def start(self):
print oo
test()
python區域性變數和全域性變數問題
6樓:大話殘劍
global語句宣告後,指定的變數被認為是函式外的。後面的所有操作都是在操作函式外的那個變數,雖然你是在函式內操作的。
雖然python提供了這個功能,但是應該儘量避免這樣做,因為這使得程式的讀者會不清楚這個變數是在**定義的。
def func():
global x
print 'x is', x
x = 2
print 'changed local x to', xx = 50
func()
print 'value of x is', x執行結果是這樣的
x is 50
changed global x to 2value of x is 2
如何解決以下這個python裡的,關於模組匯入,全域性變數的詭異的問題
7樓:匿名使用者
我覺得你發問題不發出來只留個題目更加詭異
python lxml所有與多個名稱空間問題,怎麼解決
8樓:育知同創教育
有如下xml
其中的xmlns屬性表示的是該xml的預設名稱空間,該名稱空間必須是一個url形式
檢視xml的tag
#encoding=utf8
from lxml import etree
str_xml = """
"""xml = etree.fromstring(str_xml)
for node in xml.iter():
print node.tag
結果為:ab
bbc可以看到,跟普通xml的tag相比每個tag前面都多出了一個名稱空間
獲取名稱空間 .n**ap
from lxml import etree
str_xml = """
"""xml = etree.fromstring(str_xml)
ns = xml.n**ap
print ns
print ns[none]
結果http://this/is/a/namespace
ns[none]獲取的是預設名稱空間,ns會顯示所有的名稱空間
獲取有名稱空間的節點內容
from lxml import etree
str_xml = """
"""xml = etree.fromstring(str_xml)
ns = xml.n**ap[none]
ns = "" % ns
for item in xml.findall("b/c".format(ns)): #不能用xpath會出錯
print item.text
結果datac
注意,在查詢節點時,每一級節點都需要加上名稱空間。而且測試時發現,findall可以正常查詢到資訊,而xpath會報錯。
獲取帶名稱空間節點的屬性值
結果123
datab1
可以看到,獲取屬性時,不需要加名稱空間,直接獲取即可
python在if語句中呼叫和修改全域性變數的問題
9樓:
從cmd開始的地方全部縮排試試
10樓:匿名使用者
這裡不需要把變數設定成global的,另外列印這麼多行是因為你每讀取一行就會寫一行,而你的if語句並不是每一行都能滿足。
python 中全域性變數問題
11樓:常山英豪
看你的**,我猜測你這個是一個暴力破解密碼的**片段吧。
page沒有賦值就直接使用,當然不行。把**修改為這樣def do_login(uid,passwd):
...#你的**不變
return page
page = ""
i = 0
while page.find(『you』)>-1:
print 'success'
else:
uid = 201270201049
passwd = 10000 + i
page = do_login(uid,passwd)i = i + 1
12樓:匿名使用者
do_login1 =
^這是什麼……
python問題,如下圖,為什麼用extend方法對全域性變數就能擴充套件成功?而+不行
13樓:匿名使用者
你可以任何時候用locals()來檢視當前存在的變數地址屬性。
什麼是全域性變數定義,js中如何定義全域性變數?
全域性變數就是在程式的任意一行 都可以引用的變數。作用域是整個程專序 一般在一對大屬括號裡面宣告的變數是不能再這對大括號外引用的,而全域性變數先於所有函式宣告,所以作用域是整個程式。如果在某對大括號內有和全域性變數同名的變數,則以範圍小的變數宣告為準 簡單來說,在main 函式 bai以前宣告的變數...
vb中的全域性變數怎麼定義,VB中的全域性變數怎麼定義?
在.bas檔案中用public定義。初始化最好在sub main中進行 全域性變數是指在整個工程中都可以使用的變數,它通常在公用的標準模組中使用 public 進行宣告 如果在窗體中使用public關鍵字宣告的變數,在當前窗體處於已載入的情況下,在其他窗體中也可以使用,方法是窗體名.變數名,但是他不...
js全域性變數什麼情況下會重置,js全域性變數是否會有併發訪問問題
不知道你說的是整個程式的全域性變數,還是頁面的。如果是頁面的話,從新開啟頁面後就會重置。js全域性變數是否會有併發訪問問題 js一般情況下不會有併發問題,因為js都是針對單個使用者在執行,除非你的js 裡同時啟動多個函式,去訪問這個變數,比如 settimeout 函式1,1000 settimeo...