Python模塊 百日築基之得氣

来源:https://www.cnblogs.com/caesar-id/archive/2019/02/14/10381170.html
-Advertisement-
Play Games

模塊:模塊是一系列常用功能的集合體,一個py文件就是一個模塊1、從文件級別組織程式,更方便管理隨著程式的發展,功能越來越多,為了方便管理,我們通常將程式分成一個個的文件,這樣做程式的結構更清晰,方便管理。這時我們不僅僅可以把這些文件當做腳本去執行,還可以把他們當做模塊來導入到其他的模塊中,實現了功能 ...


模塊:

模塊是一系列常用功能的集合體,一個py文件就是一個模塊。

一、模塊的作用:

1、從文件級別組織程式,方便管理,隨著程式的發展,功能越來越多,我們通常將程式分成一個個py文件,這樣做程式的結構更清晰,方便管理。這時我們不僅可以把這些文件當做腳本去執行,還可以把他們當做模塊來導入到其他的模塊中,實現了功能的重覆利用。

2、拿來主義,提升開發效率

同樣的原理,我們也可以下載別人寫好的模塊然後導入到自己的項目中使用,這種拿來主義,可以極大地提升我們的開發效率,避免重覆造輪子。每個模塊都是一個獨立的名稱空間,定義在這個模塊中的函數,把這個模塊的名稱空間當做全局名稱空間,這樣我們在編寫自己的模塊時,就不用擔心我們定義在自己模塊中全局變數會在被導入時,與使用者的全局變數衝突。

二、導入模塊:

import 模塊1,模塊2,模塊3    

可以用import以逗號分隔的方式導入多個模塊,但是為了代碼的可讀性不建議這麼寫,建議分開寫。如:

import  模塊1

import  模塊2

import 模塊3

多行導入,易於閱讀,易於編輯,易於搜索,易於維護。

import 導入過來的功能都需要使用模塊點的方法執行。如下

import time
print(time.localtime())  # 以模塊名time.locatime()的方式調用

import 模塊名 as 別名 為模塊起別名,如下:

import time as datetime_  # 為模塊起別名
print(datetime_.localtime())

import 導入的是整個模塊,當我們知道要導入這個模塊的某個功能時,我們可以直接導入該模塊下的某個功能,而不需要將該模塊下的所有功能全部導入。

這時我們可以使用:from 模塊名 import 函數名這樣就可以導出該模塊下的函數了,而不用導入整個模塊。如下:

from time import localtime  # 導出time模塊下的localtime函數
print(localtime())  # 這樣就不需要使用模塊名.的方式調用函數了

from 模塊 import 函數1,函數2,函數3  #也可以導入多個函數,如下:

from time import localtime,strftime,time  # 導出time模塊下的多個函數
ntime = localtime(time())
print(strftime("%Y-%m-%d %H:%M:%S",ntime))

from 模塊名 import 函數名 as 別名:函數名 as 別名 可以更改多個。

from time import localtime as localtime_,time as time_ # 起別名
print(localtime_(time_()))

from 模塊名 import * 導出模塊下所有函數,不推薦使用。

from time import *  # 導出time模塊下的所有函數
print(localtime(time()))

小結:以time模塊為例。

1、import  time 可以導出time模塊下的所有函數,在使用這些函數時需要使用 time.函數名 的方式來調用函數。

     from  time  import  * 導出time模塊下的所有函數,直接使用函數名的方式來調用,不使用模塊名.函數名的方式調用。

2、import  模塊1,模塊2,模塊3 雖然可以這樣寫,但是不建議這麼寫,這麼寫可讀性不是很好,也不利於修改和查找。同理

     from  模塊名  import 函數名1,函數名2 這麼寫也是不可取的。

3、import  模塊名  as  別名  給模塊起別名

      from  模塊名  import  函數名  as  別名 給函數起別名

4、import  模塊名  as  別名,模塊名2  as  別名  可以這麼寫

     from  模塊名  import 函數名  別名,函數名  as 別名 雖然可以這麼寫但是我們儘量不要這麼寫。

擴展知識:

__all__ = ['可以被導入的內容'] 用這種方式強制from 模塊名 import *只導出指定的內容。

如下圖所示:__all__  =  ["fun"]  只允許import * 導出fun()函數,而不允許調用fun_2()函數。

if __name__ == '__main__'的意思是,當.py文件被直接運行時,if __name__ == '__main__'之下的代碼塊將被運行。

當.py文件以模塊形式被導入時,if __name__ == '__main__'之下的代碼塊不被運行。多用於測試模塊內函數是否運行正確。

以上圖可以看出我們導入模塊後,fun_2()被調用了,但if __name__ == '__main__'的代碼沒有被執行。所以,以後我們在寫模塊時,如果要測試哪個函數最好是在

if __name__ == '__main__'里進行,以免測試後忘記註釋或刪除調用,導致在引用該模塊時執行裡面的函數。

三、模塊的搜索順序:

記憶體中已經載入的模塊 - > 內置模塊 - > sys.path路徑中包含的模塊。

下麵是列印當前Python環境下的路徑:

import sys
print(sys.path) # 列印當前python環境變數

如果要添加其它盤符中的模塊,需要把模塊的路徑載入到Python的環境中去。

import sys
sys.path.insert(0,r"模塊路徑")  # 將一個模塊路徑插入到當前Python環境變數
print(sys.path) # 列印當前python環境變數

四、編譯Python文件

為了提高載入模塊的速度,提高的是載入速度而絕非運行速度。python解釋器會在__pycache__目錄中下緩存每個模塊編譯後的版本,格式為:module.version.pyc。如下圖所示

 

這種命名規範保證了編譯後的結果多版本共存,Python檢查源文件的修改時間與編譯的版本進行對比,如果過期就需要重新編譯。這是完全自動的過程。並且編譯的模塊是平臺獨立的,所以相同的庫可以在不同的架構的系統之間共用,即pyc是一種跨平臺的位元組碼,類似於JAVA或.NET。是由python虛擬機來執行的,但是pyc的內容跟python的版本相關,不同的版本編譯後的pyc文件不同,2.5編譯的pyc文件不能到3.5上執行,並且pyc文件是可以反編譯的,因而它的出現僅僅是用來提升模塊的載入速度的,不是用來加密的。

小結:

1、模塊名區分大小寫,fun.py與FUN.py代表的是兩個模塊。

2、在速度上從.pyc文件中讀指令來執行不會比從.py文件中讀指令執行更快,只有在模塊被載入時,.pyc文件才是更快的 。

3、只有使用import語句時才將文件自動編譯為.pyc文件,在命令行或標準輸入中指定運行腳本則不會生成這類文件。

五、time模塊

在電腦中時間共有三種形式:

1、時間戳:通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行“type(time.time())”,返回的是float類型。

2、格式化字元串時間(Format String):人類能讀懂的時間如:2018-1-1 14:10

3、結構化時間:元組(struct_time) struct_time元組共有9個元素(年,月,日,時,分,秒,一年中第幾周,一年中第幾天等)。如下圖所示:

tm_year(年)

如:2018(年)

tm_mon(月)

1 - 12

tm_mday(日)

1 - 31

tm_hour(時)

0 - 23

tm_min(分)

0 - 59

tm_sec(秒)

0 - 61

tm_wday(周)

0 - 6(周一是0)

tm_yday(一年中的第幾天)

1 - 366(天)

tm_isdst(是否是夏令時)

0不是,1是,-1未知

 

python中日期,時間格式化:

 

Directive

Meaning

%a

簡寫周(如周一(Monday):簡寫成Mon)

%A

周的全寫(如周一(Monday):Monday)

%b

月的簡寫(如2月(February):簡寫Feb)

%B

月的全寫(如2月(February):February)

%c

預設顯示(如當前日期:Mon Feb 18 15:03:38 2019).

%d

一個月的第幾天(1 - 31)

%H

時 (0,24)

%I

時(1,12)

%j

一年中的第幾天(1,366)

%m

月(1,12)

%M

分(0,59)

%p

對應AM/PM

%S

秒(0,61)

%U

一年中第幾周 (0,53)

%w

一周的第幾天 (0,6)0是周一

%W

一年中第幾周 (0,53)與%U類似

%x

預設年月日如:02/18/19(月/日/年)

%X

預設時分秒如:15:23:46(時:分:秒)

%y

去掉世紀年份(0,99)如:2019顯示19

%Y

完整的年份

%z

列印時區

%Z

時區(如果不存在列印空)

%%

列印字元%

time模塊的時間轉換:

我們知道了time模塊時間有三種表現形式:時間戳、結構化時間、字元串時間。我們可以根據下麵這張圖進行轉換。


時間戳到字元串時間的轉換:

import time
nTime = time.time()  # 獲取時間戳
structTime = time.localtime(nTime)  # 將時間戳轉換結構化時間
strTime = time.strftime("%Y-%m-%d %H:%M:%S",structTime)  # 將結構化時間轉換成字元串時間
print("字元串時間:",strTime)  # 列印字元串時間

# 列印內容如下
字元串時間: 2019-02-18 15:40:17

字元串時間回退到時間戳:

import time
strTime = "2019-02-18 15:40:17"
print("字元串時間:",strTime)
struct_Time = time.strptime(strTime,"%Y-%m-%d %H:%M:%S") # 將字元串時間轉換成結構化時間
nTime = time.mktime(struct_Time)  # 將結構化時間轉換成時間戳
print("時間戳:",nTime)

# 列印內容如下
字元串時間: 2019-02-18 15:40:17
時間戳: 1550475617.0

六、datetime模塊

列印當前時間:

from datetime import datetime
print(datetime.now(),type(datetime.now())) # 獲取當前時間

# 列印內容如下
2019-02-18 15:47:38.337810 <class 'datetime.datetime'>

指定日期,時間並創建一個datetime的類:

from datetime import datetime
dt = datetime(2019,2,18,15,50,0)  # 指定日期,時間
print(type(dt),dt)

# 列印內容如下
<class 'datetime.datetime'> 2019-02-18 15:50:00

datetime類轉換時間戳:

from datetime import datetime
dt = datetime.now()  # 獲取時間類
new_timestamp = dt.timestamp()  # 將時間類轉換成時間戳
print(new_timestamp)

# 列印內容如下
1550476362.400201

將時間戳轉換成字元串時間:

from datetime import datetime
nTime = datetime.timestamp(datetime.now()) # 時間戳
print(datetime.fromtimestamp(nTime))  # 將時間戳轉換成類

# 列印內容如下
2019-02-18 15:53:50.835115

將str轉換成datetime:

from datetime import datetime
nTime = datetime.strptime("2019-1-15","%Y-%m-%d")  # 將字元串時間轉換成時間類
print(type(nTime),nTime)

# 列印內容如下
<class 'datetime.datetime'> 2019-01-15 00:00:00

將datetime轉換成str:

from datetime import datetime
nTime = datetime.now()  # 獲取時間類
strTime = datetime.strftime(nTime,"%Y-%m-%d %H:%M:%S")  # 將時間類轉換成字元串
print(type(strTime),strTime)

# 列印時間如下
<class 'str'> 2019-02-18 15:56:13

datetime的加減法:需要使用timedelta類。

from datetime import datetime,timedelta
nTime = datetime.now()  # 系統當前時間
print("當前時間:",nTime)
otherTime = nTime - timedelta(days=1)  # 當前時間減去1天
print("減去一天後的時間:",otherTime)

# 列印內容如下
當前時間: 2019-02-18 15:57:48.071684
減去一天後的時間: 2019-02-17 15:57:48.071684

timedelta可選參數,就不一一舉例了,有興趣的朋友可以自己嘗試。
days: float = ...,
seconds: float = ...,
microseconds: float = ...,
milliseconds: float = ...,
minutes: float = ...,
hours: float = ...,
weeks: float = ..., *,
fold: int = ..


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題意 "題目鏈接" Sol 這個東西的學名應該叫“閔可夫斯基和”。就是合併兩個凸包 首先我們先分別求出給出的兩個多邊形的凸包。合併的時候直接拿個雙指針掃一下,每次選最凸的點就行了。 複雜度$O(nlogn + n)$ cpp include define LL long long // define ...
  • 故事的開篇 把時鐘撥回到9年前,那是2010年的10月份,李大胖入職了新公司,在公司本部呆了一個多月,就被髮往客戶單位進行駐場開發。 公司給客戶做的系統,需要不斷的二次開發和維護,所以直接去客戶單位比較利於工作的進行。 一個周五的下午,經理把我叫到辦公室,說到:“下周你就去客戶現場吧,我們有些同事在 ...
  • 對於golang一直存有覬覦之心,但一直苦於沒有下定決心去學習研究,最近開始接觸golang。就我個人來說,學習golang的原動力是因為想要站在java語言之外來審視java和其它語言的區別,再就是想瞻仰一下如此NB的語言。年前就想在2019年做一件事情,希望能從各個細節處做一次java和gola ...
  • python裝飾器的作用是在不改變原有函數的基礎上,對函數的功能進行增加或者修改。 裝飾器語法是python語言更加優美且避免很多繁瑣的事情,flask中配置路由的方式便是裝飾器。 首先python中一個函數也是可以當做一個對象進行傳遞的。 輸出結果為 上面代碼相當於 帶參數的裝飾器 結果: 相當於 ...
  • Spring MVC從接收請求到返迴響應的流程 客戶端發起request請求,DispatcherServlet接收用戶請求。 DispatcherServlet請求HandlerMapping查找用戶請求對應的Handler(處理器/控制器)。 HandlerMapping將查找到的Handler ...
  • 以下是安裝語句: 然而編寫依賴 的程式,發現無法調用 的`CMake`文件,錯誤提示如下所示: 在 的`issue CMake`安裝時,如果第三方依賴在未指明的情況下,預設均通過 源碼安裝 ,如果無法通過 源碼安裝 ,則無法生成 gRPCTargets.cmake 文件): 因此需要指定第三方依賴是 ...
  • 本文包括組件的下載以及配置,持續更新中…… 1 JDK 官網:https://www.oracle.com 下載:https://www.oracle.com/technetwork/java/javase/downloads/index.html 驗證安裝成功: 2 Python 官網:https ...
  • 日期運算代碼如下: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...