Python基礎-22常用內置模塊

来源:https://www.cnblogs.com/surpassme/archive/2020/06/08/13069047.html
-Advertisement-
Play Games

22. 常用內置模塊 22.1 random模塊 隨機數據可以用於數學、測試、安全、演算法等領域中。內置random模塊,可用於生成偽隨機數。 真正意義上的隨機數或隨機事件是在某次產生過程中是按照實驗過程中表現的分佈概率隨機產生的,其結果是不可預測的,不可見的。而電腦中的隨機函數是按一定的演算法模擬產 ...


22. 常用內置模塊

22.1 random模塊

    隨機數據可以用於數學、測試、安全、演算法等領域中。內置random模塊,可用於生成偽隨機數。

真正意義上的隨機數或隨機事件是在某次產生過程中是按照實驗過程中表現的分佈概率隨機產生的,其結果是不可預測的,不可見的。而電腦中的隨機函數是按一定的演算法模擬產生,對於正常隨機而言,會出現某個事件出現多次的情況。而偽隨機,是在事件觸發前設定好,各個事件各發生一次,僅順序不同而已。

    在使用random模塊前,需要導入其模塊,用法如下所示:

import random

22.1.1 random

random() - 用於生成0~1的隨機符點數,若用n表示隨機生成的數,則0<=n<1.0

    示例用法如下所示:

>>> import random
>>> random.random()
0.8907589330748479
>>> [round(random.random(),2) for i in range(10)]
[0.83, 0.83, 0.73, 0.53, 0.67, 0.39, 0.23, 0.57, 0.4, 0.39]

22.1.2 randint

randint(start,end):用於生成指定範圍內的整數,start為起始數字範圍,end為結束數字範圍,若用n表示隨機生成的數,則start<=n<=end

    示例用法如下所示:

>>> random.randint(1,20)
16
>>> [random.randint(1,20) for i in range(10)]
[15, 3, 13, 17, 12, 5, 14, 9, 15, 17]

22.1.3 randrange

randrange([start],stop,[step]):按指定步長生成隨機數,與range類似,若start未指定,預設人0開始,step可為正,也可以為負

    示例用法如下所示:

>>> [random.randrange(20) for i in range(20)]
[1, 9, 4, 11, 8, 10, 12, 6, 3, 16, 4, 10, 16, 19, 13, 0, 18, 2, 8, 1]
>>> [random.randrange(30,20,-2) for i in range(20)]
[28, 30, 28, 28, 30, 28, 28, 26, 26, 26, 30, 28, 22, 28, 28, 24, 30, 30, 28, 22]
>>> [random.randrange(20,30,2) for i in range(20)]
[24, 20, 26, 28, 22, 22, 26, 22, 20, 28, 20, 24, 22, 28, 28, 28, 22, 22, 20, 26] 

22.1.4 choice&choices

choice(seq):從非空序列seq中隨機選擇一個元素,seq需要可為字元串、列表和元組

choices(population, weights=None, *, cum_weights=None, k=1):從population中進行k次隨機選擇,每次選取一個元素(可能會出現同一個元素被多次選中的情況)

  • weights:相對權重值,population中有幾個元素就要有相對應的權重值,
  • cum_weights:累計權重值,如相對權重值為[1,2,3,5],則累計權重值為[1,3,6,11]

    示例用法如下所示:

>>> random.choice([1,2,3,4,5,6,7,8,9,0])
1
>>> random.choice((1,2,3,4,5,6,7,8,9,0))
9
>>> random.choice("abcdefgh")
'b'
>>> temp=[1,2,3,4,5,6,7,8,9,0]
>>> random.choices(temp,k=10)
[6, 0, 6, 7, 2, 5, 4, 4, 3, 5]
>>> random.choices(temp,weights=temp,k=10)
[8, 9, 8, 3, 2, 8, 5, 9, 9, 6]   # 9的相對權重為最大,經過多次選擇後,被選中的概率也越大
>>> random.choices(temp,weights=[2,2,2,2,2,2,2,2,2,2],k=10)
[8, 1, 5, 4, 4, 8, 4, 5, 2, 1]
>>> random.choices(temp,cum_weights=[2,2,2,2,2,2,2,2,2,2],k=10)
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

22.1.5 sample

sample(population, k):從population選擇k個元素並組成新的序列,常用於不重覆的隨機抽樣。與choics的不同之處在於choices是選擇k次,而sample是選取k個元素。 k不能大於population的元素個數

    示例用法如下所示:

>>> temp=[1,2,3,4,5,6,7,8,9,0]
>>> random.sample(temp,3)
[5, 9, 2]
>>> random.sample(temp,3)
[6, 5, 7]
>>> random.sample(range(1,100),3)
[94, 96, 62]

22.1.6 shuffle

shuffle(x, random=None):常用於打亂列表中的元素,僅適用於可變序列。

    示例用法如下所示:

>>> temp=[1,2,3,4,5,6,7,8,9,0]
>>> random.shuffle(temp)
>>> temp
[1, 8, 4, 7, 5, 9, 6, 3, 2, 0]

22.1.7 uniform

uniform(a, b):產生一個大小介於ab或ba的隨機浮點數。

>>> random.uniform(10,20)
12.92109250364504
>>> random.uniform(100,20)
61.262911331961085
>>> random.uniform(-100,20)
8.388580711375894
>>> random.uniform(-100,0)
-36.12620029902773

22.2 時間日期模塊

22.2.1 時間模塊

    Python內置的time模塊可以讀取系統的當前時間,方便處理時間相關的內容。

22.2.1.1 sleep函數

    如果需要在程式運行階段,暫停一會程式,則可以使用sleep函數,暫停的時間單位為秒,其使用方法也非常簡單,如下所示:

>>> import time
>>> time.sleep(5)

22.2.1.2 time函數

    Unix紀元是編程中經常參考的時間,其時間為1970-01-01 00:00:00,也被稱為世界協調時間(UTC),而time函數返回的值為當前系統時間與UTC之間的差值,稱之為UNIX時間戳,單位為秒。如下所示:

>>> import time
>>> time.time()
1590306522.6944528

    UNIX時間戳可以用於測量代碼的運行時間,如下所示:

import time
import random

def calcTimeDiff(func):
    def wrapper():
        startTime=time.time()
        func()
        endTime=time.time()
        print(f"程式共耗時{endTime-startTime} s")
    return wrapper


@calcTimeDiff
def testCode():
    res=[random.uniform(-1000,9999) for i in range(9999)]
    time.sleep(5)

if __name__ == '__main__':
    testCode()

輸出結果如下所示:

程式共耗時5.011289596557617 s
22.2.1.3 localtime函數

    將時間戳轉換為struct_time格式,如果傳入參數為空,則取系統當前時間,示例如下所示:

>>> time.localtime()
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=24, tm_hour=16, tm_min=11, tm_sec=9, tm_wday=6, tm_yday=145, tm_isdst=0)
>>> time.localtime(1590306522.6944528)
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=24, tm_hour=15, tm_min=48, tm_sec=42, tm_wday=6, tm_yday=145, tm_isdst=0)
22.2.1.4 mktime函數

    將元組格式的轉換為時間戳格式,如下所示:

>>> time.mktime(time.localtime())
1590308257.0
>>> time.mktime((2020, 5, 24, 16, 20, 38, 1, 48, 0))
1590308438.0
22.2.1.5 asctime函數

    將元組格式的時間轉換為字元串格式,如果未傳入參數,則預設調用time.localtime(),示例如下所示:

>>> time.asctime((2020, 5, 24, 16, 20, 38, 1, 48, 0))
'Tue May 24 16:20:38 2020'
>>> time.asctime()
'Sun May 24 16:23:04 2020'
22.2.1.6 strftime

    指導指定的字元串轉換為指定格式的字元串,如未傳入表示時間字元串參數,則調用time.localtime(),如果傳入的參數不能代表時間或越辦,則拋出異常。其定義格式如下所示:

strftime(format, p_tuple=None)

    示例如下所示:

>>> time.strftime("%Y-%m-%d")
'2020-05-24'
>>> time.strftime("%Y-%m-%d",time.localtime())
'2020-05-24'
>>> time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
'2020-05-24 16:28:48'

    常見的格式字元如下所示:

column column
%a 本地星期名稱簡稱
%A 本地星期名稱全稱
%b 本地月份簡稱
%B 本地月份全稱
%d 顯示對應的日期和星期
%Y 顯示完整的年份,格式為YYYY
%m 顯示完整的月份,格式為mm
%d 顯示天數,格式為dd
%H 顯示小時,24小時制
%M 顯示分鐘
%S 顯示秒
%I 顯示小時,12小時制
%j 顯示當前天數在一年之內屬於第幾天
%p 顯示am或pm
%U 顯示當前星期在一年之內屬於第幾個星期
%w 顯示一個星期中的第幾天(0代表星期天)
%Z 顯示本地的時區

22.2.2 datetime

    time常用於獲取時間戳或程式暫停。如果需要更方便的處理日期,則使用內置模塊datetime。

22.2.2.1 獲取當前系統時間now方法
>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2020, 5, 24, 18, 16, 56, 582298)

    在調用now方法之後,返回一個datetime對象,表示當前的系統時間,包含年、月、日、時、分、秒、微秒等信息,通過以下下方式可以單獨獲取其值,如下所示:

>>> dt=datetime.now()
>>> dt.year,dt.month,dt.day
(2020, 5, 24)
>>> dt.hour,dt.minute,dt.second,dt.microsecond
(18, 19, 13, 437783)
22.2.2.2 轉換時間戳為時間fromtimestamp
import time
>>> from datetime import datetime
>>> timeStamp=time.time()
>>> datetime.fromtimestamp(timeStamp)
datetime.datetime(2020, 5, 24, 18, 21, 53, 958894)
22.2.2.3 轉換時間為時間戳timestamp
>>> dt=datetime.now()
>>> dt.timestamp()
1590316238.912804
>>> datetime.now().timestamp()
1590316265.052493
22.2.2.4 格式化日期strftime

    strftime將日期格式的日期按格式化要求轉換為相應的字元串格式日期。這裡的日期格式化與time模塊的格式非常像,示例如下所示:

>>> datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
'2020-05-24 18:34:13.628337'
>>> dt=datetime(2020,5,24,18,35,20,123456)
>>> dt.strftime("%Y-%m-%d %H:%M:%S.%f")
'2020-05-24 18:35:20.123456'

%f:表示格式化微秒,需要註意與time模塊的區別

22.2.2.5 格式化日期strptime

    strptime與strftime相反,是將字元串格式的日期按格式化要求轉換為相應的日期格式的日期,註意,必須是日期格式的字元串才能轉換。

>>> dt="2020-05-24 18:34:13.628337"
>>> datetime.strptime(dt,"%Y-%m-%d %H:%M:%S.%f")
datetime.datetime(2020, 5, 24, 18, 34, 13, 628337)
>>> datetime.strptime("2020-05-24","%Y-%m-%d")
datetime.datetime(2020, 5, 24, 0, 0)
>>> datetime.strptime("18:44:20","%H:%M:%S")
datetime.datetime(1900, 1, 1, 18, 44, 20)

22.2.3 timedelta

    tiemdelta主要用於計算兩個datetime對象的差值。通常只保留days、seconds、microseconds三個值

22.2.3.1 計算時間差
>>> from datetime import datetime
>>> from datetime import timedelta
>>> now=datetime.now()
>>> now
datetime.datetime(2020, 5, 24, 18, 53, 36, 859069)
>>> addDay=now+timedelta(days=1)
>>> addDay
datetime.datetime(2020, 5, 25, 18, 53, 36, 859069)
>>> subDay=now-timedelta(days=1)
>>> subDay
datetime.datetime(2020, 5, 23, 18, 53, 36, 859069)
>>> now+timedelta(days=-10)
datetime.datetime(2020, 5, 14, 18, 53, 36, 859069)

&esmp;   雖然timedelta提供計算時間差,但卻沒有提供計算月份的時間差,使用time模塊來進行計算,如下所示:

>>> import time
>>> nowMonth=time.localtime()[1]
>>> nowMonth
5
>>> nowMonth-1 # 上一個月
4
>>> nowMonth+1 # 下一個月
6
22.2.3.2 獲取時間差總數
>>> from datetime import datetime
>>> from datetime import timedelta
>>> import time
>>> timedelta(days=2,hours=2,minutes=60,microseconds=100000)
>>> timedelta(days=2,hours=2,minutes=60,microseconds=100000).days
2
>>> timedelta(days=2,hours=2,minutes=60,microseconds=100000).seconds
10800
>>> timedelta(days=2,hours=2,minutes=60,microseconds=100000).microseconds
100000
timedelta(days=2,hours=2,minutes=60,microseconds=100000).total_seconds()
>>> 183600.1
>>> timedelta(days=2,hours=2,minutes=60,microseconds=1000000).total_seconds()
183601.0
>>> startTime=datetime.now()
>>> startTime
datetime.datetime(2020, 5, 24, 19, 12, 0, 242072)
>>> endTime=datetime.now()
>>> endTime
datetime.datetime(2020, 5, 24, 19, 12, 34, 331050)
>>> (endTime-startTime).total_seconds()
34.088978
>>> (endTime-startTime).microseconds
88978

本文地址:https://www.cnblogs.com/surpassme/p/13069047.html

本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註: MyQRCode.jpg


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

-Advertisement-
Play Games
更多相關文章
  • JVM JVM->Java Virtual Machine:Java虛擬機,是一種用於計算設備的規範,它是一個虛構出來的電腦,是通過在實際的電腦上模擬模擬各種電腦功能來實現的。 基本認知: 1.JVM是用於運行Java代碼的假象電腦,主要有一套位元組碼指令集,一組寄存器,一個棧,一個垃圾回收, ...
  • 從零開始Hibernate實戰篇:(四篇實戰代碼,循序漸進,註意事項和學習內容在代碼註釋裡面,面向有一定基礎的同學使用) 第一篇:基礎篇(搭建) Hibernate開發基本步驟: 1.導入jar包(hibernate-release-5.0.7.Final\lib的文件裡面去找所需要的jar包) 2 ...
  • 很多人接觸Python,都是從爬蟲開始,其實很多語言都可以做爬蟲,只是Python相對其他語言來說,更加簡單而已。但是Python並不止於爬蟲,在人工智慧,科學計算等方面的應用更加廣泛。古人雲:萬丈高樓平地起,要想有長足的發展,打好基礎很重要,本文主要講解Python的面向對象相關知識,僅供學習分享... ...
  • 1、問題描述 安裝在docker容器裡面的storage一直處於退出狀態,導致文件無法存儲。 2、解決方案 查看docker中安裝的容器 docker ps -a 嘗試啟動容器 docker start storage (或者 docker start "容器ID") 若嘗試啟動容器後,容器仍處於退 ...
  • 1 from datetime import * 2 today=datetime.today() 3 now=datetime.now() 4 5 #判斷今天是星期幾 6 today.isoweekday() 7 8 #計算一周以後是星期幾 9 day=timedelta(days=7) 10 t ...
  • 上一節給大家分享了掃雷游戲的源代碼,本篇文章當然也不會讓大家失望,專門針對C語言入門或者學習了部分知識之後的小伙伴來練手的游戲項目——《五子棋大戰》,本期並不是使用的easyX,因為考慮到有些大學的同學沒有接觸到這個,所以本期就是一個“黑漆漆”的控制台界面,這個就希望大家諒解哈!,話不多說,下麵我們 ...
  • 註意:一定要跟著博主的解說再看代碼的中文註釋及其下麵的一行代碼!!! 說到api版本控制,就是我們的前端人員請求的後臺介面可能有多個版本,後臺的介面地址一般是有兩種形式,博主現以這兩種形式逐一解釋api版本控制組件的源碼剖析。 第一種api版本控制的url格式一般是:http://localhost ...
  • 一、數組 數組也是一種引用類型,其父類是Object,使用“數據類型[]”聲明,如“int[] array”表示聲明瞭一個元素類型為int類型的數組array。 數組初始化語法: // 靜態初始化語法,即定義的時候就初始化好了所有的元素 int[] array1 = {100, 55, 30}; / ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...