區分py檔案的兩種用途 包的使用 日誌模組

2021-10-14 01:21:05 字數 4416 閱讀 5687

區分py檔案的兩種用途

def f1()

:print

("x"

)print

(__name__) # 執行檔案的時候列印結果為__main__

執行檔案的時候__name__等於__main__

當檔案被匯入使用的時候__name__等於模組名

也就是說下面的if判斷下的函式執行只能被當成執行檔案執行,當成模組匯入是不會執行函式f1的

if __name__ ==

"__main__":f1

()使用if判斷main可以使檔案匯入的時候只匯入**檔案,不執行檔案**。只有run的時候才會執行檔案

包的使用

包的檔案只能被匯入,不能執行

首次匯入包發生的事情

import匯入檔案,會先執行乙個_init_.py檔案,申請乙個包的命名空間,執行_init_.py檔案,將_init_.py檔案執行過程中產生的名字匯入包的命名空間

在當前位置拿到乙個aaaa,指向該命名空間,匯入包就是匯入_init_.py檔案。

向aaaa的檔案要名字,就是向aaaa下的_init_.py檔案要名字

import aaaa

print

(aaaa.x)

print

(aaaa.y)

aaaa.m1.f1(

)import aaaa

aaaa.bbbb.m3.f3(

)

絕對匯入與相對匯入

絕對匯入: 以執行檔案的sys.path為起始點開始匯入,稱之為絕對匯入

優點: 執行檔案與被匯入的模組中都可以使用

缺點: 所有匯入都是以sys.path為起始點,匯入麻煩

相對匯入: 參照當前所在檔案的資料夾為起始開始查詢,稱之為相對匯入

符號:.代表當前所在檔案的檔案加,

..代表上一級資料夾,..

.代表上一級的上一級資料夾

優點: 匯入更加簡單

缺點: 只能在匯入包中的模組時才能使用

總結包的使用

導包就是在導包下的_init_.py檔案

包內部的匯入應該使用相對匯入,相對匯入也只能在包內部使用,而且.

..取上一級不能出包

使用語句中的點代表的是訪問屬性

m.n.x--

-->向m要n,向n要x

而匯入語句中的點代表的是路徑分隔符

import a.b.c--

-->a/b/c,資料夾下的a下有子資料夾b,資料夾b下有子檔案或資料夾c

所以匯入語句中的點的左邊必須是乙個包

日誌模板圖

1、定義三種日誌輸出格式,日誌中可能用到的格式化串如下

%

(name)s logger的名字

%(levelno)s 數字形式的日誌級別

%(levelname)s 文字形式的日誌級別

%(pathname)s 呼叫日誌輸出函式的模組的完整路徑名,可能沒有

%(filename)s 呼叫日誌輸出函式的模組的檔名

%(module)s 呼叫日誌輸出函式的模組名

%(funcname)s 呼叫日誌輸出函式的函式名

%(lineno)d 呼叫日誌輸出函式的語句所在的**行

%(created)f 當前時間,用unix標準的表示時間的浮 點數表示

%(relativecreated)d 輸出日誌資訊時的,自logger建立以 來的毫秒數

%(asctime)s 字串形式的當前時間。預設格式是 「2003-07

-0816:

49:45,

896」。逗號後面的是毫秒

%(thread)d 執行緒id。可能沒有

%(threadname)s 執行緒名。可能沒有

%(process)d 程序id。可能沒有

%(message)s使用者輸出的訊息

2、強調:其中的%(name)s為getlogger時指定的名字

standard_format =

'[%(asctime)s][%(threadname)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \

'[%(levelname)s][%(message)s]'

******_format =

'[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

test_format =

'%(asctime)s] %(message)s'

3、日誌級別

critical =

>

50 error =

>

40 warning =

>

30 info =

>

20 debug =

>

10日誌級別是自下而上的,如果把級別設定成debug,那麼所有的日誌級別都能通過

如果日誌級別設定成error的,那麼只能error和critical日誌級別能通過

配置日誌格式

standard_format =

"%(asctime)s %(filename)s:%(lineno)d %(name)s %(levelname)s %(message)s " # 標準格式

******_format =

"%(asctime)s %(message)s" # 簡單格式

logging_dic =

,'******':,

# 'test':,

}, # 控制日誌格式

'filters'

:, # 過濾器

'handlers':,

'file1':,

'file2':,

# 列印到終端的日誌

'stream':,

}, # 控制日誌輸出的地方

'loggers':,

"":,}

,}# 設定loggers時,如果我們尋找的日誌名稱在loggers中,那麼以找到的名稱為準,如果沒有找到loggers,那麼會以""中的設定為準

呼叫模組設定

import settings

import logging.config # 內建的子模組

def get_logger

(name)

: logging.config.

dictconfig

(settings.logging_dic)

#載入配置,把settings檔案中的logging_dic載入到logging.config.dictconfig中

return logging.

getlogger

(name)

logger1 =

get_logger

("使用者交易"

)logger1.

info

("nana給了吳彥祖1個億"

)logger1.

debug

("除錯日誌"

)logger1.

warning

("警告"

)logger1.

error

("錯誤"

)logger1.

critical

("危機"

)logger1 =

get_logger

("安全相關"

)logger1.

info

("常規"

)logger1.

debug

("除錯日誌"

)logger1.

warning

("警告"

)logger1.

error

("錯誤"

)logger1.

critical

("危機"

)

Python檔案的兩種用途

python檔案總共有兩種用途,一種是執行檔案 另一種是被當做模組匯入。編寫好的乙個python檔案可以有兩種用途 指令碼,乙個檔案就是整個程式,用來被執行 模組,檔案中存放著一堆功能,用來被匯入使用 aaa.py x 1 def f1 print from f1 def f2 print from...

python檔案的兩種用途

在講這個知識點之前我們先來講一下python的兩種檔案 執行檔案 當前執行的檔案 模組檔案 被匯入的檔案 eg from m1 import y m1為模組檔案 print y 執行檔案和模組檔案是相對的 所以他的兩種用途分別是 指令碼。乙個檔案就是整個程式,用來被執行 模組。檔案中存放著一堆功能,...

Python檔案的兩種用途

python檔案總共有兩種用途,一種是執行檔案 另一種是被當做模組匯入。編寫好的乙個python檔案可以有兩種用途 aaa.py x 1 def f1 print from f1 def f2 print from f2 f1 f2 run.py import aaa如果直接執行run.py會直接執...