python的namespace
① python命名空間問題
createplot.ax1
是表示:氏慧
ax1
是函數
createplot
的一個屬性,這個可以在函數裡面定義也可以在函數定義後加入也可以
example:
def
fun():
fun.x
=1
當你在python的命令窗口下,運殲慶答行一次fun()後,x
就是
fun()的一個屬性,你在命令窗口下輸入
fun.x
後面會顯示
1
也差卜可以
在
函數定義完後加入
屬性
如
fun.y
=
2,在使用
dir(fun),你就會發現fun有
x,y
這兩個屬性
② python 中regular package 和 namesapce package的區別
regular package就是指常規模塊,一般就是指python內置模塊例如os,或者使用第三方的插件導入的模塊,例如操作excel的xlrd.沒有所處環境的區別.
namespace package 一般是指用戶自己定義的,為了避免重名沖突,而進行劃分的一種方式.也就是為了實現,在不同環境下,導入不同的模塊,但是為了方便切換,在不同模塊下具有相同變數名稱.常用的情況如,在測試環境和生產環境下,導入定義資料庫配置的全局變數,MYsql_SETTINGS,但是在不同環境下,它所對應的mysql資料庫的配置時不同的.這時就可以通過namespace package來實現.將配置和代碼進行解耦.
實現方式可以有:
不同環境下設置環境變數
程序加入運行參數,導入不同路徑下的配置文件
等等
歡迎補充
③ namespace怎麼讀
"namespace" 是一個編程術語,表示在程序中定義一些符號的作用域。在 C++ 和 C# 中,namespace 用來避免命名沖突。在 Python 中,通過 mole 或 package 也可以實現類似的功能。
在編程中,我們可以使用 namespace 來定義自己的命名空間,並將自己的類、函數等放在其中。這樣可以有效避免和其他庫或代碼的命名沖突,提高代碼的可維護性和可復用性。
④ 什麼是命名空間
namespace即「命名空間」,也稱「名稱空間」 、」名字空間」。VS.NET中的各種語言使用的一種代碼組織的形式 通過名稱空間來分類,區別不同的代碼功能 同時也是VS.NET中所有類的完全名稱的一部分。
通常來臘帆說,命名空間是唯一識別的一套名字,這樣當對象來自不同的地方但是名字相同的時候就不會含糊不清了。使用擴展標記語言的時候,XML的命名空間是所有元素類別和屬性的集合。元素類別和屬性的名字是可以通過唯一XML命名空間來唯一。
在XML里,任何元素類別或者屬性因此分為兩部分名字,一個是命名空間里的名字另一個是它的本地名。在XML里,命名空間通常是一個統一資源識別符(URI)的名字。而URI只當名字用。主要目的是為了避免名字的沖突。
(4)python的namespace擴展閱讀:
由於namespace的概念,使用C++標准程序庫的任何標識符時,可以有三種選擇:
1、直接指定標識符。例如std::ostream而不是ostream。完整語句如下: std::cout <<輪蘆雹 std::hex << 3.4 << std::endl;
2、使用using關鍵字。 using std::cout; using std::endl; using std::cin; 以上程序可以寫成 cout << std::hex << 3.4 << endl;
3、最方便的就是使用using namespace std; 例如: using namespace std;這樣命名空間std內定義的所有標識符都有效(曝光)。就好像它們被聲明為全局變數一樣嘩虛。
⑤ python命名空間是什麼
在Python中,所有的名字都存在一個空間中,它們在該空間中存在和被操作——這就是命名空間。它就像一個盒子,每一個變數名字都對應裝著一個對象。當查詢變數的時候,會從該盒子裡面找到相應的對象。
【定義】
名稱到對象的映射。命名空間是一個字典的實現,鍵為變數名,值是變數對應的值。各個命名空間是獨立沒有關系的,一個命名空間中不能有重名,但是不同的命名空間可以重名而沒有任何影響。
相關推薦:《Python教程》
【分類】
python程序執行期間會有2個或3個活動的命名空間(函數調用時有3個,函數調用結束後2個)。按照變數定義的位置,可以劃分為以下3類:
Local,局部命名空間,每個函數所擁有的命名空間,記錄了函數中定義的所有變數,包括函數的入參、內部定義的局部變數。
Global,全局命名空間,每個模塊載入執行時創建的,記錄了模塊中定義的變數,包括模塊中定義的函數、類、其他導入的模塊、模塊級的變數與常量。
Built-in,python自帶的內建命名空間,任何模塊均可以訪問,放著內置的函數和異常。
【生命周期】
Local(局部命名空間)在函數被調用時才被創建,但函數返回結果或拋出異常時被刪除。(每一個遞歸函數都擁有自己的命名空間)。
Global(全局命名空間)在模塊被載入時創建,通常一直保留直到python解釋器退出。
Built-in(內建命名空間)在python解釋器啟動時創建,一直保留直到解釋器退出。
各命名空間創建順序:python解釋器啟動 ->創建內建命名空間 -> 載入模塊 -> 創建全局命名空間 ->函數被調用 ->創建局部命名空間
各命名空間銷毀順序:函數調用結束 -> 銷毀函數對應的局部命名空間 -> python虛擬機(解釋器)退出 ->銷毀全局命名空間 ->銷毀內建命名空間
python解釋器載入階段會創建出內建命名空間、模塊的全局命名空間,局部命名空間是在運行階段函數被調用時動態創建出來的,函數調用結束動態的銷毀的。
⑥ Python lxml所有與多個命名空間問題,怎麼解決
有如下xml
<A xmlns="http://This/is/a/namespace">
<B>dataB1</B>
<B>dataB2</B>
<B>
<C>dataC</C>
</B>
</A>
其中的xmlns屬性表示的是該xml的默認命名空間,該命名空間必須是一個url形式
查看xml的tag
#encoding=utf8
from lxml import etree
str_xml = """
<A xmlns="http://This/is/a/namespace">
<B>dataB1</B>
<B>dataB2</B>
<B>
<C>dataC</C>
</B>
</A>
"""
xml = etree.fromstring(str_xml)
for node in xml.iter():
print node.tag
結果為:
{http://This/is/a/namespace}A
{http://This/is/a/namespace}B
{http://This/is/a/namespace}B
{http://This/is/a/namespace}B
{http://This/is/a/namespace}C
可以看到,跟普通xml的tag相比每個tag前面都多出了一個命名空間
獲取命名空間 .nsmap
from lxml import etree
str_xml = """
<A xmlns="http://This/is/a/namespace">
<B>dataB1</B>
<B>dataB2</B>
<B>
<C>dataC</C>
</B>
</A>
"""
xml = etree.fromstring(str_xml)
ns = xml.nsmap
print ns
print ns[None]
結果
{None: 'http://This/is/a/namespace'}
http://This/is/a/namespace
ns[None]獲取的是默認命名空間,ns會顯示所有的命名空間
獲取有命名空間的節點內容
from lxml import etree
str_xml = """
<A xmlns="http://This/is/a/namespace">
<B>dataB1</B>
<B>dataB2</B>
<B>
<C>dataC</C>
</B>
</A>
"""
xml = etree.fromstring(str_xml)
ns = xml.nsmap[None]
ns = "{%s}" % ns
for item in xml.findall("{0}B/{0}C".format(ns)): #不能用xpath會出錯
print item.text
結果
dataC
注意,在查找節點時,每一級節點都需要加上命名空間。而且測試時發現,findall可以正常查找到信息,而xpath會報錯。
獲取帶命名空間節點的屬性值
from lxml import etree
str_xml = """
<A xmlns="http://This/is/a/namespace">
<B b="123">dataB1</B>
<B>dataB2</B>
<B>
<C>dataC</C>
</B>
</A>
"""
xml = etree.fromstring(str_xml)
ns = xml.nsmap[None]
ns = "{%s}" % ns
item = xml.find(ns+"B")
print item.get("b")
print item.text
結果
123
dataB1
可以看到,獲取屬性時,不需要加命名空間,直接獲取即可
⑦ python運維開發工程師面試常見問題有哪些
面試python運維開發工程師每家公司對專業知識的考察側重點是不一樣的,下面給你整理了一些,希望能幫助到你!
python
1、python是強類型還是弱類型的語言
2、python的動態性體現在哪
3、python的namespace:四種;len()等函數的命名空間
4、range和xrange的區別,談到了迭代器
5、於是問怎麼實現迭代器,然後又問了生成器,yield語句
6、將list的中的一萬條字元串合成一條字元串的方法
7、python多線程(g il)
8、python的三目運算符有嗎? 怎麼用一行代碼實現三目運算
linux
1、問linux命令
2、top和ps在進程佔有資源率的統計方式有什麼不同
3、然後扯到了頁表,內存管理,TLB
5、linux文件系統:inode,inode存儲了哪些東西,目錄名,文件名存在哪裡
⑧ Python中的命名空間是什麼
編程語言中的命名空間簡單來說就是一些詞的集合,
同一個詞在不同的命名空間會有不同的意思,
用一個詞來做例子
「手紙」在中文這個命名空間是廁紙的意思,
而在日文這個命名空間是信的意思。
這個算是過分簡化的說明了。
⑨ Python之禪中的namespace怎麼理解
什麼時候分別用一、二、三是最佳實踐?——這個問題沒有特別的規定,只是看個人編碼風格和習慣。
這三種的定義你應該明白,二和三是一樣的,只是三用了一個通配符導入了模塊中所有名字而已。
命名空間的本質就是採用更長的字元串來區分不同模塊下可能同名的函數/類,然後為了減少寫函數名/類名時候的麻煩,發明的一種可以認為是語法糖的東西。
在一個函數的 scope 的中再定義函數——我本人不常用這種做法,因為我是學C語言出身,一個函數的scope中再定義一個函數,我看到的唯一好處就是可以隱藏一些僅僅由這個函數使用而其他函數不使用的一些小函數,而且不用再傳參數:
def fun(a, b):
def calc():
return a * b - a / b
if a < b:
return calc()
if a >= b:
return 1 + calc()
calc函數不用傳參,方便使用,而且對外是隱藏的,這么奇葩的函數在fun外也沒有人用,放到fun內部是比較合適的。當然,也不絕對,你可以愛怎麼寫怎麼寫。
⑩ 各位大神,這是什麼軟體實現的python的namespace的樹啊啊啊啊
受不羨猛閉了了,居然有人睜眼知前說瞎兄裂話就為得分?跟matlab有個屁的關系呀。別人都寫了是用的wxPython是wxWidget(以前也叫wxWindows)的python綁定。
至於實現的層次結構,應該是利用的python的自省功能