1. 程式人生 > >Python基本語法筆記

Python基本語法筆記

Python基本語法

@author 魯偉林
剛開始學習python,以前是一個java/c++黨。給出一份學習python時自己的筆記,方便自己回顧,也希望能給大家參考下。
學習python的網址是:http://www.runoob.com/python/python-object.html
gitHub地址: https://github.com/thinkingfioa/Notes/tree/master/python

Python是一種解釋型、面向物件、動態資料型別的高階程式設計語言。

Python語法的字尾名是以.py結尾,檔案開頭是:
#!/usr/bin/python 或 #!/usr/bin/env python
如果支援中文,請改成:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

Python 基礎語法

Python如何執行
  • 1. 使用互動是介面執行。
  • 2. 使用python test.py命令執行
  • 3. 利用./test.py執行
Python 識別符號
  • 1. 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變數)。如:_foo表示不能直接訪問的類屬性。
  • 2. 以雙下劃線開頭的 __foo 代表類的私有成員;
  • 3. 以雙下劃線開頭和結尾的 _ _ foo _ _ 代表Python 裡特殊方法專用的標識,如 _ _ init _ _() 代表類的建構函式。
行和縮排
  • 1. 學習Python與其他語言最大的區別:Python不使用{}來控制,而使用縮排來使用模組。
  • 2. 要注意區別4個空格和Tab鍵。很容易導致執行出錯。
#!/usr/bin/python
# -*- coding: UTF-8 -*-

print "hello world";

if True:
    print("Answer:");
    print("true");
else:
    print("Answer:");
    # 沒有嚴格縮排,在執行時會報錯
  print("false");
Python引號
  • 1. Python 可以使用引號( ' )、雙引號( " )、三引號( ''' 或 """ ) 來表示字串。
  • 2. 三引號(""")可以由多行組成,是編寫多行文字的快捷語法,常用於文件字串。
Python註釋
  • 1. python中單行註釋採用 # 開頭
  • 2. python 中多行註釋使用三個單引號(''')或三個雙引號(""")
Python空行
  • 函式之間或類的方法之間用空行分隔,表示一段新的程式碼的開始。類和函式入口之間也用一行空行分隔,以突出函式入口的開始。
Print輸出
  • print 預設輸出是換行的,如果要實現不換行需要在變數末尾加上逗號。
//換行
print("hello");
//不換行
print("hello"),
print("world");
多個語句組成的程式碼組
  • 1. 縮排相同的一組語句構成一個程式碼塊,我們稱之程式碼組。
  • 2. 子句: 像if、while、def和class這樣的複合語句,首行以關鍵字開始,以冒號( : )結束,該行之後的一行或多行程式碼構成程式碼組。
if expression: 
   suite 
elif expression:
   suite  
else:
   suite 

Python變數型別

變數可以指定不同的資料型別,這些變數可以儲存整數,小數或字元。

Python變數賦值
  • 1. 變數賦值不需要型別宣告
  • 2. 每個變數在使用前必須賦值,變數賦值以後該變數才會被建立
counter = 100 # 賦值整型變數
miles = 1000.0 # 浮點型
name = "John" # 字串
print(count),
print(miles),
print(name);
多個變數賦值
a = b = c = 1;
a, b, c = 1,2, "thinking";
標準資料型別
  • 1. Numbers(數字)
  • 2. String(字串)
  • 3. List(列表)
  • 4. Tuple(元組)
  • 5. Dictionary(字典)
Python數字(Numbers)
  • 1. Python支援: int(有符號整型), long(長整型: 3291930L), float(浮點型), complex(複數: a+bj 或者 complex(a,b).
  • 2. 可以使用del語句刪除物件的引用. 如: del var1, var2;
Python字串(String)
  • 1. 如果想實現字串擷取,可以使用變數 [頭下標:尾下標]。
  • 2. 加號(+)是字串連線運算子,星號(*)是重複操作
#!/usr/bin/python
# -*- coding: UTF-8 -*-

str = "Hello World!";

print(str); #輸出: Hello World!
print(str[0]); # 輸出: H
print(str[2:5]); # 輸出: llo
print(str[2:]); # 輸出: llo World!
print(str * 2); # 輸出2遍: Hello World!Hello World!
print(str + " TEST"); # 輸出: Hello World! TEST
Python 列表
  • 1. 列表使用'[]'來標識
  • 2. List(列表)是Python中使用最頻繁的資料型別。
  • 3. 列表的切割也可以用到變數 [頭下標:尾下標]
  • 4. 加號(+)是字串連線運算子,星號(*)是重複操作
  • 5. 列表允許更新,如 :list[2] = 123;
#!/usr/bin/python
# -*- coding: UTF-8 -*-

list = [ "runoob", 786 , 2.23, "john", 70.2 ];
tinylist = [123, "john"];

print(list); #輸出: ['runoob', 786, 2.23, 'john', 70.2]
print(list[0]); #輸出: runoob
print(list[1:3]); #輸出: [786, 2.23]
print(list[2:]); #輸出: [2.23, 'john', 70.2]
print(tinylist *2 ); #輸出: [123, 'john', 123, 'john']
print(list + tinylist); #輸出: ['runoob', 786, 2.23, 'john', 70.2, 123, 'john']
Python 元組
  • 1. 元組用'()'標識
  • 2. 元組是另一個數據型別,類似於List(列表)
  • 3. 元組不允許二次賦值,相當於只讀列表。如:tuple[2] = 1000非法訪問
tuply = ("runoob", 786 , 2.23, "john", 70.2 );
tinytuply = (123, "john");

print(tuply); #輸出: ['runoob', 786, 2.23, 'john', 70.2]
print(tuply[0]); #輸出: runoob
print(tuply[1:3]); #輸出: [786, 2.23]
print(tuply[2:]); #輸出: [2.23, 'john', 70.2]
print(tinytuply *2 ); #輸出: [123, 'john', 123, 'john']
print(tuply + tinytuply); #輸出: ['runoob', 786, 2.23, 'john', 70.2, 123, 'john']
Python字典
  • 1. 字典用"{ }"標識。
  • 2. 類似於其他語言的:Map
dict = {};
dict["one"] = "This is one";
dict[2] = "This is two";

tinydict = {"name": "john", "code":6734, "dept":"sales"};

print(dict["one"]); # 輸出: This is one
print(dict[2]); # 輸出: This is two
print(tinydict); # 輸出: {'dept': 'sales', 'code': 6734, 'name': 'john'}
print(tinydict.keys()); # 輸出: ['dept', 'code', 'name']
print(tinydict.values()); # 輸出: ['sales', 6734, 'john']
Python資料型別轉換
  • int('12', 16),就是說:12是一個16進位制的。輸出為: 18.
函式 描述
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 運算子

Python算術運算子
運算子 描述 舉例
** a**b 為10的20次方, 輸出結果 100000000000000000000
// 取整除 9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0
Python邏輯運算子
運算子 描述 舉例
and x and y 布林"與", 類似於: &&
or x or y 布林"或", 類似於:或
not not x 布林"非", 類似於: !
Python 成員運算子
運算子 描述
in 如果在指定的序列中找到值返回 True,否則返回 False
not in 如果在指定的序列中沒有找到值返回 True,否則返回 False
a = 7;
b = 2;
list = [1,2,3,4,5];

if(a in list):
    print("a is in list");
else:
    print(" a is not list"); # 輸出

if(b in list):
    print("b is in list"); # 輸出
else:
    print("b is not list");
Python 身份運算子
  • 1. is是傳遞地址
  • 2. == 是比較值。
運算子 描述
is is 是判斷兩個識別符號是不是引用自一個物件
is not is not 是判斷兩個識別符號是不是引用自不同物件
//運用指令碼執行,是同一個物件。
a = 7;
b = 7;

if(a is b):
    print("a is b"); # 輸出
else:
    print(" a is not list"); 

b = 10;
if(a is b):
    print("a is b"); 
else:
    print("a is not b"); # 輸出

Python條件語句

if 判斷語句1:
    執行語句....;
elif 判斷語句2:
    執行語句....;
else:
    執行語句3;
num = 9
if(num >= 0 and num <= 10):    # 判斷值是否在0~10之間
    print 'hello'; # 輸出結果: hello

Python 迴圈語句

Python的While語句
numbers = [12, 37, 5, 42, 8, 3];
even = [];
odd = [];
while(len(numbers) > 0):
    number = numbers.pop();
    if(number%2==0):
        even.append(number);
    else:
        odd.append(number);
Python的While-else語句
  • 當while後的條件不滿足時,執行:else語句
count = 0
while(count < 5):
   print count, " is  less than 5"
   count = count + 1
else:
   print count, " is not less than 5"
Python的for迴圈語句
for(letter in 'Python'):     # 第一個例項
   print '當前字母 :', letter
 
fruits = ['banana', 'apple',  'mango']
for(fruit in fruits):        # 第二個例項
   print '當前水果 :', fruit
 
print "Good bye!"
Python的for-else語句
  • 當for後的條件不滿足時,執行:else語句

Python的pass語句

  • 1. pass是空語句,為了保證程式結構的完整性。
  • 2. pass不做任何事,一般用作佔位符

Python Number(數字)

  • 1. Python支援: int(有符號整型), long(長整型: 3291930L), float(浮點型), complex(複數: a+bj 或者 complex(a,b).
  • 2. 可以使用del語句刪除物件的引用. 如: del var1, var2;
Python資料型別轉換
  • int('12', 16),就是說:12是一個16進位制的。輸出為: 18.
函式 描述
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數學函式
函式 描述
abs(x) 返回數字的絕對值,如abs(-10) 返回 10
cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
exp(x) 返回e的x次冪(ex),如math.exp(1) 返回2.718281828459045
fabs(x) 返回數字的絕對值,如math.fabs(-10) 返回10.0
ceil(x) 返回數字的上入整數,如math.ceil(4.1) 返回 5
floor(x) 返回數字的下舍整數,如math.floor(4.9)返回 4
log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x) 返回以10為基數的x的對數,如math.log10(100)返回 2.0
max(x1, x2,...) 返回給定引數的最大值,引數可以為序列。
min(x1, x2,...) 返回給定引數的最小值,引數可以為序列。
modf(x) 返回x的整數部分與小數部分,兩部分的數值符號與x相同,整數部分以浮點型表示。
pow(x, y) x**y 運算後的值。
round(x [,n]) 返回浮點數x的四捨五入值,如給出n值,則代表舍入到小數點後的位數。
sqrt(x) 返回數字x的平方根
Python隨機數函式
函式 描述
choice(seq) 從序列的元素中隨機挑選一個元素,如random.choice(range(10)),從0到9中隨機挑選一個整數
randrange ([start,] stop [,step])從指定範圍內,按指定基數遞增的集合中獲取一個隨機數,基數預設值為1
random() 隨機生成下一個實數,它在[0,1)範圍內
seed([x]) 改變隨機數生成器的種子seed
shuffle(list) 將序列的所有元素隨機排序
uniform(x, y) 隨機生成下一個實數,它在[x,y]範圍內
Python數學常量
常量 描述
pi 數學常量pi(圓周率)
e 數學常量e,e是自然數

Python字串

Python字串格式化
符號 描述
%c 格式化字元及其ASCII碼
%s 格式化字串
%d 格式化整數
%u 格式化無符號整型
%o 格式化無符號八進位制數
%x 格式化無符號十六進位制數
%X 格式化無符號十六進位制數(大寫)
%f 格式化浮點數字,可指定小數點後的精度
%e 用科學計數法格式化浮點數
%E 作用同%e,用科學計數法格式化浮點數
%g %f和%e的簡寫
%G %f 和 %E 的簡寫
%p 用十六進位制數格式化變數的地址
Python三引號
  • 三引號(""")可以將字串變成多行,且字串中可以包括一些特殊字元

Python列表

  • 列表的資料項不需要具有相同的型別
刪除列表元素
list = ["thinking", "fioa", 123, 456];
print list # 輸出: ['thinking', 'fioa', 123, 456]
del list[2]
print list # 輸出: ['thinking', 'fioa', 456]
Python列表擷取
表示式 結果 描述
L[2] 'fioa' 讀取列表中第三個元素
L[-2] 123 讀取列表中倒數第二個元素
L[1:] ['fioa', 123, 456] 從第二個元素開始擷取列表
list2 = ["thinking", "fioa", 123, 456]
print list2[2]  # 輸出 123
print list2[-3]  # 輸出 fioa
print list2[1:]  # 輸出 ['fioa', 123, 456]

Python元組

  • 1. 元組只有一個元素,需要在元素後面新增逗號。如:tup1 = (50,);
  • 2. 元組不能修改,意味著元組不能刪除,更新等更改型操作。

Python字典

刪除字典元素
  • 1. 能刪除單一的元素,也能刪除整個字典。還可以清空整個字典。
  • 2. 鍵必須不可變,所以可以用數字,字串或元組充當。但是列表不能作為key。
dict = {"Name": "thinking", "age":18, "lover":"ppp"}
print dict  #輸出 {'age': 18, 'Name': 'thinking', 'lover': 'ppp'}
del dict["lover"]
print dict  #輸出 {'age': 18, 'Name': 'thinking'}
dict.clear()
del dict

Python日期和時間

  • 1. Python提供了time和calendar模組用於格式化時間和日期。
  • 2. 時間間隔是以秒為單位的浮點數。
ticks = time.time()
print ticks  # 輸出:1508668369.94
格式化日期
  • 使用time模組的strftime方法來格式化日期
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  # 輸出: 2017-10-22 18:36:56
print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())  # 輸出: Sun Oct 22 18:36:56

# 將格式化轉換成時間戳
a = "Sun Oct 22 18:36:56 2017"
print time.mktime(time.strptime(a, "%a %b %d %H:%M:%S %Y"))  # 輸出: 1508668616.0
獲取某月日曆
cal = calendar.month(2017, 2)
'''輸出:
   February 2017
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
'''
print cal

Python函式

定義一個函式
  • 1. 函式程式碼塊以def關鍵字開頭,後接函式識別符號號名稱和圓括號()
  • 2. 任何傳入引數和自變數必須放在圓括號中間。圓括號之間可以用於定義引數
  • 3. 函式的第一行語句可以選擇性地使用文件字串(用於存放函式說明)
  • 4. 函式內容以冒號起始,並且縮排
  • 5. return [表示式]結束函式,選擇性地返回一個值給呼叫方。不帶表示式的return相當於返回 None
def functionname(parameters):
    """函式說明"""
    function_suite
    return [expression]
    
函式呼叫
def printme(str):
    """列印任何傳入的字串"""
    print str
    return


printme("thinking")  # 輸出:thinking
printme("fioa")  # 輸出:fioa
引數傳遞

在Python中,string,tuples和numbers是不可更改的物件,而list, dict等則是可修改的物件.

  • 1. 不可變型別:變數賦值 a=5 後再賦值 a=10,這裡實際是新生成一個int值的物件10,再讓a指向它,5就被丟棄。
  • 2. 可變型別:變數賦值 la=[1,2,3,4]後再賦值la[2]=5則是將list la的第三個元素更改了。

python函式的引數傳遞:

  • 1. 不可變型別:類似於c++的值傳遞,如整數,字串,元組。如fun(a),傳遞的只是a的值。如果在函式內部修改了a的值,對傳入的值沒有任何影響.
  • 2. 可變型別:類似C++的引用傳遞,如列表。如fun(la)傳入,函式內部修改了la,對傳入的值有影響。
python傳不可變物件例項
def changeint(a):
    a = 10


b = 2
changeint(b)
print b  # 結果: 2
python傳可變物件例項
def changelist(mylist):
    mylist.append("thinking")
    return
    

mylist = [1, 2, 3]
print mylist  # 輸出:[1, 2, 3]
changelist(mylist)
print mylist  # 輸出:[1, 2, 3, 'thinking']

總結:

  • 1. 不可變型別(string, number, tuples)作為引數傳值到函式中,如果在函式中修改,無效
  • 2. 可變型別(list, dict)作為引數傳值到函式中,如果在函式中修改,有效
函式引數

呼叫函式時可使用的引數型別

  • 1. 必備引數
  • 2. 關鍵字引數
  • 3. 預設引數
  • 4. 不定長引數
必備引數

想呼叫函式,必須傳入對應的引數

def printmustargument(str):
    """必備引數"""
    print str
    return


str = "ppp"
printmustargument(str)  # 輸出:ppp
關鍵字引數

使用關鍵字引數,允許呼叫函式時引數的順序可以不一致。

def printkeywordargument(name, age):
    """關鍵字函式"""
    print "Name: ", name
    print "Age:", age


printkeywordargument(name="ppp", age=35)  # 輸出: Name: ppp   Age: 35
預設引數

呼叫函式時,預設引數沒有傳入,使用預設值

def printdefaultargument(name, age=20):
    """預設引數"""
    print "Name: ", name
    print "Age:", age


printdefaultargument(name="thinking_fioa")  # 輸出: Name: thinking_fioa   Age: 20
不定長引數

函式接受任意長度的引數

def printmoreargument(arg1, *vartuple):
    """不定長引數"""
    print arg1
    for var in vartuple:
        print var
    return


printmoreargument(10)  # 輸出:10
printmoreargument(10, 20, 30)  # 輸出: (10, 20, 30)

匿名函式

python使用lambda來建立匿名函式

  • 1. lambda只是一個表示式,函式體比def簡單很多
  • 2. lambda函式擁有自己的名稱空間,除了自有引數列表和全域性名稱空間裡的引數外,其他都不能訪問
語法
  • lambda [arg1 [, arg2,... argn]]: expression
sum = lambda arg1, arg2: arg1 + arg2

print "sum is: ", sum(10, 20)  # 輸出: 30

return語句

  • return語句[表示式],將計算結果返回
def sumtwonumber(arg1, arg2):
    return arg1+arg2


print sumtwonumber(100, 200)  # 輸出: 300

變數作用域

  • 1. 全域性變數:定義在函式外的變數
  • 2. 區域性變數:定義在函式內的變數,只能在函式內部訪問。
  • 3. 全域性變數想作用與函式內,需要加一個global
total = 1


def sumtwonumber(arg1, arg2):
    total = arg1 + arg2
    print "函式內total: ", total  # 輸出: 函式內total: 300
    return total


sumtwonumber(100, 200)  # 輸出: 300
print "全域性變數: ", total  # 輸出: 全域性變數: 1

模組

  • Python模組(Module),是一個Python檔案,以.py結尾
support.py是:
def print_func(var):
    print "Hello ", var
    return


test.py是
import support

support.print_func("thinking")  # 輸出:Hello thinking
from ... import
  • 語法: from support import print_func
搜尋路徑

當匯入一個模組,Python解析器搜尋模組的順序:

  • 1. 當前目錄
  • 2. 如果當前目錄沒有,搜尋shell變數PYTHONPATH下的每個目錄
  • 3. 如果找不到,Python會檢視預設路徑。UNIX路徑地址:/usr/local/lib/python
名稱空間和作用域

當函式中想修改全域性變數,需要使用關鍵字:global

 Money = 2000


def add_money():
    global Money
    Money = Money + 200


print Money  # 輸出:2000
add_money()
print Money  # 輸出:2200
dir()函式

dir()函式是一個排好序的字串列表,內容是一個模組裡定義過的名字

import support

print dir(support)  # 輸出:['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'print_func']
globals() 和 locals() 函式
  • 1. globals() 和 locals() 函式可被用來返回全域性和區域性名稱空間裡的名字。
  • 2. 在函式內部呼叫 locals(),返回的是所有能在該函式裡訪問的命名。
  • 3. 在函式內部呼叫 globals(),返回的是所有在該函式裡能訪問的全域性名字。
  • 4. 兩個函式的返回型別都是字典。所以名字們能用 keys() 函式摘取。
reload()函式

當一個模組被匯入到一個指令碼,模組頂層部分的程式碼只會被執行一次。如果想從新執行模組裡頂層部分的程式碼,需要使用reload()函式。

  • reload(module_name)
python包
  • 1. 包是一個分層次的檔案目錄結構,可以包含模組,子包和子包的子包等組成的Python的應用環境
  • 2. 包其實就是資料夾,但是資料夾下,一定要有檔案:__init__.py。檔案__init__.py用於標識當前資料夾是一個包
定義包:package_runoob和檔案:runoob1.py

def runoob1():
    print "I am runoob1"
    
在測試檔案: test.py
import package_runoob.runoob1

package_runoob.runoob1.runoob1()  # 輸出: I am runoob1

Python檔案I/O

  • 1. File物件方法:file物件提供了操作檔案的一系列方法
  • 2. Os物件方法:提供了處理檔案及目錄的一系列方法
讀取鍵盤輸入

Python提供了兩個內建函式從標準輸入讀取一行文字,預設的標準輸入是鍵盤

  • 1. raw_input
  • 2. input
raw_input

raw_input(提示文字)函式從標準輸入讀取一行,並返回一個字串(去掉結尾的換行符)

str = raw_input("請輸入: ")  # 輸入: thinking
print "輸入內容是:", str  # 輸出: thinking
input

input函式和raw_input函式基本類似。但input可以接收一個Python表示式輸入,並將運算結果返回

str2 = input("請輸入: ")  # 輸入: [x*5 for x in range(2,10,2)]
print "輸入內容是:", str2  # 輸出: [10, 20, 30, 40]

注: range函式用法解釋: range(start, end, step)

開啟和關閉檔案
Open方法

Python函式內建一個open()函式

  • 1. 語法: file object = open(filename, [, accesscode], [, buffering])
  • 2. file_name變數是訪問檔案的名稱字串
  • 3. access_code是決定開啟檔案的模式:只讀,寫入,追加等
  • 4. buffering:如果buffering的值設為0,就不會有寄存。如果buffering的值設定為1,訪問檔案會寄存行
close方法

File物件的close()方法:重新整理緩衝區裡任何還沒寫的資訊,並關閉該檔案

write方法
  • 1. write()可將任何字串寫入開啟的檔案。主要注意的是:Python字串可以是二進位制資料,而不是僅僅是文字
  • 2. write()方法不會在字串的結尾加上換行符('\n')
read方法
  • fileObject.read([count])。從已開啟的檔案中讀取位元組數,如果沒有傳,則讀入整個檔案尾
fileObject = open("test_io_file.txt", "rb+")
fileLine = fileObject.read()
print "context is : ", fileLine
fileObject.close()
檔案定位
  • 1. tell()方法返回檔案內當前讀取的位置。也就是說:下次讀取的起點位置
  • 2. seek(offset,[, from])方法改變當前檔案的偏移量。
    • from = 0:從檔案開頭位置參考
    • from = 1:使用檔案的當前位置
    • from = 2:從檔案的末尾位置開始
重新命名和刪除檔案

Python提供os模組,幫助執行檔案處理操作的方法,比如:重新命名和刪除檔案

  • os.rename(currentfilename, newfilename)
  • os.remove(file_name)
Python的目錄管理
  • 1. mdkir()方法:建立新的目錄
  • 2. chdir()方法:用chdir()方法來改變當前的目錄
  • 3. getcwd()方法:顯示當前的工作目錄
  • 4. rmdir()方法:刪除目錄,目錄名稱以引數傳遞。注意:刪除這個目錄之前,所有內容必須已經被刪除

Python異常處理

異常處理

try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常資訊並處理

try:
<語句>        #執行別的程式碼
except <名字>:
<語句>        #如果在try部份引發了'name'異常
except <名字>,<資料>:
<語句>        #如果引發了'name'異常,獲得附加的資料
else:
<語句>        #如果沒有異常發生

說明:

  • 1. try/except語句理解和java的一樣,除了else有點區別
  • 2. 如果try子句執行沒有發生異常,python就會執行else語句
使用except而不帶任何異常型別
  • try/except語句中,如果except不帶任何異常,表示捕獲所有的異常
try:
    正常的操作...
except:
    發生異常,執行這塊程式碼...
else:
    如果沒有異常執行這塊程式碼
使用except而帶多種異常型別
  • 使用相同的except語句而處理多個異常資訊
try:
    正常的操作...
except(Exception1[, Exception2[,...ExceptionN]]]):
   發生以上多個異常中的一個,執行這塊程式碼...
else:
    如果沒有異常執行這塊程式碼
try-finally語句
  • try-finally語句中,無論如何都會執行finally語句
try:
    正常的操作...
except(Exception1):
    發生異常,執行這塊程式碼...
finally:
    無論如何都會執行這段程式碼
異常的引數
  • 異常帶上引數,幫助理解異常原因。在except後面加上Argument引數
def temp_convert(var):
    try:
        return int(var)
    except ValueError, Argument:
        print "reason: ", Argument


temp_convert("abc")  # 輸出:reason:  invalid literal for int() with base 10: 'abc'
觸發異常
  • 1. 使用raise語句來觸發異常
  • 2. 語法:raise [Exception [,args] ]
def throw_excep(var):
    print "function start..."
    raise Exception("you win", var)


try:
    throw_excep("abcd")
except Exception:
    print "catch exception"
else:
    print "no problem."   # 輸出: no problem
使用者自定義異常
  • 建立一個新的異常類,應該繼承自Exception類
class Networkerror(Exception):
    def __init__(self, arg):
        self.args = arg

try:
    raise Networkerror("Bad hostname")
except Networkerror, argument:
    print argument.args  # 輸出: ('B', 'a', 'd', ' ', 'h', 'o', 's', 't', 'n', 'a', 'm', 'e')