區分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會直接執...