1.什麼是包
包是模組的一種形式,包的本質就是乙個含有__init__.py檔案的資料夾
2.為什麼要有包
3.如何用包
匯入包就是在導包下的__init__.py
import...
from...import...
主義的問題:
1.包內所有的檔案都是被匯入使用的,而不是被直接執行的
2.包內部模組之間的匯入可以使用絕對匯入(以包的根目錄為基準)與相對匯入(以當前 被匯入模組所在的目錄為基準)推薦使用相對匯入方式
3.當檔案是執行檔案時,無法在該檔案內使用相對匯入的語法
只有在檔案時被當作模組匯入時,該檔案內才能使用相對匯入的語法
4.凡是在匯入時帶點的,點的左邊都必須是乙個包
import aaa.bbb.m3.f3 # 錯誤:aaa、bbb為資料夾,而m3為py檔案(f3為執行函式)
import aaa
# 首次匯入的模組發生三件事
# 1、建立乙個包的命名空間
# 2、執行包下的__init__.py檔案,將執行過程中產生的名字存放於包命名空間中
# (即包命名空間中存放的名字都是來自於__init__.py)
# 3、在當前執行檔案中拿到乙個名字aaa,aaa是指向包的命名空間的
# print(aaa.***)
# print(aaa.yyy)
# aaa.m1.f1()
# aaa.m2.f2()
# aaa.f1()
# aaa.f2()
# print(aaa.bbb)
# print(aaa.bbb.zzz)
# aaa.bbb.m3.f3()
# print(aaa.***)
# print(aaa.yyy)
# aaa.f1()
# aaa.f2()
# print(aaa.bbb)
# aaa.bbb.m3.f3()
import aaa
aaa.bbb.m3.f3()
import logging
# 進行基本的日誌配置
logging.basicconfig(filename='access.log',
ormat='%(asctime)s - %(name)s - %(levelname)s -%(module)s:
% (message)s',
datefmt='%y-%m-%d %h:%m:%s %p',
level=10,
stream=true
)
"""
logging配置
"""import os
import logging.config
# 定義三種日誌輸出格式 開始
standard_format = '%(asctime)s - %(filename)s:%(lineno)d - %(levelname)s - %(message)s'
******_format = '%(asctime)s - %(levelname)s - %(message)s'
id_******_format = '[%(asctime)s] %(message)s'
# log檔案的全路徑
logfile1_path = r'd:\sh_fullstack_s2\day17\a1.log'
logfile2_path = r'd:\sh_fullstack_s2\day17\a2.log'
# log配置字典
logging_dic = ,
'formatter2': ,
},'filters': {},
'handlers': ,
#列印到檔案的日誌,收集info及以上的日誌
'h1': ,
'h2': ,
},'loggers': ,},}
日誌級別遵循原則:自下而上進行匹配 #debug->info->warning->error->critical問題:logging.debug('除錯資訊') #10
logging.info('正常資訊') #20
logging.warning('不好啦著火啦') #30
logging.error('報錯資訊') #40
logging.critical('嚴重錯誤資訊') #50
1.沒有指定日誌級別
2.沒有指定日誌格式
3.只能往螢幕列印,沒有寫入檔案
新問題:
1.不能指定字串編碼
2.只能往檔案中列印
import logging
logging模組包含四種角色: logger,filter,formatter,handler
1.logger:負責產生日誌資訊
logger1=logging.getlogger('交易日誌')
logger2=logging.getlogger('使用者相關')
2.filter:負責篩選日誌
3.formatter:控制日誌輸出格式
formatter1=logging.formatter(
fmt='%(asctime)s:%(name)s:%(levelname)s:%(message)s',
datefmt='%y-%m-%d %x'
)formatter2=logging.formatter(
fmt='%(asctime)s:%(message)s',
datefmt='%y-%m-%d %x'
)4.handler:負責日誌輸出的目標
h1=logging.filehandler(filename='a1.log',encoding='utf-8')
h2=logging.filehandler(filename='a2.log',encoding='utf-8')
sm=logging.streamhandler()
5.繫結logger物件與handler物件
logger1.addhandler(h1)
logger1.addhandler(h2)
logger1.addhandler(sm)
6.繫結handler物件與formatter物件
h1.setformatter(formatter1)
h1.setformatter(formatter1)
h1.setformatter(formatter2)
7.設定日誌級別:可以在兩個關卡進行設定logger與handler
logger1.setlevel(10)
h1.setlevel(10)
h2.setlevel(10)
sm.setlevel(10)
logger1.info('egon借給李傑100w')
logging模組配圖
行列轉換的另一種形式
在實際做專案的時候遇到這樣乙個問題 資料庫表裡儲存了每個火車站每種型別的火車票銷售數量,但是有的火車站可能不銷售動車票或者高鐵票,最終的結果要如圖2所示,不銷售型別的火車票就空出來。本文採用master.dbo.spt values動態生成最大數目的列頭,然後採用case when實現每種型別的火車...
資訊共享的另一種形式 復用
共享的第一種形式是在不同人 不同部門 不同單位之間共享,這是大家經常理解的一種。而另一種共享形式大家可能不很注意,就是資料的縱向共享,歷史資料的使用也是一種共享。如果說前面的共享理解為廣度的共享,那麼後一種是深度共享。一次和搞工程設計專業的人聊天,說起原來非計算機畫圖時代,很辛苦,效率很低,而現在開...
另一種尊重
上中學的時候,有一節課印象非常深刻。老師問我們如果無意闖入乙個房間,發現房間裡有一位女士正在洗澡,這時應該怎麼辦?有同學回答就當什麼也沒看見,退出房間。還有同學回答 說聲對不起!女士。然後退出去。老師笑了笑說,還有更好的答案,那就是 對不起,先生!有一對結婚多年的夫妻,有一次出差在外的妻子有一件急事...