Python入門從這裏開始


1、變量

在Python中使用變量時,需要遵守一些規則和指南。違反這些規則將引發錯誤,而指南旨在讓你編寫的代碼更容易閱讀和理解。請務必牢記下述有關變量的規則。

  • 變量名只能包含字母、數字和下劃線。變量名可以字母或下劃線打頭,但不能以數字打頭,例如,可將變量命名爲message_1,但不能將其命名爲1_message。
  • 變量名不能包含空格,但可使用下劃線來分隔其中的單詞。例如,變量名greeting_message可行,但變量名greeting message會引發錯誤。
  • 不要將Python關鍵字和函數名用作變量名,即不要使用Python保留用於特殊用途的單詞,如print (請參見附錄A.4)。
  • 變量名應既簡短又具有描述性。例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好。
  • 慎用小寫字母l和大寫字母O,因爲它們可能被人錯看成數字1和0。

2、字符串

2.1、修改字符串的大小寫

name = "nsh is a good boy" 

print(name.title())

結果

Nsh Is A Good Boy

 

name = "nsh Is a Good boy"  
print(name.title()) 
print(name.lower()) 
print(name.upper())

結果:

Nsh Is A Good Boy 
nsh is a good boy 
NSH IS A GOOD BOY

2.2、合併(拼接)字符串

name = "Good boy!"  
hello = "hello," 
print(hello + name)

結果:

hello,Good boy!

2.3、使用製表符或換行符來添加空白

 

str = "Languages:\n\tPython\n\tC\n\tJavaScript" 
print(str)

結果:

Languages: 
    Python 
    C 
    JavaScript

2.4、刪除空白

2.4.1、刪除末尾空格

rstrip()方法:刪除字符串末尾空格,不會改變原有變量

str = "i am a good boy!  " 
str2 = "i am a good boy!" 
print(str.__eq__(str2)) 
print(str.rstrip().__eq__(str2))

結果:

False 
True

 

2.4.2、刪除字符串開頭空格

lstrip方法:刪除字符串開頭空格,不會改變原有變量

str = "  i am a good boy!" 
str2 = "i am a good boy!" 
str3 = "  i am a good boy!  " 
print(str.__eq__(str2)) 
print(str.lstrip().__eq__(str2)) 
print(str3.strip().__eq__(str2))

結果:

False 
True 
True

2.4.3、刪除字符串兩端空格

strip方法:刪除字符串兩端空格,不會改變變量。

代碼見2.4.2

3、數字

3.1、整數

3.2、浮點數

3.3、str() 避免類型錯誤

age = 23 
message = "Happy " + age + "rd Birthday!" 
print(message)

結果:

Traceback (most recent call last): 
    File "/Users/nsh/pythonWork/study/__main__.py", line 9, in <module> 
    message = "Happy " + age + "rd Birthday!" 
TypeError: can only concatenate str (not "int") to str

正確:

age = 23 
message = "Happy " + str(age) + "rd Birthday!" 
print(message)

結果:

Happy 23rd Birthday!

4、註釋

#開頭的行是註釋

("""或''') 三個雙引號或者三個單引號爲段註釋

5、列表

5.1、創建列表

5.1.1、創建字符串列表

arr = ["a","bc","nsh","hah"]

5.1.2、創建數值列表

5.1.2.1、使用range()函數創建

函數range() 讓你能夠輕鬆地生成一系列的數字。不是列表,要創建數字列表,可使用函數list() 將range() 的結果直接轉換爲列表。函數range() 時,還可指定步長

num = range(1,6) 
print(num) 
for n in num: 
    print(n) 

print("list --------") 
num2 = list(range(1,6)) 
print(num2)

結果:

range(1, 6)
1 
2 
3 
4 
5 
list -------- 
[1, 2, 3, 4, 5]

5.2、訪問列表

5.2.1、訪問某個位置的元素

arr = ["a","bc","nsh","hah"] print(arr[0])

5.2.2、遍歷列表

cars = ['bmw', 'audi', 'toyota', 'subaru'] 
for car in cars: 
    print(car)

5.3、修改、添加、刪除元素

5.3.1、修改元素

arr = ["a","bc","nsh","hah"] 
print(arr) 
arr[0]="b" 
print(arr)

結果:

['a', 'bc', 'nsh', 'hah']
['b', 'bc', 'nsh', 'hah']

5.3.2、添加元素

arr = ["a","bc","nsh","hah"] 
print(arr) 
arr.append("boy") 
print(arr)

結果:

['a', 'bc', 'nsh', 'hah'] 
['a', 'bc', 'nsh', 'hah', 'boy']

5.3.3、插入元素

insert() 可在列表的任何位置添加新元素,這種操作將列表中既有的每個元素都右 移一個位置

arr = ["i","am","a","good","boy"] 
print(arr) 
arr.insert(0,"hello") 
print(arr)

結果:

['i', 'am', 'a', 'good', 'boy'] 
['hello', 'i', 'am', 'a', 'good', 'boy']

5.3.4、刪除元素

5.3.4.1、使用del 刪除元素

arr = ["i","am","a","good","boy"] 
print(arr) 
arr.insert(0,"hello")
print(arr) 
del arr[0] 
print(arr)

結果:

['i', 'am', 'a', 'good', 'boy'] 
['hello', 'i', 'am', 'a', 'good', 'boy'] 
['i', 'am', 'a', 'good', 'boy']

5.3.4.2、使用pop刪除元素

pop() 可刪除並返回列表末尾的元素

arr = ["i","am","a","good","boy"] 
print(arr) 
arr.insert(0,"hello") 
print(arr) 
str = arr.pop() 
print(str) 
print(arr)

結果

['i', 'am', 'a', 'good', 'boy'] 
['hello', 'i', 'am', 'a', 'good', 'boy'] 
boy 
['hello', 'i', 'am', 'a', 'good']

pop() 可刪除並返回列表中某個位置的元素

arr = ["i","am","a","good","boy"] 
print(arr) 
arr.insert(0,"hello") 
print(arr) 
str = arr.pop(0) 
print(str) 
print(arr)

結果:

['i', 'am', 'a', 'good', 'boy'] 
['hello', 'i', 'am', 'a', 'good', 'boy']
 hello 
['i', 'am', 'a', 'good', 'boy']

5.3.4.3、根據值刪除元素

有時候,你不知道要從列表中刪除的值所處的位置。如果你只知道要刪除的元素的值,可使用方法remove() 。方法remove() 只刪除第一個指定的值。

arr = ["boy","i","am","a","good","boy"] 
print(arr) 
arr.remove("boy") 
print(arr)

結果:

['boy', 'i', 'am', 'a', 'good', 'boy'] 
['i', 'am', 'a', 'good', 'boy']

5.4、排序

sort() 對列表進行永久性排序

cars = ['bmw', 'audi', 'toyota', 'subaru'] 
print(cars) 
cars.sort() 
print(cars) 
cars.sort(reverse=False) 
print(cars) 
cars.sort(reverse=True) 
print(cars)

結果

['bmw', 'audi', 'toyota', 'subaru']
['audi', 'bmw', 'subaru', 'toyota'] 
['audi', 'bmw', 'subaru', 'toyota']
['toyota', 'subaru', 'bmw', 'audi']

sorted() 對列表進行臨時排序

cars = ['bmw', 'audi', 'toyota', 'subaru'] 
print(cars) 
print(sorted(cars)) 
print(cars)

結果:

['bmw', 'audi', 'toyota', 'subaru'] 
['audi', 'bmw', 'subaru', 'toyota'] 
['bmw', 'audi', 'toyota', 'subaru']

5.5、列表反轉

要反轉列表元素的排列順序,可使用方法reverse(),並非排序,只是將列表的元素反轉,永久性的

cars = ['bmw', 'audi', 'toyota', 'subaru'] 
print(cars) 
cars.reverse() 
print(cars)

結果:

['bmw', 'audi', 'toyota', 'subaru'] 
['subaru', 'toyota', 'audi', 'bmw']

5.6、列表的長度

cars = ['bmw', 'audi', 'toyota', 'subaru'] 
print(cars) 
print(len(cars))

結果:

['bmw', 'audi', 'toyota', 'subaru'] 
4

5.7、數值列表的簡單統計計算

num = [4,6,2,8] 
print("max:"+ str(max(num))) 
print("min:"+str(min(num))) 
print("sum:"+str(sum(num)))

結果:

max:8 
min:2 
sum:20

5.8、列表解析

列表解析 將for 循環和創建新元素的代碼合併成一行,並自動 附加新元素。

num = [v for v in range(1,5)] 
print(num) 
num2 = [v ** 2 for v in range(1,5)] 
print(num2)

結果:

[1, 2, 3, 4] 
[1, 4, 9, 16]

要使用這種語法,首先指定一個描述性的列表名,如squares ;然後,指定一個左方括號,並定義一個表達式,用於生成你要存儲到列表中的值。在這個示例中,表達式 爲value**2,它計算平方值。接下來,編寫一個for循環,用於給表達式提供值,再加上右方括號。在這個示例中,for循環爲for value in range(1,11),它將值 1~10提供給表達式value**2 。請注意,這裏的for 語句末尾沒有冒號。

5.9、列表切片

處理列表的部分元素——Python稱之爲切片,要創建切片,可指定要使用的第一個元素和最後一個元素的索引。切片會創建一個全新的列表

num = [2,5,8,2,1,6,7] 
num_new = num[0:4] 
print(num) 
print(num_new) 
num[0] = 1 
print(num) 
print(num_new)

結果:

[2, 5, 8, 2, 1, 6, 7] 
[2, 5, 8, 2] 
[1, 5, 8, 2, 1, 6, 7] 
[2, 5, 8, 2]

如果省略第一個索引,Python將自動從列表開頭開始;如果省略終止索引,終止於列表末尾。

5.9.1、遍歷切片

num = [2,5,8,2,1,6,7] 
num_new = num[0:4] 
print(num) 
print(num_new) 
for n in num_new: 
    print(n)

結果:

[2, 5, 8, 2, 1, 6, 7] 
[2, 5, 8, 2] 
2 
5 
8 
2

5.10、複製列表

通過切片實現

num = [2,5,8,2,1,6,7] 
num_copy = num[:] 
print(num) 
print(num_copy) 
print("modify data num[0] = 1") 
num[0]=1 
print(num) 
print(num_copy)

結果:

[2, 5, 8, 2, 1, 6, 7] 
[2, 5, 8, 2, 1, 6, 7] 
modify data num[0] = 1 
[1, 5, 8, 2, 1, 6, 7] 
[2, 5, 8, 2, 1, 6, 7]

6、元組(不可變列表)

列表非常適合用於存儲在程序運行期間可能變化的數據集。列表是可以修改的,這對處理網站的用戶列表或遊戲中的角色列表至關重要。然而,有時候你需要創建一系列不可修改的元素,元組可以滿足這種需求。Python將不能修改的值稱爲不可變的 ,而不可變的列表被稱爲元組 。

6.1、定義元組

元組看起來猶如列表,但使用圓括號而不是方括號來標識。定義元組後,就可以使用索引來訪問其元素,就像訪問列表元素一樣。

num = (2,5) 
print(num[0]) 
num[0] = 3 
print(num[0])

結果:

Traceback (most recent call last): 2 
File "/Users/nsh/pythonWork/study/__main__.py", line 12, 
    in <module> num[0] = 3 
TypeError: 'tuple' object does not support item assignment

6.2、遍歷元組

和列表一樣

6.3、修改元組變量

元組內元素不可變,但是元素變量是可變的

num = (2,5,6)
print(num) 
num = (4,5,7) 
print(num)

結果:

(2, 5, 6) 
(4, 5, 7)

7、if 語句

7.1、檢查多個條件

7.1.1、and 檢查多個條件

7.1.2、or 檢查多個條件

7.2、列表包含

cars = ['bmw', 'audi', 'toyota', 'subaru'] 
if "bmw" in cars: 
    print("包含") 
else: 
    print("不包含") 

if "nsh" not in cars: 
    print("不包含") 
else: 
    print("包含")

結果:

包含 
不包含

7.3、列表不包含

見7.2列表包含

8、字典

8.1、創建字典

dicts = {"name":"nsh","age":25} 
print(dicts)

8.2、訪問字典

8.2.1、訪問單個鍵值對

兩種訪問字典的方式,用法類似Java的HashMap

dicts = {"name":"nsh","age":25} 
print(dicts.get("name")) 
print(dicts["name"])

結果:

nsh
nsh

8.2.2、遍歷字典

dic={"name":"nsh","age":25,"score":98} 
for k,v in dic.items(): 
    print(k) 
    print(v)

結果:

name 
nsh 
age 
25 
score 
98

8.2.3、遍歷字典所有鍵

dic={"name":"nsh","age":25,"score":98} 
for k in dic.keys(): 
    print(k)

結果:

name 
age 
score

8.2.4、遍歷字典所有值

dic={"name":"nsh","age":25,"score":98} 
for v in dic.values(): 
    print(v)

結果:

nsh 
25 
98

8.3、添加、修改、刪除字典值

8.3.1、添加字典值

dicts = {"name":"nsh","age":25} 
print(dicts) 
dicts["sex"]="men" //dicts.__setitem__("sex","men") 
print(dicts)

結果

{'name': 'nsh', 'age': 25} 
{'name': 'nsh', 'age': 25, 'sex': 'men'}

8.3.2、修改字典值

dicts = {"name":"nsh","age":25} 
    print(dicts) 
    dicts["sex"]="men" 
    print(dicts) 
    dicts['name']='楊貴妃'//dicts.__setitem__("name","楊貴妃") 
    print(dicts)

結果

{'name': 'nsh', 'age': 25} 
{'name': 'nsh', 'age': 25, 'sex': 'men'} 
{'name': '楊貴妃', 'age': 25, 'sex': 'men'}

8.3.3、刪除字典值

dic={"name":"nsh","age":25} 
    print(dic) 
    del dic['name'] 
    print(dic)

結果:

{'name': 'nsh', 'age': 25} 
{'age': 25}

9、函數

9.1、函數定義

沒什麼好講的,每個語言都一樣

9.2、傳遞參數

9.2.1、位置實參

def test(a="0",b="0"): 
    print(a+b) 

test("1","2")//位置實參 
test("2","1")//位置實參 
test(a="1",b="2")//關鍵字實參 
test(b="2",a="1")//關鍵字實參 
test()

結果:

12 
21 
12 
12 
00

 

9.2.2、關鍵字實參

見9.2.1位置實參

9.2.3、傳遞任意數量的實參

有時候,你預先不知道函數需要接受多少個實參,好在Python允許函數從調用語句中收集任意數量的實參。

def test(*arr): 
    for ar in arr: 
        print(ar) 
    
test("a","b","dbsd")

結果:

a b dbsd

形參名*arr中的星號讓Python創建一個名爲arr 的空元組,並將收到的所有值都封裝到這個元組中。函數體內的print 語句通過生成輸出來證明Python能夠處理 使用一個值調用函數的情形,也能處理使用三個值來調用函數的情形。它以類似的方式處理不同的調用,注意,Python將實參封裝到一個元組中,即便函數只收到一個值也如此:

9.2.4、結合使用位置實參和任意數量實參

如果要讓函數接受不同類型的實參,必須在函數定義中將接納任意數量實參的形參放在最後。Python先匹配位置實參和關鍵字實參,再將餘下的實參都收集到最後一個形參中。

def test(a,*arr): p
    rint(a) 
    print("__________") 
    for ar in arr: 
        print(ar) 

test("a","b","dbsd")

結果:

a 
__________ 
b 
dbsd

 

9.2.5、使用任意數量的關鍵字實參

有時候,需要接受任意數量的實參,但預先不知道傳遞給函數的會是什麼樣的信息。在這種情況下,可將函數編寫成能夠接受任意數量的鍵—值對——調用語句提供了多少就接 受多少。

def test(a,*arr,**dic): 
    print(a) 
    print("__________") 
    for ar in arr: 
        print(ar) 
    
    for k,v in dic.items(): 
        print("k:"+k) 
        print("v:"+v) 

test("a","abc","d",k1="v1",k2="v2")

結果:

a 
__________ 
abc 
d 
k:k1 
v:v1 
k:k2 
v:v2

9.3、函數存儲在模塊中

9.3.1、導入整個模塊

Func.py

def func1(): 
    print("func1")

main.py

import Func 

def start(): 
    Func.func1() 

start()

只需編寫一條import 語句並在其中指定模塊名,就可在程序中使用該模塊中的所有函數。如果你使用這種import 語句導入了名爲module_name.py 的整個模塊,就可使用下面的語法來使用其中任何一個函數:

module_name.function_name()

9.3.2、導入特定的函數

//導入方法的語法如下: 
from module_name import function_name 
//通過用逗號分隔函數名,可根據需要從模塊中導入任意數量的函數: 
from module_name import function_0,function_1,function_2

9.3.3、使用as 給函數指定別名

如果要導入的函數的名稱可能與程序中現有的名稱衝突,或者函數的名稱太長,可指定簡短而獨一無二的別名 ——函數的另一個名稱,類似於外號。要給函數指定這種特殊外 號,需要在導入它時這樣做。

from Func import func1 as f 

def start(): 
    f() 

start()

9.3.4、導入模塊中的所有函數

from Func import * 

def start(): 
    func1() 

start()

10、類

10.1、創建和使用類

10.1.1、創建類

class Dog(object): 
    def __init__(self,name="",age=0,color=""): 
        self.__name = name 
        self.__age = age 
        self.color = color 

    def sit(self): 
        print(self.__name+" sit") 

    def roll_over(self): 
        print(self.__name+" roll over")
  1. 方法__init__()

__init__() 是一個特殊的方法,每當你根據Dog 類創建新實例時,Python都會自動運行它。在這個方法的名稱中,開頭和末尾各有兩個下劃線,這是一種約定,旨在避免Python默認方法與普通方法發生名稱衝突。

我們將方法__init__() 定義成了包含三個形參:self 、name 和age 。在這個方法的定義中,形參self 必不可少,還必須位於其他形參的前面。爲何必須在方法定義中包 含形參self 呢?因爲Python調用這個__init__() 方法來創建Dog 實例時,將自動傳入實參self 。每個與類相關聯的方法調用都自動傳遞實參self ,它是一個指向實例本身 的引用,讓實例能夠訪問類中的屬性和方法。我們創建Dog 實例時,Python將調用Dog 類的方法__init__() 。我們將通過實參向Dog() 傳遞名字和年齡;self 會自動傳遞,因此我們不需要傳遞它。每當我們根據Dog 類創建實例時,都只需給最後兩個形參(name 和age )提供值。

10.1.2、創建實例

dog = Dog("tom",3,"white")

10.1.3、訪問屬性和方法

dog.color//訪問屬性 
dog.sit()//調用方法

10.2、繼承

10.2.1、子類的方法 __init__()

class Car(): 
    def __init__(self,name="",color=""): 
        self.__name = name 
        self.__color = color 

class BMW(Car): 
    def __init__(self,name="",color="",price=0): 
        super().__init__(name,color) 
        self.__price = price 

if __name__=="__main__": 
    bmw = BMW("bmw", "red", 23) 
    pass

10.2.2、Python 2.7中的繼承

在Python 2.7中,繼承語法稍有不同

class Car(object): 
    def __init__(self,name="",color=""): 
        self.__name = name 
        self.__color = color 

class BMW(Car): 
    def __init__(self,name="",color="",price=0): 
        super(BMW,self).__init__(name,color) 
        self.__price = price 

if __name__=="__main__": 
    bmw = BMW("bmw", "red", 23) 
    pass

函數super() 需要兩個實參:子類名和對象self 。爲幫助Python將父類和子類關聯起來,這些實參必不可少。另外,在Python 2.7中使用繼承時,務必在定義父類時在括號內指 定object 。

10.2.3、子類定義自己的屬性、方法

class Car(): 
    def __init__(self,name="",color=""): 
        self.__name = name 
        self.__color = color 
    
    def run(self): 
        print(self.__name+"car is run") 

class BMW(Car): 
    def __init__(self,name="",color="",price=0): 
        super().__init__(name,color) 
        self.__price = price //自己的屬性 
    
    def getPrice(self): //自己的方法 
        return self.__price 

if __name__=="__main__": 
    bmw = BMW("bmw", "red", 23) 
    print(bmw.getPrice())

10.2.4、子類重寫父類方法

class Car(): 
    def __init__(self,name="",color=""): 
        self.__name = name 
        self.__color = color 
    def run(self): 
        print(self.__name+"car is run") 

class BMW(Car): 
    def __init__(self,name="",color="",price=0): 
        super().__init__(name,color) 
        self.__price = price 

    def getPrice(self): 
        return self.__price 

    def run(self): 
        print("bmw is run") 

if __name__=="__main__": 
    bmw = BMW("bmw", "red", 23) 
    print(bmw.getPrice()) 
    bmw.run()

10.3、導入類

10.3.1、導入單個類

下面來創建一個只包含Car 類的模塊。這讓我們面臨一個微妙的命名問題:在本章中,已經有一個名爲car.py的文件,但這個模塊也應命名爲car.py,因爲它包含表示汽車的代 碼。我們將這樣解決這個命名問題:將Car 類存儲在一個名爲car.py的模塊中,該模塊將覆蓋前面使用的文件car.py。從現在開始,使用該模塊的程序都必須使用更具體的文件 名,如my_car.py。下面是模塊car.py,其中只包含Car 類的代碼:

car.py

class Car(): 
    def __init__(self,name="",color=""): 
        self.__name = name 
        self.__color = color 
    def run(self): 
        print(self.__name+"car is run")

下面來創建另一個文件——my_car.py,在其中導入Car 類並創建其實例:

my_car.py

from car import Car 
my_new_car = Car('audi', 'red') 
my_new_car.run()

10.3.2、在一個模塊中存儲多個類

雖然同一個模塊中的類之間應存在某種相關性,但可根據需要在一個模塊中存儲任意數量的類。類Battery 和ElectricCar 都可幫助模擬汽車,因此下面將它們都加入模塊

car.py中:

class Car(): 
    def __init__(self,name="",color=""): 
        self.__name = name 
        self.__color = color 
    def run(self): 
        print(self.__name+"car is run") 

class BMW(Car): 
    def __init__(self,name="",color="",price=0): 
        super().__init__(name,color) 
        self.__price = price 

    def getPrice(self): 
        return self.__price 

    def run(self): 
        print("bmw is run")

my_car.py

from car import BMW 

my_bmw = BMW('bmw', 'red', 25) 
my_bmw.run()

10.3.3、從一個模塊中導入多個類

可根據需要在程序文件中導入任意數量的類。如果我們要在同一個程序中創建普通汽車和電動汽車,就需要將Car 和ElectricCar 類都導入:

from car import BMW,Car 

my_bmw = BMW('bmw', 'red', 25) 
my_bmw.run()

10.3.4、導入整個模塊

你還可以導入整個模塊,再使用句點表示法訪問需要的類。這種導入方法很簡單,代碼也易於閱讀。由於創建類實例的代碼都包含模塊名,因此不會與當前文件使用的任何名稱發生衝突。

import car 

my_bmw = car.BMW('bmw', 'red', 25) 
my_bmw.run()

10.3.5、導入模塊中的所有類

from module_name import *

不推薦使用這種導入方式,其原因有二。首先,如果只要看一下文件開頭的import 語句,就能清楚地知道程序使用了哪些類,將大有裨益;但這種導入方式沒有明確地指出你 使用了模塊中的哪些類。這種導入方式還可能引發名稱方面的困惑。如果你不小心導入了一個與程序文件中其他東西同名的類,將引發難以診斷的錯誤。這裏之所以介紹這種導 入方式,是因爲雖然不推薦使用這種方式,但你可能會在別人編寫的代碼中見到它。

10.4、Python標準庫

10.4.1、OrderedDict

字典讓你能夠將信息關聯起來,但它們不記錄你添加鍵—值對的順序。要創建字典並記錄其中的鍵—值對的添加順序,可使用模塊collections 中的OrderedDict 類。OrderedDict 實例的行爲幾乎與字典相同,區別只在於記錄了鍵—值對的添加順序。

11、文件和異常

11.1、從文件讀取數據

11.1.1、讀取整個文件

with open('test.txt') as f: 
    Str = f.read() 
    print(Str)

11.1.2、逐行讀取文件

if __name__=="__main__": 
    with open('test.txt') as f: 
        for l in f: 
            print(l)

我們通過對文件對象執行循環來遍歷文件中的每一行。我們打印每一行時,發現空白行更多了;爲何會出現這些空白行呢?因爲在這個文件中,每行的末尾都有一個看不見的換行符,而print 語句也會加上一個換行符,因此每行末尾都有兩個換行符:一個來自文件,另一 個來自print 語句。要消除這些多餘的空白行,可在print 語句中使用rstrip() :

if __name__=="__main__": 
    with open('test.txt') as f: 
        for l in f: 
            print(l.rstrip()) 

或 
if __name__=="__main__": 
    with open('test.txt') as f: 
        while True: 
            s = f.readline() 
            if s: 
                print(s) 
            else: 
                break

11.2、寫入文件

11.2.1、寫入空文件

if __name__=="__main__": 
    msg = "i love you" 
    with open('test.txt','w') as f:
         f.write(msg)

在這個示例中,調用open() 時提供了兩個實參。第一個實參也是要打開的文件的名稱;第二個實參('w' )告訴Python,我們要以寫入模式 打開這個文件。打開文件 時,可指定讀取模式 ('r' )、寫入模式 ('w' )、附加模式 ('a' )或讓你能夠讀取和寫入文件的模式('r+' )。如果你省略了模式實參,Python將以默認的只讀模式打 開文件。

如果你要寫入的文件不存在,函數open() 將自動創建它。然而,以寫入('w' )模式打開文件時千萬要小心,因爲如果指定的文件已經存在,Python將在返回文件對象前清空 該文件。

函數write() 不會在你寫入的文本末尾添加換行符,因此如果你寫入多行時沒有指定換行符,文件看起來可能不是你希望的那樣:

11.3、異常

Python使用被稱爲異常 的特殊對象來管理程序執行期間發生的錯誤。每當發生讓Python不知所措的錯誤時,它都會創建一個異常對象。如果你編寫了處理該異常的代碼,程序將繼續運行;如果你未對異常進行處理,程序將停止,並顯示一個traceback,其中包含有關異常的報告。

異常是使用try-except 代碼塊處理的。try-except 代碼塊讓Python執行指定的操作,同時告訴Python發生異常時怎麼辦。使用了try-except 代碼塊時,即便出現異常,程序也將繼續運行:顯示你編寫的友好的錯誤消息,而不是令用戶迷惑的traceback。

11.3.1、使用try-except 代碼塊

if __name__=="__main__": 
    try: 
        a = 1/1 
    except Exception as e: 
        print("error") 
    else: 
        print("o") 
    finally: 
        print("f")

通過將可能引發錯誤的代碼放在try-except 代碼塊中,可提高這個程序抵禦錯誤的能力。錯誤是執行除法運算的代碼行導致的,因此我們需要將它放到try-except 代碼塊中。這個示例還包含一個else 代碼塊;依賴於try 代碼塊成功執行的代碼都應放到else 代碼塊中;finally代碼塊無論try成功與否都會執行。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章