㈠ python哪些標准庫
標准庫比較多 功能也不同:
標准庫
sys
系統相關的參數和函數。 sys 庫一般用來訪問和修改系統相關信息,比如查看 python 版本、系統環境變數、模塊信息和 python 解釋器相關信息等等。
os
操作系統介面模塊。這個庫提供了訪問操作系統相關依賴的方式,比如輸入輸出操作、讀寫操作、操作系統異常錯誤信息、進程線程管理、文件管理、調度程序等等。
re
正則表達式操作。這個庫是我喜歡並且經常會用到的庫,在對大量字元串進行處理的時候用正則表達式是最快速有效的方式,但是正則表達式的學習曲線較高,有興趣的朋友可以訪問這個網站學習。
math
數學函數庫。 math 庫提供了對 C 語言標準定義的數學函數訪問,比如數論(Number-theoretic)的各種表示方法、冪和對數函數(Power and logarithmic functions)、三角函數(Trigonometric functions)、常量圓周率(π)和自然常數(e)等等。
random
生成偽隨機數。
偽隨機數與隨機數(真隨機數)不同的是執行環境,隨機數是真實世界中通過物理過程實踐得出結論,而偽隨機數是通過計算機的特定演算法生成的數,所以這個過程是可預測的、有規律的,只是循環周期較長,並不能與現實場景相切合。
random庫提供生成隨機數,可以模擬現實世界中隨機取數、隨機抽獎等等。
logging
日誌記錄工具。這個庫提供了對應用程序和庫函數的日誌記錄,日常開發中我們經常需要通過日誌列印出當前程序的運行狀態,實時查看可能出現的堆棧異常和錯誤信息。
json
Json 編碼和解碼器。 json 庫提供了對 json 數據的支持,日常開發中我們做前後端分離需要對傳輸數據 json 進行序列化和反序列化操作,以保證對數據的完整性和有效性,而序列化和反序列化其實就是編碼和解碼的過程。
pickle
Python 對象序列化庫。 pickle 庫支持對 python 對象進行序列化和反序列化操作,當我們需要將處理好的對象保存到文件或資料庫中時,就可以將其序列化成二進制數據,從而更好的保存起來。
shelve
Python 對象持久化。簡單的數據存儲方案。
socket
底層網路介面。 socket(套接字) 庫提供了標準的BSD(伯克利套接字) Socket API,可以通過訪問底層操作系統 Socket 的相關介面進行網路通訊。
datetime
基本日期和時間類型庫。該庫提供了各種簡單和復雜的方式處理日期和時間,日常我們會用時間測算時間消耗、復雜度,對存儲的創建時間和修改時間也需要進一步說明,對計時器的描述和控制也需要用到該庫。
hashlib
安全哈希和消息摘要。摘要演算法 其實就是對某些數據進行加密(不可逆的加密演算法),因為被加密的數據無法破解,所以就能防止被篡改。常見的摘要演算法有 MD5、SHA1,一般我們會用 MD5 對用戶口令進行加密,防止盜用後被輕易破解;而 SHA1 與 MD5 類似,但是 SHA1 會產生更長的長度,也更安全,但是演算法的復雜性通常伴隨著存儲空間和時間的消耗。要說比SHA1更長的字元長度,還有 SHA224、SHA256、SHA384 和 SHA512,看名字就能知道。
大家都知道無論演算法生成的字元長度如何都有可能發生碰撞(被破解),這是不可避免的,所以具體場景具體情況而定。
configparser
配置文件解析器。 configparser 庫可以輕松定製配置文件,通過解析配置文件的信息我們就可以全局訪問相關配置。
urllib
URL 處理模塊。 urllib 庫集成了處理 URLs(統一資源定位符)的各種模塊:
URL urllib.request URL robots.txt urllib 庫對訪問網路有很好的支持,提供了對數據的訪問和處理、文件的上傳和下載、記錄 cookie 和 session 等等。
itertools
為高效循環而創建迭代器的函數。 itertools 庫也是經常需要用到,當我們要對某些數進行 for-in 時就需要先將其處理成一個可迭代對象,之後我們才能進行遍歷操作。
collections
容器數據類型庫。 collections 庫提供了對所有容器數據類型的支持,包括 dict, list, set 和 tuple。我們可以用此庫對不同數據類型進行操作,常有的函數方法有這些:
namedtuple() 創建命名元組子類的工廠函數 deque 類似列表(list)的容器,實現了在兩端快速添加(append)和彈出(pop) ChainMap 類似字典(dict)的容器類,將多個映射集合到一個視圖裡面 Counter 字典的子類,提供了可哈希對象的計數功能 OrderedDict 字典的子類,保存了他們被添加的順序 defaultdict 字典的子類,提供了一個工廠函數,為字典查詢提供一個默認值 UserDict 封裝了字典對象,簡化了字典子類化 UserList 封裝了列表對象,簡化了列表子類化 UserString 封裝了列表對象,簡化了字元串子類化 functools
高階函數和可調用對象上的操作。該庫主要調用高階函數,是常規函數的一種補充。目前庫中包含以下幾種函數:
cmp_to_key lru_cache total_ordering partial partialmethod rece singledispatch update_wrapper wraps threading
線程並行庫。 threading 庫支持線程和多線程的操作,針對多線程並發的問題可以給數據加同步鎖,一次只能讓一個線程處理數據,從而避免出現數據讀寫混亂。
在 CPython 解釋器上,因為GIL(全局解釋器鎖)鎖機制的存在的,被設計成線程安全,所以同一時間只能執行一個線程,這就導致了多線程不能發揮出計算機的多核特性。
multiprocessing
進程並行庫。 multiprocessing 庫與 threading 庫很類似,不同的是進程庫可以創建子進程避開 GIL,從而彌補線程庫存在的劣勢和發揮計算機的多核特性。
timeit
測量小代碼片段的執行時間。此庫主要用來計算運行代碼的時間消耗,支持多種方式傳入參數。
atexit
退出處理器。當處理一個函數需要立馬退出時可以使用該庫。
abc
抽象基類。 abc 庫定義抽象基類,以便其他類派生出新類。比如 collections 容器庫中就有此派生出的 collections.abc 類,派生出來的類可以進一步實現。
asyncio
非同步IO庫。 asyncio 庫是一個用 async/await 關鍵字編寫並發的庫,為多個非同步框架提供基礎功能,能夠實現高性能的網路、Web伺服器、資料庫連接和分布式任務隊列等。
淺層和深層復制操作。 庫提供對對象的拷貝,我們都知道要製作對象副本,是無法通過簡單值傳遞創建新變數的方式做到,因為新變數所指向的內存空間依舊是原對象本身,所以對新變數進行任何操作都會改變原對象。那麼, 庫就提供了製作對象副本的各種方法,會開辟一個新的內存空間存放副本對象,修改操作不會對原對象有任何干預。
csv
csv(Comma Separated Values)文件讀寫庫。此庫支持以純文本的形式存儲表格數據(數字和文本)。
operator
標准運算符替代函數庫。此庫是將 python 自有的運算符作為有效函數,比如表達式 x+y 可以用函數 operator.add(x, y) 表示;比如表達式 a*b 可以用函數 operator.mul(a, b) 表示,等等。
enum
枚舉庫。 enum 庫支持創建枚舉類來存儲大量同類型的不可變常量,以便其他函數調用。創建出來的枚舉類是可迭代對象,所以可以用 for-in 枚舉出所有常量。
heapq
堆隊列演算法。這個模塊提供了堆隊列演算法的實現,也稱為優先隊列演算法。優先隊列中的每個元素都有各自的優先順序,優先順序最高的元素最先得到服務。所以當我們要求前n最大/最小值的時候就可以用此演算法來實現, heapq 庫中也提供了相應函數實現。
http
HTTP 模塊。 http 模塊是一個包,收集了多個處理超文本傳輸協議的模塊:
urllib.request http 模塊通過 http.HTTPStatus 枚舉定義了HTTP狀態碼 以及相關聯消息。
profile、pstats
性能分析工具。 profile 模塊提供了 profile 和 cProfile 兩種不同實現的性能分析工具,可用來描述程序各個部分的執行時間和頻率,統計後的信息可以通過 pstats 模塊保存並使用。
ssl
TLS/SSL(傳輸安全協議)。此模塊提供對安全協議的支持,通過應用上下文,可將 TLS(傳輸層安全性協議)或其前身 SSL(安全套接層)支持安全協議,能為互聯網通信提供安全和數據完整性保障。一般 HTTPS 協議都支持 TLS/SSL 加密。
unitest
單元測試框架。 unitest 庫常用於單元測試,受到 JUnit 和其他主流測試庫的啟發, unitest 庫的功能和函數與它們有著相似的風格。
uuid
UUID庫。 uuid 庫主要用途是生成隨機字元串,庫中有多個版本的 UUID 對象方法,比如版本 1、3、4 和 5 的 uuid1() 、 uuid3() 、 uuid4() 和 uuid5() 。需要注意的是,如果要生成隨機字元串,可以使用 uuid1() 和 uuid4() ,但是 uuid1() 會存在隱私風險,因為生成的原理里邊包含用戶訪問計算機的網路地址,而 uuid4() 是通過隨機字元生成。
希望可以幫助到你。
㈡ 零基礎學Python應該學習哪些入門知識
1、Python入門導學
Python的特性、優點、缺點、前景以及 python能做些什麼?
2、Python環境安裝
一鍵安裝Python的編譯環境,寫出第一段Python代碼
3、理解什麼是寫代碼與Python的基本類型
Python的基本類型,包括整形、浮點型;10、8、2、16進制數的意義和轉換關系;布爾類型;字元串與字元串常見運算操作
4、Python中表示「組」的概念與定義
了解「組」的概念,以及在Python中用來表示「組」的一些類型,包括:元組、列表、集合和字典。
5、變數與運算符
了解變數的意義與七種運算符,並對每一種運算符的擴展做出詳細的講解
6、分支、循環、條件與枚舉
代碼的基本邏輯結構,包括條件控制(if else)、循環控制(for in 、while)、表達式與運算符的優先順序。此外,還有Python的枚舉類型以及Python編碼的規范。
7、包、模塊、函數與變數作用域
了解Python代碼的組織結構核心:包、模塊與函數。需要對Python代碼的組織結構有一個非常清晰的認識。重點是函數,除了了解函數的基本概念外,還需要了解Python靈活的函數參數機制(默認參數、關鍵字參數與列表參數)。
8、Python函數
函數是所有語言中都具備的基本代碼組織結構。函數的重要性不言而喻。而對於Python來說,函數的用法及其靈活,遠比其他語言要強大很多。了解Python函數的定義、調用、序列解包、必須參數、關鍵字參數、默認參數等諸多內容。
9、高級部分:面向對象
了解面向對象的概念。包括面向對象的三大特性(繼承、封裝、多態)、類的基本構成元素、python的內置類屬性、方法重寫、運算符重載、靜態方法等
10、正則表達式與JSON
正則表達式也是文本解析中非常重要的知識點。了解如何在Python中編寫正則表達式與常見的正則表達式。此外,重點了解包括JSON對象,JSON字元串,Python類型與JSON的轉換。
11、Python的高級語法與用法
了解Python進階部分的高級特性,如枚舉、閉包
12、函數式編程: 匿名函數、高階函數、裝飾器
進一步了解函數式編程的lambda、mapece、filter以及裝飾器
13、實戰:原生爬蟲
學習如何訪問網路數據、獲取與解析網路數據、爬蟲的基本原理解釋。並用最基礎語法不使用爬蟲框架的原生爬蟲項目。
14、Pythonic與Python雜記
了解擴展Python的優秀寫法,學會如何寫出優質的Pythonic風格的代碼。包括:如何讓字典保持有序、lmbda表達式的應用等高級Python知識
㈢ python 怎麼通過枚舉的值
從C系語言過來用Python,好不容易適應了寫代碼不打花括弧,突然有一天發現它居然木有枚舉……於是stackoverflow了一把,發現神人的枚舉(enum)實現到處都是,於是漢化總結過來。
如果是新版Python用戶(Python 3.4 with PEP 435):
from enum import Enum
Animal = Enum('Animal', 'ant bee cat dog')
or
class Animals(Enum):
ant = 1
bee = 2
cat = 3
dog = 4
舊版Python用戶可以充分發揮動態語言的優越性來構造枚舉,有簡單的:
def enum(**enums):
return type('Enum', (), enums)
Numbers = enum(ONE=1, TWO=2, THREE='three')
# Numbers.ONE == 1, Numbers.TWO == 2 and Numbers.THREE == 'three'
有復雜的:
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
return type('Enum', (), enums)
Numbers = enum('ZERO', 'ONE', 'TWO')
# Numbers.ZERO == 0 and Numbers.ONE == 1
有帶值到名稱映射的:
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
reverse = dict((value, key) for key, value in enums.iteritems())
enums['reverse_mapping'] = reverse
return type('Enum', (), enums)
# Numbers.reverse_mapping['three'] == 'THREE'
有用set實現的:
class Enum(set):
def __getattr__(self, name):
if name in self:
return name
raise AttributeError
Animals = Enum(["DOG", "CAT", "HORSE"])
print Animals.DOG
有用range實現的:
dog, cat, rabbit = range(3)
# or
class Stationary:
(Pen, Pencil, Eraser) = range(0, 3)
print Stationary.Pen有用tuple實現的:
class Enum(tuple): __getattr__ = tuple.index
State = Enum(['Unclaimed', 'Claimed'])
print State.Claimed
有用namedtuple實現的:
from collections import namedtuple
def enum(*keys):
return namedtuple('Enum', keys)(*keys)
MyEnum = enum('FOO', 'BAR', 'BAZ')
# 帶字元數字映射的,像C/C++
def enum(*keys):
return namedtuple('Enum', keys)(*range(len(keys)))
# 帶字典映射的,可以映射出各種類型,不局限於數字
def enum(**kwargs):
return namedtuple('Enum', kwargs.keys())(*kwargs.values())
㈣ 如何按行枚舉 python enumerate
enumerate()說明
enumerate()是python的內置函數
enumerate在字典上是枚舉、列舉的意思
對於一個可迭代的(iterable)/可遍歷的對象(如列表、字元串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值
enumerate多用於在for循環中得到計數
例如對於一個seq,得到:
(0, seq[0]), (1, seq[1]), (2, seq[2])
1
1
enumerate()返回的是一個enumerate對象,例如:
enumerate()使用
如果對一個列表,既要遍歷索引又要遍歷元素時,首先可以這樣寫:
list1 = ["這", "是", "一個", "測試"]
for i in range (len(list1)):
print i ,list1[i]123123
上述方法有些累贅,利用enumerate()會更加直接和優美:
list1 = ["這", "是", "一個", "測試"]
for index, item in enumerate(list1):
print index, item
>>>
0 這
1 是
2 一個
3 測試1234567812345678
enumerate還可以接收第二個參數,用於指定索引起始值,如:
list1 = ["這", "是", "一個", "測試"]
for index, item in enumerate(list1, 1):
print index, item
>>>
1 這
2 是
3 一個
4 測試1234567812345678
補充
如果要統計文件的行數,可以這樣寫:
count = len(open(filepath, 'r').readlines())11
這種方法簡單,但是可能比較慢,當文件比較大時甚至不能工作。
可以利用enumerate():
count = -1
for index, line in enumerate(open(filepath,'r')):
count += 1
㈤ python 有宏定義,或者枚舉么
如果那樣就如你所說搞一個"頭文件",不過在python中可是一個模塊文件,裡面定義了常量(其實還是變數):如叫constants.pycomplete=12fail=13使用時import
constants
或from
constants
import
*這樣就行了。
㈥ 你可能沒有在Python3中使用但卻應該使用的東西
由於Python EOL的發布,許多人開始將他們的Python版本從2切換到3。不幸的是,我發現大多數Python3看起來仍然像Python2,但是要加括弧(盡管在我之前的文章《使用Python進行web抓取介紹》中的代碼示例也是這樣)。下面,我將展示一些令人興奮的特性示例,你只能在Python3中使用它們,希望它可以讓你使用Python解決問題變得更容易。
所有示例都是在Python 3.7中編寫的,每個特性都包含該特性所需的最低Python版本。
在任何編程語言中,沒有字元串是很難做任何事情的,為了保持理智,你希望有一種結構化的方法來處理字元串。大多數使用Python的人更喜歡使用format方法。
除了format,Python 3還提供了一種通過f-strings進行字元串插值的靈活方法。和上面一樣使用f-strings的代碼是這樣的:
f-strings非常棒,但是有些字元串(比如文件路徑)有自己的庫,這使得它們的操作更加容易。Python 3提供了pathlib作為一個處理文件路徑的方便抽象。如果你不確定為什麼你應該使用pathlib,試著閱讀這篇優秀的文章——《為什麼你應該使用pathlib》——Trey Hunner。
靜態和動態類型是軟體工程中一個熱門的話題,幾乎每個人都對此有自己的看法。我將讓讀者決定何時應該編寫類型,但我認為你至少應該知道Python 3支持類型提示。
Python 3提供了一種通過Enum類來編寫枚舉的簡單方法。枚舉是封裝常量列表的一種方便的方法,因此它們不會在沒有太多結構的情況下隨機分布在你的代碼中。
枚舉是一組符號名稱(成員),它們綁定到惟一的常量值。在枚舉中,可以通過標識對成員進行比較,並且枚舉本身也可以被遍歷。https://docs.python.org/3/library/enum.html
緩存存在於我們今天使用的幾乎所有水平的軟體和硬體中。Python 3通過將LRU(最近最少使用的)緩存公開為一個名為lru_cache的裝飾器,使得使用它們變得非常簡單。
下面是一個簡單的Fibonacci函數,我們知道它將從緩存中受益,因為它通過遞歸多次執行相同的任務。
現在我們可以使用lru_cache對其進行優化(這種優化技術稱為memoization(記憶化))。執行時間從幾秒降到幾納秒。
請查看代碼(文檔 https://www.python.org/dev/peps/pep-3132/ )。
Python 3引入了數據類,這些數據類並沒有太多限制,可以使用它們來減少樣板代碼,因為裝飾器會自動生成特殊的方法,比如__init__() 和__repr()__。根據官方建議,它們被描述為「具有默認值的可變命名元組」。
使用數據類的Armor的相同實現。
結構化Python代碼的一種方法是在包中(帶有一個__init__.py文件的文件夾)。下面的示例是由官方Python文檔提供的。
在Python2中,上面的每個文件夾都必須有一個__init__.py文件,它會將該文件夾轉換為一個Python包。在Python3中,隨著隱式命名空間包的引入,這些文件就不再需要了。
編者注:正如一些人所說,這並不像我在本節中指出的那樣簡單,從官方的PEP 420規范來看——__init__.py對於普通包仍然是必需的,將它從文件夾結構中刪除將會把文件夾變成一個帶有附加限制的本地命名空間包,關於本機命名空間包的官方文檔對此展示了一個很好的例子,以及命名所有的限制。
就像互聯網上幾乎所有的列表一樣,本列表並不完整。我希望這篇文章至少向你展示了一個你以前並不知道的Python 3功能,它將幫助你編寫更簡潔、更直觀的代碼。一如既往,所有的代碼都可以在GitHub上找到。
(https://github.com/Weenkus/DataWhatNow-Codes/blob/master/things_you_are_probably_not_using_in_python_3_but_should/python%203%20examples.ipynb )
㈦ python 怎麼安裝enum
工具/原料
python安裝包
電腦操作系統win7
方法/步驟
1
現在python官網上下載和自己本機匹配的python版本,看好自己的機器是64為的還是32位的
下載好了python安裝包後雙擊python安裝包,選擇install just for me,點擊下一步
選擇python安裝的路徑一般都安裝在c盤,點擊next下一步
選擇python索要安裝的文件 默認全部安裝,點擊next
稍等一小會兒會就會安裝成功
然後點擊finsh安裝完成
右鍵我的電腦 選擇屬性
選擇高級系統配置,點擊高級
點擊環境變數,選擇path路徑
然後雙擊 把剛剛安裝python時選擇的路徑放在path路徑裡面 注意最後面的分好要填寫
然後在cmd命令行下鍵入 python -V 就能得到python的版本信息了 安裝完成
注意事項
一定要記得配置環境變數
最後驗證python是否安裝的時候一定要確保是大寫的V而不是小寫的