通過這個question是不是,python運行時模型,字典的字典?
globals()
去後給全局命名空間(__main__
模塊)的字典視圖。
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>>
任何新符號(名稱),說operator
加入到這個命名空間,將成爲全球命名空間中的一員。
>>> import operator
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'operator': <module 'operator' (built-in)>, '__package__': None}
>>> globals()['operator']
<module 'operator' (built-in)>
>>>
其中operator
是一種新類型str
鍵,值是module
類型對象。
進一步使用operator
模塊(比如__abs__
),在當前的命名空間,
>>> globals()['operator']['__abs__']
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
globals()['operator']['__abs__']
TypeError: 'module' object has no attribute '__getitem__'
>>>
它說,operator
模塊不是字典,因爲那裏是名__getitem__
沒有屬性。
但是,從我的應用程序(在運行時)的所有代碼,將由globals()
函數顯示的字典的一部分。
問:
忽略編碼標準, 在JavaScript中,我可以使用的字典方式來寫我的完整代碼,例如,
> window['Array']
function Array() { [native code] }
> window['Array']['length']
1
在蟒蛇,爲什麼全局命名空間的成員(鍵)只被視爲字典成員,但不是它們的值(如operator
對象)?儘管程序的所有後續代碼都是該字典的一部分。
我不完全相信我理解你的問題。僅僅因爲一個模塊(事實上,大多數對象)可以用'vars(module)'表示爲'dict'並不意味着模塊對象_is_是一個字典,並且應該支持像'dict'這樣的項目訪問。你問你爲什麼'foo.bar'和'foo ['bar']'在python中的含義與它們在Javascript中的含義不同? – mgilson
@mgilson在python中,爲什麼'foo.bar'和'foo ['bar']'意思不一樣?儘管這些全部名字都是'globals()'輸出的字典的一部分。 – overexchange
我認爲更好的問題是爲什麼_他們應該是相同的?當我開始學習JS時,我發現它非常令人吃驚......在python中,'foo.bar'在語義上更加僵化。我期望'foo'是一個帶有'bar'屬性的對象。這給我例如類型信息。 'foo ['bar']'是一個不同的陳述,暗示'foo'是一個容器,通常可以包含_anything_。 – mgilson