8.模块定义导入优化time datetime内置模块
生活随笔
收集整理的這篇文章主要介紹了
8.模块定义导入优化time datetime内置模块
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.模塊(module)的定義:本質就是.py的python文件
用來從邏輯上組織python代碼(變量\函數\類\邏輯:實現一個功能)
包(package)的定義:用來從邏輯上組織模塊的,本質就是一個文件夾,里面必須帶有一個__init__.py文件
2.導入方法:
(1) import module_name 導入單個模塊
(2) import module_name,module2_name,....,modulex_name 導入多個模塊,pep8不推薦
以上兩種導入模塊方法,調用時需要用module_name.method_name()調用
(3) from module_name import * 導入module中所有方法變量等 慎用
(4) from module_name import m1,m2,m3
用from導入,調用時不需要用module_name,直接 method_name()就能調用模塊中的方法,如果運行文件內有同名方法,那么模塊的方法會被覆蓋,所以不建議用這種方法
(5) import module_name as another_module_name 模塊定義別名,調用時用 別名.method_name()調用
(6) form module_name import method_name as another_name 把從模塊導入的方法起一個別名,在本文件內好記易用,調用時直接another_name()
3.import本質(路徑搜索和搜索路徑)
導入一個模塊,python解釋器會按照順序搜索模塊名
1.當前目錄
2.如果不在當前目錄,則搜索shell變量pythonpath下的每個目錄
3.如果都找不到,python會查看默認路徑.unix下,默認路徑一般為/usr/local/lib/python/ #一般不涉及到默認路徑
★模塊搜索路徑存儲在sys模塊的sys.path變量中,變量里包含當前目錄和pythonpath和由安裝過程決定的默認目錄,修改sys.path就能修改模塊搜索路徑及順序
注意:
1.自己的文件名不要和已有模塊名重復,否則導致模塊功能無法使用
2.使用form module import method 的時候,如果功能名字重復,調用的是最后導入或定義的功能
3.如果使用import module_name導入的模塊,不用擔心功能名字重復,因為調用的時候需要用 module_name.method_name()
4.模塊名也會被重名變量名代替,所以變量起名時也要注意不要與模塊名重復
導入模塊的本質就是把導入的python文件解釋(運行)一遍 ()
import test test="test.py all code"
frome test import name name="code"
sys.path 包含尋找模塊或包的所有路徑,是個列表,可以在這個列表中添加路徑
示例:
import sys,os
os.path.abspath(__file__) #獲取當前文件的絕對路徑
os.path.dirname(os.path.abspath(__file__)) #獲取當前文件所在文件夾的絕對路徑
file_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #獲取當前文件所在的文件夾的父文件夾的絕對路徑
sys.path.insert(0,file_path) #按照需求找好要導入的文件夾,插入到sys.path的最前面
__all__(__all__是個列表)
如果一個模塊文件中有__all__變量,當使用from xxx import *導入時,只能導入這個列表中的元素,所以可以用__all__列表來控制import *時被導入的功能
__all__ = ["方法名1","方法名2"]
包(package)
包將有聯系的模塊組織在一起,即放到同一文件夾下,并且文件夾內有__init__.py文件,name這個文件夾就稱為包
__init__,py控制包的導入行為,導入包的本質就是執行該包下的__init__.py文件
導入包
方法1 導入:import 包名.模塊名 調用: 包名.模塊名.目標
方法2 導入:from 包名 import * 調用: 模塊名.目標 (注意:必須在__init__.py中添加__all__=[],控制允許導入的模塊列表
4.導入優化
import 模塊名 每次使用都得查找模塊名,執行效率低
可以用from 模塊名 import 目標 直接使用目標,省略
5.模塊的分類
1.標準庫(內置模塊):如time,sys等
2.開源模塊(第三方模塊):
3.自定義模塊
====================================================
time模塊
表示時間方式:
1.時間戳:time.time()獲取當前的時間戳,返回一個浮點數為1970.1.1:00:00到現在的秒數
2.格式化的時間字符串
3.元組(struct_time)共九個元素.由于python的time模塊實現主要調用C庫,所以各個平臺可能有所不同
time.localtime() #返回time.struct_time(tm_year,tm_mon,tm_mday,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst)最后一個表示是否夏令時
返回的struct_time,可以用元組里面的各鍵取到各屬性值如:x=time.localtime x.tm_year #取到年
中國時區為UTC+8,比標準時間早8小時
time模塊的方法:
time.time() time.time()獲取當前的時間戳,返回一個浮點數為1970.1.1:00:00到現在的秒數
time.sleep(x) 延遲x秒時間
time.gmtime(seconds) 傳入一個時間戳,返回utc的struct_time,如果不加參數則返回當前utc標準時間的struct_time,
★time.localtime(seconds) 傳入一個時間戳,返回當前時區的struct_time,不加參數則轉換當前時間戳,返回一個本時區的struct_time
time.mktime(struct_time) 傳入一個時間元組,返回一個時間戳
time.strftime("%Y-%m",struct_time) 傳入自定義格式化字符串和元組,返回自定義時間字符串,不加元組則返回當前時間的字符串
%Y(年) %m(數字月) %d(日) %H(時) %M(分) %S(秒) %z(時區) %a(三字母簡寫星期幾) %A(星期幾全名)
time.strftime("%Y-%m-%d %H:%M:%S %A") # "2020-1-29 16:17:32 Wednesday"
time.strptime("2020-1-29 16:17:32 Wednesday","%Y-%m-%d %H:%M:%S %A") strftime的反向操作,返回struct_time
第一個參數放時間字符串,第二個參數放表示格式字符串,第一個參數必填,第二個參數省略則用默認('%a %b %d %H:%M:%S %Y'),這時候
第一個參數的字符串必須按照默認格式編寫
也可以用來得到一個符合需求的struct_time
%a - 簡寫的星期幾
%A - 完整的星期幾
%b - 縮寫的月份名稱
%B - 完整的月份名稱
%c - 首選日期和時間表示
%C - 世紀值(年份除以100,范圍從00到99)
%d - 該月的第幾天(01?31)
%D - 類似 %m/%d/%y
%e - 該月的一天(1?31)
%g - 類似于%G,但是沒有世紀
%G - 對應于ISO周數4位數的年份(參見%V)
%h - 類似于 %b
%H - 小時,使用24小時制(00?23)
%I - 小時,使用12小時制(01?12)
%j - 一年中的哪一天(001?366)
%m - 月份(01?12)
%M - 分鐘
%n - 換行符
%p - 根據給定的時間值am或pm
%r - 時間在上午和下午的符號:am/pm
%R - 時間以24小時制
%S - 秒
%t - 制表符
%T - 當前時間,等于 %H:%M:%S
%u - 工作日為數字(1到7),星期一= 1。警告:在Sun Solaris上周日=1
%U - 當年的周數,第一個星期日作為第一周的第一天
%V - 本年度ISO 8601的周數(01到53),其中,第1周是在本年度至少4天的第一個星期,星期一作為一周的第一天
%W - 當年的周數,與第一個星期一作為第一周的第一天
%w - 星期為一個小數,星期日=0
%x - 沒有時間的日期表示
%X - 無日期首選的時間表示
%y - 一年無世紀(范圍從00到99)
%Y - 今年,包括世紀
%Z or %z - 時區或名稱或縮寫
%% -文字%字符
time.asctime([struct_time]) 傳入一個struct_time,返回一個python默認的日期時間字符串('%a %b %d %H:%M:%S %Y'),如果不傳參數,則默認當前的時間元組
time.ctime(seconds) 傳入一個時間戳,其他同上
========================================================
datatime 基于time模塊的高層封裝
日期時間相關 具體參考https://blog.csdn.net/cmzsteven/article/details/64906245
6.測試模塊
模塊完成后,在模塊內寫一段測試代碼,測試模塊能否完成我們的需求
# 只在當前文件中運行測試代碼,在其他導入的文件內不符合條件,不執行測試代碼
if __name__ == '__main__':
測試代碼
# __name__是本文件的python默認的標識符,如果__name__使用的位置是在自身文件內,那么它的值就是'__main__'
# 如果不是在自身文件內,那么它的值就是自身文件名
#上面的if代碼意思是:如果自身文件被運行,就符合if條件,就運行測試代碼,如果在被導入的文件內運行,那么__name__ == 模塊名
#不符合條件,就不運行測試代碼
總結
以上是生活随笔為你收集整理的8.模块定义导入优化time datetime内置模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用QtGraphicalEffects
- 下一篇: Kotlin学习记录2