天天看點

常見系統子產品彙總 | 手把手教你入門Python之四十七

上一篇: 5個案例詳解裝飾器 | 手把手教你入門Python之四十六 下一篇: 如何使用pip管理第三方包? | 手把手教你入門Python之四十八 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。

Python中的子產品

在Python中有⼀個概念叫做子產品(module)。

說的通俗點:子產品就好⽐是⼯具包,要想使⽤這個⼯具包中的⼯具(就好⽐函數),就需要導⼊這個子產品

⽐如我們經常使⽤⼯具 random,就是⼀個子產品。使⽤ import random 導⼊⼯具之後,就可以使⽤ random 的函數。

導⼊子產品

導⼊子產品有五種⽅式

  • import 子產品名
  • from 子產品名 import 功能名
  • from 子產品名 import *
  • import 子產品名 as 别名
  • from 子產品名 import 功能名 as 别名

import

在Python中⽤關鍵字

import

來引⼊某個子產品,⽐如要引⼊系統子產品

math

,就可以在⽂件最開始的地⽅

import math

來引⼊。

文法:

import 子產品1,子產品2,... # 導⼊⽅式
子產品名.函數名() # 使⽤子產品⾥的函數           

為什麼必須加上子產品名調⽤呢?

因為可能存在這樣⼀種情況:在多個子產品中含有相同名稱的函數,此時如果隻是通過函數名來調⽤,解釋器⽆法知道到底要調⽤哪個函數。是以如果像上述這樣引⼊子產品的時候,調⽤函數必須加上子產品名。

import math
#這樣才能正确輸出結果
print math.sqrt(2)
#這樣會報錯
print(sqrt(2))           

from…import

有時候我們隻需要⽤到子產品中的某個函數,隻需要引⼊該函數即可,此時可以⽤下⾯⽅法實作:

from 子產品名 import 函數名1,函數名2....           

不僅可以引⼊函數,還可以引⼊⼀些全局變量、類等

注意:

通過這種⽅式引⼊的時候,調⽤函數時隻能給出函數名,不能給出子產品名,但是當兩個子產品中含有相同名稱函數的時候,後⾯⼀次引⼊會覆寫前⼀次引⼊。也就是說假如子產品A中有函數function(),在子產品B中也有函數function( ),如果引⼊A中的function在先、B中的function在後,那麼當調⽤function函數的時候,是去執⾏子產品B中的function函數。

例如,要導⼊子產品fib的fibonacci函數,使⽤如下語句:

from fib import fibonacci           

不會把整個fib子產品導⼊到目前的命名空間中,它隻會将fib⾥的fibonacci單個函數引⼊。

from … import *

把⼀個子產品的所有内容全都導⼊到目前的命名空間也是可⾏的,隻需使⽤如下聲明:

from modname import *           

注意:這提供了⼀個簡單的⽅法來導⼊⼀個子產品中的所有項⽬。然⽽這種聲明不該被過多地使⽤。

as 别名

In [1]: import time as tt # 導⼊子產品時設定别名為 tt
In [2]: time.sleep(1)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-07a34f5b1e42> in <module>()
----> 1 time.sleep(1)
NameError: name 'time' is not defined
In [3]:
In [3]: tt.sleep(1) # 使⽤别名才能調⽤⽅法
In [4]:
In [4]: from time import sleep as sp # 導⼊⽅法時設定别名
In [5]: sleep(1)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-5-82e5c2913b44> in <module>()
----> 1 sleep(1)
NameError: name 'sleep' is not defined
In [6]:
In [6]: sp(1) # 使⽤别名才能調⽤⽅法
In [7]:           

OS子產品

OS全稱OperationSystem,即作業系統子產品,這個子產品可以⽤來作業系統的功能,并且實作跨平台操作。

import os
os.getcwd() # 擷取目前的⼯作⽬錄,即目前python腳本⼯作的⽬錄
os.chdir('test') # 改變目前腳本⼯作⽬錄,相當于shell下的cd指令
os.rename('畢業論⽂.txt','畢業論⽂-最終版.txt') # ⽂件重命名
os.remove('畢業論⽂.txt') # 删除⽂件
os.rmdir('demo') # 删除空⽂件夾
os.removedirs('demo') # 删除空⽂件夾
os.mkdir('demo') # 建立⼀個⽂件夾
os.chdir('C:\\') # 切換⼯作⽬錄
os.listdir('C:\\') # 列出指定⽬錄⾥的所有⽂件和⽂件夾
os.name # nt->widonws posix->Linux/Unix或者MacOS
os.environ # 擷取到環境配置
os.environ.get('PATH') # 擷取指定的環境配置

os.path.abspath(path) # 擷取Path規範會的絕對路徑
os.path.exists(path) # 如果Path存在,則傳回True
os.path.isdir(path) # 如果path是⼀個存在的⽬錄,傳回True。否則傳回False
os.path.isfile(path) # 如果path是⼀個存在的⽂件,傳回True。否則傳回False
os.path.splitext(path) # ⽤來将指定路徑進⾏分隔,可以擷取到⽂件的字尾名           

Sys子產品的使用

該子產品提供對解釋器使用或維護的一些變量的通路,以及與解釋器強烈互動的函數。

sys.exit(code)

讓程式以指定的退出碼結束。

import sys

print('hello world')
sys.exit()    # 程式退出,和内置函數exit功能一緻
print('呵呵呵呵')           

執行結果:

常見系統子產品彙總 | 手把手教你入門Python之四十七
sys.exit(100)            
常見系統子產品彙總 | 手把手教你入門Python之四十七

sys.path

子產品的查找路徑。

print(sys.path)           
常見系統子產品彙總 | 手把手教你入門Python之四十七

結果是一個清單,表示查找子產品的路徑。

sys.stdin

标準輸入。可以通過它來擷取使用者的輸入。

sys.stdout

标準輸出。可以通過修改它來改變預設輸出位置

sys.stderr

錯誤輸出。可以通過修改它來改變錯誤輸出的預設位置

sys.stderr

1 / 0           
常見系統子產品彙總 | 手把手教你入門Python之四十七

sys.stdout

sys.stderr

預設都是在控制台。

sys.argv

傳遞給Python腳本的指令行參數列表。

Math子產品

math子產品儲存了數學計算相關的方法,可以很方便的實作數學運算。

math.factorial(6)

計算階乘

import math
print(math.factorial(6))           
常見系統子產品彙總 | 手把手教你入門Python之四十七

math.floor(12.98)

向下取整

import math
print(math.floor(12.98))           
常見系統子產品彙總 | 手把手教你入門Python之四十七

math.ceil(15.0001)

向上取整

import math
print(math.ceil(15.0001))           
常見系統子產品彙總 | 手把手教你入門Python之四十七

math.pow(2, 10)

2的10次方,幂運算

import math
print(math.pow(2, 10))           
常見系統子產品彙總 | 手把手教你入門Python之四十七

#2 ** 10 / pow(2,10) / math.pow(2,10)

都可以計算幂運算,但是有一些細微的差别。

round()

不是math中的,屬于内置函數,實作四舍五入到指定位數。

math.pi

π的值,約等于 3.141592653589793

math.sin(math.pi / 6)

正弦值,弧度計算,π=180°

import math
print(math.sin(math.pi / 6))           
常見系統子產品彙總 | 手把手教你入門Python之四十七

math.cos(math.pi / 3)

餘弦值

import math
print(math.cos(math.pi / 3))            
常見系統子產品彙總 | 手把手教你入門Python之四十七

math.tan(math.pi / 2)

正切值

import math
print(math.tan(math.pi / 2))            
常見系統子產品彙總 | 手把手教你入門Python之四十七

math.fabs(-100)

取絕對值

import math
print(math.fabs(-100))           
常見系統子產品彙總 | 手把手教你入門Python之四十七

random子產品

random 子產品主要用于生成随機數或者從一個列表里随機擷取資料。

randint(a,b)

生成[a,b]的随機整數,等價于randrange(a, b+1)。

import random
print(random.randint(2, 9))            
常見系統子產品彙總 | 手把手教你入門Python之四十七

random()

生成 [0,1)的随機浮點數。

import random
print(random.random())           
常見系統子產品彙總 | 手把手教你入門Python之四十七

randrange(a, b)

生成[a,b)的随機整數。

import random
print(random.randrange(20, 30))            
常見系統子產品彙總 | 手把手教你入門Python之四十七

choice()

從可疊代對象里随機取出一個元素

import random
print(random.choice(['zhangsan', 'lisi', 'jack', 'henry', 'tony']))            
常見系統子產品彙總 | 手把手教你入門Python之四十七

sample()

從可疊代對象里随機取出指定個數的元素

import random
print(random.sample(['zhangsan', 'lisi', 'jack', 'henry', 'tony'], 2))            
常見系統子產品彙總 | 手把手教你入門Python之四十七

uniform(a,b)

生成[a,b]的随機浮點數

import random
print(random.uniform(20, 30))            
常見系統子產品彙總 | 手把手教你入門Python之四十七

Datetime子產品

datetime子產品主要用來顯示日期時間,這里主要涉及

date

類,用來顯示日期;

time

類,用來顯示時間;

datetime

類,用來顯示日期時間;

timedelta

類用來計算時間。

import datetime as dt
print(dt.date(2020, 1, 1)) # 建立一個日期
print(dt.time(18, 23, 45)) # 建立一個時間
print(dt.datetime.now()) # 擷取目前的日期時間
print(dt.datetime.now() + dt.timedelta(3)) # 計算三天以後的日期時間           
常見系統子產品彙總 | 手把手教你入門Python之四十七

涉及四個類:date/time/datetime/timedelta。

我們接觸過的類:内置類

list、tuple、int、str。

time子產品

除了使用datetime子產品里的time類以外,Python還單獨提供了另一個time子產品,用來操作時間。time子產品不僅可以用來顯示時間,還可以控制程式,讓程式暫停(使用sleep函數)。

import time
print(time.time()) # 擷取從1970-01-01 00:00:00 UTC 到現在時間的秒數
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 按照指定格式輸出時間
print(time.asctime()) #Mon Apr 15 20:03:23 2019
print(time.ctime()) # Mon Apr 15 20:03:23 2019
print('hello')
print(time.sleep(10)) # 讓線程暫停10秒鐘
print('world')           
常見系統子產品彙總 | 手把手教你入門Python之四十七

ctime()

給定一個秒數,生成一個時間。傳遞一個時間戳。

asctime()

傳遞的是一個元組。

常見系統子產品彙總 | 手把手教你入門Python之四十七

calendar子產品

calendar子產品用來顯示一個月曆。

c = calendar.calendar(2019) # 生成2019年的月曆,并且以周日為起始日期碼
print(c) #列印2019年月曆

calendar.setfirstweekday(calendar.SUNDAY) # 設定每周起始日期碼。周一到周日分别對應 0 ~ 6

calendar.firstweekday()# 傳回目前每周起始日期的設定。預設情況下,首次載入calendar子產品時傳回0,即星期一。

print(calendar.isleap(2000)) # True.閏年傳回True,否則傳回False

count = calendar.leapdays(1996,2010) # 擷取1996年到2010年一共有多少個閏年
print(count)

print(calendar.month(2019, 3)) # 列印2019年3月的月曆           
常見系統子產品彙總 | 手把手教你入門Python之四十七
常見系統子產品彙總 | 手把手教你入門Python之四十七
常見系統子產品彙總 | 手把手教你入門Python之四十七
常見系統子產品彙總 | 手把手教你入門Python之四十七
常見系統子產品彙總 | 手把手教你入門Python之四十七
常見系統子產品彙總 | 手把手教你入門Python之四十七

hashlib子產品

hashlib是一個提供字元加密功能的子產品,包含MD5和SHA的加密算法,支援md5,sha1, sha224,sha256, sha384, sha512等算法。 該子產品使用者登入面廣泛,文本加密也很見。

加密方式:單向加密:隻有加密的過程,不能解密md5/sha、

對稱加密、非對稱加密rsa

需要将加密的内容轉化為二進制

import hashlib

x = hashlib.md5() # 生成一個md5對象
x.update('abc'.encode('utf8'))
print(x.hexdigest())           
常見系統子產品彙總 | 手把手教你入門Python之四十七
import hashlib

h1 = hashlib.sha1('123456'.encode())
print(h1.hexdigest())
h2 = hashlib.sha224('123456'.encode())  #  224位 一個十六進制占4位
print(h2.hexdigest())
h3 = hashlib.sha256('123456'.encode())
print(h3.hexdigest())
h4 = hashlib.sha384('123456'.encode())
print(h4.hexdigest())           
常見系統子產品彙總 | 手把手教你入門Python之四十七

hmac子產品

HMAC算法也是一種單項加密算法,并且它是基于上面各種雜湊演算法/散列算法的,隻是它可以在運算過程中使用一個密鑰來增強安全性。hmac子產品實作了HAMC算法,提供了相應的函數和方法,且與hashlib提供的api基本一緻。

hmac加密可以指定密鑰

import hmac

h = hmac.new('h'.encode(),'你好'.encode())
result = h.hexdigest()
print(result) # 擷取加密後的結果           
常見系統子產品彙總 | 手把手教你入門Python之四十七

copy子產品

copy子產品里有copy和deepcopy兩個函數,分别用來對資料進行深複制和淺複制。

import copy

nums = [1, 5, 3, 8, [100, 200, 300, 400], 6, 7]
nums1 = copy.copy(nums) # 對nums列表進行淺複制
nums2 = copy.deepcopy(nums) # 對nums列表進行深複制

print(nums1)
print(nums2)           
常見系統子產品彙總 | 手把手教你入門Python之四十七

uuid子產品

UUID是128位的全局唯一辨別符,通常由32位元組的字母串表示,它可以保證時間和空間的唯一性,也稱為GUID。通過MAC位址、時間戳、命名空間、随機數、僞随機數來保證生産的ID的唯一性。随機生成字元串,可以當成token使用,當成使用者賬号使用,當成訂單号使用。

方法 作用
uuid.uuid1() 基于MAC位址,時間戳,随機數來生成唯一的uuid,可以保證全球範圍内的唯一性。
uuid.uuid2() 算法與uuid1相同,不同的是把時間戳的前4位置換為POSIX的UID。不過需要注意的是python中沒有基于DCE的算法,是以python的uuid子產品中沒有uuid2這個方法。
uuid.uuid3(namespace,name) 通過計算一個命名空間和名字的md5散列列值來給出一個uuid,是以可以保證命名空間中的不同名字具有不同的uuid,但是相同的名字就是相同的uuid了。namespace并不是一個自己手動指定的字元串或其他量,而是在uuid子產品中本身給出的一些值。比如uuid.NAMESPACEDNS,uuid.NAMESPACEOID,uuid.NAMESPACE_OID這些值。這些值本身也是UUID對象,根據一定的規則計算得出。
uuid.uuid4() 通過僞随機數得到uuid,是有一定機率重複的
uuid.uuid5(namespace,name) 和uuid3基本相同,隻不過采用的雜湊演算法是sha1

一般而言,在對uuid的需求不是很複雜的時候,uuid1或者uuid4方法就已經夠用了,使用方法如下:

import uuid

print(uuid.uuid1()) # 根據時間戳和機器碼生成uuid,可以保證全球唯一   32個長度,每一個字元有16個選擇,16**32

# 使用命名空間和字元串生成uuid.
# 注意以下兩點:
# 1. 命名空間不是随意輸入的字元串,它也是一個uuid類型的資料
# 2. 相同的命名空間和相同的字元串,生成的uuid是一樣的
print(uuid.uuid3(uuid.NAMESPACE_DNS, 'hello')) # 生成固定的uuid
print(uuid.uuid5(uuid.NAMESPACE_OID, 'hello')) # 生成固定的uuid

print(uuid.uuid4()) # 随機生成uuid,可能會有重複           
常見系統子產品彙總 | 手把手教你入門Python之四十七

配套視訊