8.1 python工程組織結構之包、模組等的概念
8.2 命名空間
msg =
"msg"
defmy_func()
: name =
" wiggin "
deffunc_son()
: name =
"xdclass "
# 此處的name變數,覆蓋了父函式的name變數
print
(name)
# 呼叫內部函式
func_son(
)print
(name)
my_func(
)
a =
1def
my_func
(str):
if a ==1:
print
(str
) a =
24my_func(
"file"
)
修改如下:
a =
1def
my_func
(str):
global a
if a ==1:
print
(str
) a =
24my_func(
"file"
)print
(a)
def
my_func()
: a =
1 b =
2print
(locals()
)my_func(
)
輸出:
2、全域性命名空間的訪問
全域性 (模組級別)命名空間可以通過globals()來訪問。
a =
1b =
2print
(globals()
)
輸出:
,『builtins』: ,
『file』: 『c:/users/wiggin/desktop/xdclass/chapter12/class2.py』,
『cached』: none,
『a』: 1, 『b』: 2
}3、locals 與 globals 之間的區別
locals 是唯讀的,但globals是可讀寫的
def
my_func()
: x =
123print
(locals()
)locals()
["x"]=
456print
("x="
, x)
y =123
my_func(
)globals()
["y"]=
111print
("y="
, y)
輸出:
x=123
y=111
8.3 匯入模組
import module_name
import class2
print
(class2.a)
import module_name as alias
# 匯入模組並重命名為xd
import xdclass_python_chapter12_class3 as xd
print
(xd.name)
import匯入時,
查詢乙個模組,如果有必要還會載入並初始化模組。
在區域性命名空間中為 import 語句發生位置所處的作用域定義乙個或多個名稱。
當乙個模組首次被匯入時,python 會搜尋該模組,如果找到就建立乙個 module 物件並初始化它。 如果指定名稱的模組未找到,則會引發 modulenotfounderror。 當發起呼叫匯入機制時,python 會實現多種策略來搜尋指定名稱的模組。
特別注意:當模組首次被匯入時,會執行模組裡面的**
使用importlib模組進行模組的匯入,基本語法如下
import importlib
importlib.import_module(「module_name」)
import importlib
module = importlib.import_module(
"xdclass_python_chapter12_class3"
)
如果想匯入另乙個包中的模組,可以使用如下語法:
from package import module
如果想匯入多層包中的模組,可以使用如下語法:
from package.son import module
8.4 匯入變數
from module import variable
from class2 import a
print
(a)
別注意:當模組首次被匯入時,會執行模組裡面的**
如class2中的內容為:
a =
1111
print
("hello world"
)
執行結果會先輸出hello world,在列印a值
如果要匯入多個變數,可用逗號隔開
如果要匯入大量變數,可使用*號匯入
from class2 import a, b
from class2 import
*
8.5 導包機制例如
from class5_import import a
模組 class5.py
from class2 import a
b =11
print
(a)
模組 class5_import.py
from class5 import b
a =1
執行過程如下:
1、執行class5.py中的from class5_import import a,由於是執行的python class5.py,所以在sys.modules中並沒有存在,首先為b.py建立乙個module物件(),注意,這時建立的這個module物件是空的,裡邊啥也沒有,在python內部建立了這個module物件之後,就會解析執行class5_import.py,其目的是填充這個dict。
2、執行class5_import.py中的 from class5 import b,在執行class5_import.py的過程中,會碰到這一句,首先檢查sys.modules這個module快取中是否已經存在了,由於這時快取還沒有快取,所以類似的,python內部會為class5.py建立乙個module物件(),然後,同樣地,執行class5.py中的語句
3、再次執行class5.py中的from class5_import import a,這時,由於在第1步時,建立的物件已經快取在了sys.modules中,所以直接就得到了,但是,注意,從整個過程來看,我們知道,這時還是乙個空的物件,裡面啥也沒有,所以從這個module中獲得符號"a"的操作就會丟擲異常。如果這裡只是import class5_import,由於"class5_import"這個符號在sys.modules中已經存在,所以是不會丟擲異常的。
8.6 說說_init_.py的作用及用法
說說_init_.py的作用:
我們使用from package import * 會報錯誤,如果想使用該語法不報錯,可以在__init__.py中定義要匯入的模組
我們可以在__init__.py檔案中,使用__all__ = [『module_name1』,『module_name2』]定義號匹配時要匯入的模組,之後再匯入的時候,就可以使用萬用字元進行模糊匯入
當我們的許多模組中,都需要匯入某些公共的模組,此時,可以在__init__.py中進行匯入,之後直接匯入該包即可
8.7 _all_和_name_的作用及用法
__all__的作用及其用法:
__all__是list的結構
__name__的作用及其用法:
def
my_fun()
:if __name__ ==
"__main__"
:print
("this is main"
)my_fun(
)
Eureka核心知識點
一 eureka特性 1.當註冊中心掛了,客戶端之間依然可以通過原有的登錄檔進行呼叫 註冊中心重啟後,客戶端會繼續註冊進來 2.當服務提供者掛了,在關閉自我保護的情況下,註冊中心在規定時間 預設是60s 內移除客戶端 關閉eureka註冊中心的自我保護模式,配置如下 eureka server en...
Eureka核心知識點
一 eureka特性 1.當註冊中心掛了,客戶端之間依然可以通過原有的登錄檔進行呼叫 註冊中心重啟後,客戶端會繼續註冊進來 2.當服務提供者掛了,在關閉自我保護的情況下,註冊中心在規定時間 預設是60s 內移除客戶端 關閉eureka註冊中心的自我保護模式,配置如下 eureka server en...
Redis核心知識點
快照間隔內的資料會丟失 如果資料量很大,儲存快照時間會比較長 同步選項 always 每個命令同步 everysec 每秒同步一次 no 系統決定 redis會把設定了過期時間的key放在單獨的字典中,定時遍歷來刪除到期的key。為了保證不會迴圈過度,導致卡頓,掃瞄時間上限預設不超過25ms。根據以...