Python名稱空間和全域性變數問題,怎麼解決

2021-03-04 04:39:56 字數 5630 閱讀 3773

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