python之8核心知識點

2021-10-02 15:25:45 字數 4584 閱讀 5273

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。根據以...