Python基礎知識記錄

一、Python數據類型轉換

函數 描述
int(x [,base]) 將x轉換爲一個整數
long(x [,base] ) 將x轉換爲一個長整數
float(x) 將x轉換到一個浮點數
complex(real [,imag]) 創建一個複數
str(x) 將對象 x 轉換爲字符串
repr(x) 將對象 x 轉換爲表達式字符串
eval(str) 用來計算在字符串中的有效Python表達式,並返回一個對象
tuple(s) 將序列 s 轉換爲一個元組
list(s) 將序列 s 轉換爲一個列表
set(s) 轉換爲可變集合
dict(d) 創建一個字典。d 必須是一個序列 (key,value)元組。
frozenset(s) 轉換爲不可變集合
chr(x) 將一個整數轉換爲一個字符
unichr(x) 將一個整數轉換爲Unicode字符
ord(x) 將一個字符轉換爲它的整數值
hex(x) 將一個整數轉換爲一個十六進制字符串
oct(x) 將一個整數轉換爲一個八進制字符串

二、Python隨機數函數

需要導入 random

import random
函數 描述
choice(seq) 從序列的元素中隨機挑選一個元素,比如random.choice(range(10)),從0到9中隨機挑選一個整數。
randrange ([start,] stop [,step]) 從指定範圍內,按指定基數遞增的集合中獲取一個隨機數,基數默認值爲 1
random() 隨機生成下一個實數,它在[0,1)範圍內。
seed([x]) 改變隨機數生成器的種子seed。如果你不瞭解其原理,你不必特別去設定seed,Python會幫你選擇seed。
shuffle(lst) 將序列的所有元素隨機排序
uniform(x, y) 隨機生成下一個實數,它在[x,y]範圍內。

三、Python轉義字符

轉義字符 描述
\ (在行尾時) 續行符
\\ 反斜槓符號
\' 單引號
\" 雙引號
\a 響鈴
\b 退格(Backspace)
\e 轉義
\000
\n 換行
\v 縱向製表符
\t 橫向製表符
\r 回車
\f 換頁
\oyy 八進制數,yy 代表的字符,例如:\o12 代表換行
\xyy 十六進制數,yy 代表的字符,例如:\x0a 代表換行
\other 其它的字符以普通格式輸出

四、數組

4.1 Python列表腳本操作符
Python 表達式 結果 描述
len([1, 2, 3]) 3 長度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 組合
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重複
3 in [1, 2, 3] True 元素是否存在於列表中
for x in [1, 2, 3]: print x, 1 2 3 迭代
4.2 Python列表截取
Python 表達式 結果 描述
L[2] 'Taobao' 讀取列表中第三個元素
L[-2] 'Runoob' 讀取列表中倒數第二個元素
L[1:] ['Runoob', 'Taobao'] 從第二個元素開始截取列表
4.3 Python列表函數&方法
序號 函數
1 cmp(list1, list2) 比較兩個列表的元素
2 len(list) 列表元素個數
3 max(list) 返回列表元素最大值
4 min(list) 返回列表元素最小值
5 list(seq) 將元組轉換爲列表
序號 方法
1 list.append(obj) 在列表末尾添加新的對象
2 list.count(obj) 統計某個元素在列表中出現的次數
3 list.extend(seq) 在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)
4 list.index(obj) 從列表中找出某個值第一個匹配項的索引位置
5 list.insert(index, obj) 將對象插入列表
6 list.pop([index=-1]) 移除列表中的一個元素(默認最後一個元素),並且返回該元素的值
7 list.remove(obj) 移除列表中某個值的第一個匹配項
8 list.reverse() 反向列表中元素
9 list.sort(cmp=None, key=None, reverse=False) 對原列表進行排序

五、字典

序號 函數及描述
1 dict.clear() 刪除字典內所有元素
2 dict.copy() 返回一個字典的淺複製
3 dict.fromkeys(seq[, val]) 創建一個新字典,以序列 seq 中元素做字典的鍵,val 爲字典所有鍵對應的初始值
4 dict.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回default值
5 dict.has_key(key) 如果鍵在字典dict裏返回true,否則返回false
6 dict.items() 以列表返回可遍歷的(鍵, 值) 元組數組
7 dict.keys() 以列表返回一個字典所有的鍵
8 dict.setdefault(key, default=None) 和get()類似, 但如果鍵不存在於字典中,將會添加鍵並將值設爲default
9 dict.update(dict2) 把字典dict2的鍵/值對更新到dict裏
10 dict.values() 以列表返回字典中的所有值
11 pop(key[,default]) 刪除字典給定鍵 key 所對應的值,返回值爲被刪除的值。key值必須給出。 否則,返回default值。
12 popitem() 返回並刪除字典中的最後一對鍵和值。

六、日期和時間

import time
import calendar

6.1 time 模塊
  • 獲取當前時間
ticks = time.time()
當前時間戳: 1599991315.920578
  • 本地時間
localtime = time.localtime(time.time())
本地時間: time.struct_time(tm_year=2020, tm_mon=9, tm_mday=13, tm_hour=18, tm_min=1, tm_sec=55, tm_wday=6, tm_yday=257, tm_isdst=0)
  • 獲取格式化的時間
localtime = time.asctime( time.localtime(time.time()) )
格式化時間: Sun Sep 13 18:04:21 2020
  • 格式化日期
符號 描述
%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12)
%M 分鐘數(00-59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天爲星期的開始
%w 星期(0-6),星期天爲星期的開始
%W 一年中的星期數(00-53)星期一爲星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號本身

五、函數

可更改(mutable)與不可更改(immutable)對象
python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list, dict 等則是可以修改的對象。

  • 不可變類型:變量賦值 a=5 後再賦值 a=10,這裏實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丟棄,不是改變 a 的值,相當於新生成了 a

  • 可變類型:變量賦值 la=[1,2,3,4] 後再賦值 la[2]=5 則是將 list la 的第三個元素值更改,本身 la 沒有動,只是其內部的一部分值被修改了。

python 函數的參數傳遞

  • 不可變類型:類似 c++ 的值傳遞,如 整數、字符串、元組。如fun(a),傳遞的只是 a 的值,沒有影響 a 對象本身。比如在 fun(a) 內部修改 a 的值,只是修改另一個複製的對象,不會影響 a 本身。

  • 可變類型:類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改後 fun 外部的 la 也會受影響

python 中一切都是對象,嚴格意義我們不能說值傳遞還是引用傳遞,我們應該說傳不可變對象和傳可變對象。

六、模塊

support.py 文件

supDic = {
    "name": "loongod",
    "age": 31,
    "weight": 120
}


def printPersonName(person):
    print("this person's name ", person)
    return
6.1 import

當解釋器遇到 import 語句,如果模塊在當前的搜索路徑就會被導入。

搜索路徑是一個解釋器會先進行搜索的所有目錄的列表。如想要導入模塊 support.py,需要把命令放在腳本的頂端:

# 導入模塊
import support
 
# 現在可以調用模塊裏包含的函數了
support.printPersonName("Runoob")

一個模塊只會被導入一次,不管你執行了多少次 import。這樣可以防止導入模塊被一遍又一遍地執行。

6.2 from…import 語句

Pythonfrom 語句讓你從模塊中導入一個指定的部分到當前命名空間中。語法如下:

from modname import name1[, name2[, ... nameN]]

例如,要導入模塊 supportprintPersonName 函數,使用如下語句:

from support import printPersonName
// 調用如下
printPersonName('loongod')

這個聲明不會把整個 support 模塊導入到當前的命名空間中,它只會將 support 裏的 printPersonName 單個引入到執行這個聲明的模塊的全局符號表。

6.3 from…import* 語句

把一個模塊的 所有內容全都導入 到當前的命名空間也是可行的,只需使用如下聲明:

from modname import *

這提供了一個簡單的方法來導入一個模塊中的所有項目。然而這種聲明不該被過多地使用。

例如我們想一次性引入 math 模塊中所有的東西,語句如下:

from math import *
6.4 搜索路徑

當你導入一個模塊,Python 解析器對模塊位置的搜索順序是:

  1. 當前目錄
  2. 如果不在當前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每個目錄。
  3. 如果都找不到,Python 會察看默認路徑。UNIX下,默認路徑一般 爲 /usr/local/lib/python/

模塊搜索路徑存儲在 system 模塊的 sys.path 變量中。變量裏包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。

七、文件 I/O

  • input([prompt]) :標準輸入讀入一行文本,默認的標準輸入是鍵盤
7.1 打開和關閉文件

** open 函數 **

你必須先用Python內置的open()函數打開一個文件,創建一個file對象,相關的方法纔可以調用它進行讀寫。

語法:file object = open(file_name [, access_mode][, buffering])

各個參數的細節如下:

  • file_name :file_name變量是一個包含了你要訪問的文件名稱的字符串值。
  • access_mode :access_mode決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個參數是非強制的,默認文件訪問模式爲只讀(r)。
  • buffering : 如果buffering的值被設爲0,就不會有寄存。如果buffering的值取1,訪問文件時會寄存行。如果將buffering的值設爲大於1的整數,表明了這就是的寄存區的緩衝大小。如果取負值,寄存區的緩衝大小則爲系統默認。
模式 描述
t 文本模式 (默認)。
x 寫模式,新建一個文件,如果該文件已存在則會報錯。
b 二進制模式。
+ 打開一個文件進行更新(可讀可寫)。
U 通用換行模式(不推薦)。
r 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
rb 以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。一般用於非文本文件如圖片等。
r+ 打開一個文件用於讀寫。文件指針將會放在文件的開頭。
rb+ 以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。一般用於非文本文件如圖片等。
w 打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb 以二進制格式打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。
w+ 打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb+ 以二進制格式打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。
a 打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
ab 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
a+ 打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。
ab+ 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。

下圖很好的總結了這幾種模式:

模式 r r+ w w+ a a+
+ + + +
+ + + + +
創建 + + + +
覆蓋 + +
指針在開始 + + + +
指針在結尾 + +

read() 方法從一個打開的文件中讀取一個字符串。需要重點注意的是,Python字符串可以是二進制數據,而不是僅僅是文字。

fileObject.read([count])

在這裏,被傳遞的參數是要從已打開文件中讀取的字節計數。該方法從文件的開頭開始讀入,如果沒有傳入count,它會嘗試儘可能多地讀取更多的內容,很可能是直到文件的末尾。

close() 方法:

當一個文件對象的引用被重新指定給另一個文件時,Python 會關閉之前的文件。用 close()方法關閉文件是一個很好的習慣。

tell() 方法告訴你文件內的當前位置, 換句話說,下一次的讀寫會發生在文件開頭這麼多字節之後。

seek(offset [,from]) 方法改變當前文件的位置。Offset變量表示要移動的字節數。From變量指定開始移動字節的參考位置。

如果from被設爲0,這意味着將文件的開頭作爲移動字節的參考位置。如果設爲1,則使用當前的位置作爲參考位置。如果它被設爲2,那麼該文件的末尾將作爲參考位置。

# 打開一個文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "讀取的字符串是 : ", str
 
# 查找當前位置
position = fo.tell()
print "當前文件位置 : ", position
 
# 把指針再次重新定位到文件開頭
position = fo.seek(0, 0)
str = fo.read(10)
print "重新讀取字符串 : ", str
# 關閉打開的文件
fo.close()
7.2 File 對象的屬性

一個文件被打開後,你有一個file對象,你可以得到有關該文件的各種信息。
以下是和file對象相關的所有屬性的列表:

屬性 描述
file.closed 返回true如果文件已被關閉,否則返回false。
file.mode 返回被打開文件的訪問模式。
file.name 返回文件的名稱。
file.softspace 如果用print輸出後,必須跟一個空格符,則返回false。否則返回true。

file 方法

序號 方法及描述
1 file.close()關閉文件。關閉後文件不能再進行讀寫操作。
2 file.flush()刷新文件內部緩衝,直接把內部緩衝區的數據立刻寫入文件, 而不是被動的等待輸出緩衝區寫入。
3 file.fileno()返回一個整型的文件描述符(file descriptor FD 整型), 可以用在如os模塊的read方法等一些底層操作上。
4 file.isatty()如果文件連接到一個終端設備返回 True,否則返回 False。
5 file.next()返回文件下一行。
6 file.read([size])從文件讀取指定的字節數,如果未給定或爲負則讀取所有。
7 file.readline([size])讀取整行,包括 "\n" 字符。
8 file.readlines([sizeint])讀取所有行並返回列表,若給定sizeint>0,則是設置一次讀多少字節,這是爲了減輕讀取壓力。
9 file.seek(offset[, whence])設置文件當前位置
10 file.tell()返回文件當前位置。
11 file.truncate([size])截取文件,截取的字節通過size指定,默認爲當前文件位置。
12 file.write(str)將字符串寫入文件,返回的是寫入的字符長度。
13 file.writelines(sequence)向文件寫入一個序列字符串列表,如果需要換行則要自己加入每行的換行符。
7.3 重命名和刪除文件

Python的os模塊提供了幫你執行文件處理操作的方法,比如重命名和刪除文件。
要使用這個模塊,你必須先導入它,然後纔可以調用相關的各種功能。
rename()方法:
rename()方法需要兩個參數,當前的文件名和新文件名。

語法:os.rename(current_file_name, new_file_name)

import os
 
# 重命名文件test1.txt到test2.txt。
os.rename( "test1.txt", "test2.txt" )

remove()方法, 你可以用remove()方法刪除文件,需要提供要刪除的文件名作爲參數。

語法:os.remove(file_name)

import os
 
# 刪除一個已經存在的文件test2.txt
os.remove("test2.txt")
7.4 Python裏的目錄

所有文件都包含在各個不同的目錄下,不過Python也能輕鬆處理。os模塊有許多方法能幫你創建,刪除和更改目錄。

函數 語法 解釋
mkdir() os.mkdir("newdir") 可以使用 os 模塊的 mkdir() 方法在當前目錄下創建新的目錄們。你需要提供一個包含了要創建的目錄名稱的參數。
chdir() os.chdir("newdir") 可以用 chdir() 方法來改變當前的工作目錄。像當與cdnewdir的目錄裏面了,chdir() 方法需要的一個參數是你想設成當前目錄的目錄名稱。
getcwd() os.getcwd() 顯示當前的工作目錄
rmdir() os.rmdir('dirname') 刪除目錄,目錄名稱以參數傳遞。在刪除這個目錄之前,它的所有內容應該先被清除。

八、類

類的專有方法:

  1. __init__ : 構造函數,在生成對象時調用
  2. __del__ : 析構函數,釋放對象時使用
  3. __repr__ : 打印,轉換
  4. __setitem__ : 按照索引賦值
  5. __getitem__: 按照索引獲取值
  6. __len__: 獲得長度
  7. __cmp__: 比較運算
  8. __call__: 函數調用
  9. __add__: 加運算
  10. __sub__: 減運算
  11. __mul__: 乘運算
  12. __truediv__: 除運算
  13. __mod__: 求餘運算
  14. __pow__: 乘方

九、Python3 標準庫概覽

9.1 os 模塊
>>> import  os
>>> os.getcwd()      # 獲取當前的工作目錄
'C:\\Python34'
>>> os.chdir('/server/accesslogs')   # 修改當前的工作目錄
>>> os.system('mkdir today')   # 執行系統命令 mkdir 
9.2 shutil 模塊
>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')
9.3 文件通配符

glob模塊提供了一個函數用於從目錄通配符搜索中生成文件列表:

>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
9.4 命令行參數

通用工具腳本經常調用命令行參數。這些命令行參數以鏈表形式存儲於 sys 模塊的 argv 變量。例如在命令行中執行 "python demo.py one two three" 後可以得到以下輸出結果:

>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']

大多腳本的定向終止都使用 sys.exit()

9.5 字符串正則匹配

re模塊爲高級字符串處理提供了正則表達式工具。對於複雜的匹配和處理,正則表達式提供了簡潔、優化的解決方案:

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'
9.6 數學

math 模塊爲浮點運算提供了對底層C函數庫的訪問:

>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0

random 提供了生成隨機數的工具。

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # random float
0.17970987693706186
>>> random.randrange(6)    # random integer chosen from range(6)
4
9.7 訪問互聯網

有幾個模塊用於訪問互聯網以及處理網絡通信協議。其中最簡單的兩個是用於處理從 urls 接收的數據的 urllib.request 以及用於發送電子郵件的 smtplib:

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     line = line.decode('utf-8')  # Decoding the binary data to text.
...     if 'EST' in line or 'EDT' in line:  # look for Eastern Time
...         print(line)

<BR>Nov. 25, 09:43:32 PM EST

>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('[email protected]', '[email protected]',
... """To: [email protected]
... From: [email protected]
...
... Beware the Ides of March.
... """)
>>> server.quit()

注意第二個例子需要本地有一個在運行的郵件服務器。

9.8 日期和時間

datetime模塊爲日期和時間處理同時提供了簡單和複雜的方法。
支持日期和時間算法的同時,實現的重點放在更有效的處理和格式化輸出。
該模塊還支持時區處理:

>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368
9.9 數據壓縮

以下模塊直接支持通用的數據打包和壓縮格式:zlib,gzip,bz2,zipfile,以及 tarfile。

>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章