Python基礎教程 第5章 條件 迴圈及其他語句

2021-09-10 11:16:23 字數 4887 閱讀 8890

可同時列印多個表示式,條件是用逗號分隔它們:在引數之間插入了乙個空格字元

print

('age:',42

)# age: 42

name =

'gumby'

salutation =

'mr.'

greeting =

'hello,'

print

(greeting, salutation, name)

# hello, mr. gumby

從模組匯入時,通常使用import somemodule或者使用from somemodule import somefunction。還有一種辦法:在語句末尾新增as子句並指定別名。

import math as foobar

foobar.sqrt(

4)

可同時(並行)給多個變數賦值,使用這種方式還可交換多個變數的值。

x,y,z =1,

2,3print

(x,y,z)

# 1,2,3

x,y = y,x

print

(x, y, z)

# 2,1,3

實際上,這裡執行的操作稱為序列解包(或可迭代物件解包):將乙個序列(或任何可迭代 物件)解包,並將得到的值儲存到一系列變數中。

values =1,

2,3# values (1,2,3)

x, y, z = values

# x = 1

scoundrel =

key, value = scoundrel.popitem(

)# key = 'girlfriend'

這在使用返回元組(或其他序列或可迭代物件)的函式或方法時很有用。這讓函式能夠返回被打包成元組的多個值,然後通過一條賦值語句輕鬆地訪問這些值。

鏈式賦值是一種快捷方式,用於將多個變數關聯到同乙個值。

x = y = somefunction()

從而寫成x += 1。這稱為增強賦值,適用於所有標準運算子,如*、/、%等。

**塊是一組語句,可在滿足條件時執行(if語句),可執行多次(迴圈),等等。**塊是 通過縮排**(即在前面加空格)來建立的。

在python中,使用冒號(:)指出 接下來是乙個**塊,並將該**塊中的每行**都縮排相同的程度。發現縮排量與之前相同時, 你就知道當前**塊到此結束了。

if語句,讓你能夠有條件地執行**。這意味著如果條件(if和冒號之間的表示式) 為前面定義的真,就執行後續**塊(這裡是一條print語句);如果條件為假,就不執行(你應 該猜到了)。可使用else子句增加一種選擇。

還有乙個與if語句很像的「親戚」,它就是條件表示式——c語言中三目運算子的python版本。

status =

"friend"

if name.endswith(

"gumby"

)else

"stranger"

要檢查多個條件,可使用elif。你可將if語句放在其他if語句塊中。

is檢查兩個物件是否相同(而不是相等)。變數x和y指向同 乙個列表,而z指向另乙個列表(其中包含的值以及這些值的排列順序都與前乙個列表相同)。這 兩個列表雖然相等,但並非同乙個物件。

x = y =[1

,2,3

] z =[1

,2,3

]x == y

# true

x == z

# true

x is y

# true

x is z

# false

總之,==用來檢查兩個物件是否相等,而is用來檢查兩個物件是否相同(是同乙個物件)。

運算子and是乙個布林運算子。它接受兩個真值,並在這兩個值都為真時返回真,否則返回 假。還有另外兩個布林運算子:or和not。通過使用這三個運算子,能以任何方式組合真值。

短路邏輯(或者延遲求值)

讓程式在錯誤條件出現時立即崩潰勝過以後再崩潰,可在語句中使用關鍵字assert。還可在條件後面新增乙個字串,對斷言做出說明。

age =-1

assert

0< age <

100,

'the age must be realistic'

x=

1while x <=

100:

print

(x)

x +=

1

為序列(或其他可迭代物件)中每個元素執行 **塊。

words =

['this'

,'is'

,'an'

,'ex'

,'parrot'

]for word in words:

print

(word)

list

(range(0

,10))

# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

建立範圍的內建函式range。範圍類似於切片。它們包含起始位置(這裡為0),但不包含結束位置(這裡為10)。

可像遍歷序列那樣使用普通的for語句。d.items以元組的方式返回鍵值對

d =

for key in d:

print

(key,

'corresponds to'

, d[key]

)for key, value in d.items():

print

(key,

'corresponds to'

, value)

有時候,你可能想同時迭代兩個序列。假設有下面兩個列表:如果要列印名字和對應的年齡,可以像下面這樣做:

names =

['anne'

,'beth'

,'george'

,'damon'

] ages =[12

,45,32

,102

]for i in

range

(len

(names)):

print

(names[i]

,'is'

, ages[i]

,'years old'

)

乙個很有用的並行迭代工具是內建函式zip,它將兩個 序列「縫合」起來,並返回乙個由元組組成的序列。「縫合」後,可在迴圈中將元組解包。

for name, age in

zip(names, ages)

:print

(name,

'is'

, age,

'years old'

)

在有些情況下,你需要在迭代物件序列的同時獲取當前物件的索引。使用內建函式 enumerate。

for index, string in

enumerate

(strings):if

'***'

in string:

strings[index]

='[******ed]'

要結束(跳出)迴圈,可使用break。語句continue沒有break用得多。它結束當前迭代,並跳到下一次迭代開頭。這基本上意味 著跳過迴圈體中餘下的語句,但不結束迴圈。

from math import sqrt

for n in

range(99

,0,-

1): root = sqrt(n)

if root ==

int(root)

:print

(n)break

列表推導是一種從其他列表建立列表的方式。列表推導的工作原 理非常簡單,有點類似於for迴圈。

[x * x for x in

range(10

)]# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

[x*x for x in

range(10

)if x%3==

0]# [0, 9, 36, 81]

[(x, y)

for x in

range(3

)for y in

range(3

)]#

有時候什麼都不用做。在你編寫**時,可將其用作佔位符。

if name ==

'ralph auldus melish'

:print

('welcome!'

)elif name ==

'enid'

:# 還未完成......

pass

elif name ==

'bill gates'

:print

('access denied'

)

x =

1del x

函式exec將字串作為**執行。

exec

("print('hello, world!')"

)# hello, world!

函式exec主要用於動態地建立**字串。在大多數情況下,還應向它傳遞乙個 命名空間——用於放置變數的地方;

eval是乙個類似於exec的內建函式。exec執行一系列python語句,而eval計算用字串表示 的python表示式的值,並返回結果(exec什麼都不返回,因為它本身是條語句)。

Python基礎教程 第8章 異常

1.自定義異常 繼承exception 1.自定義異常類 方法 從exception類繼承 class somecustomexception exception pass2.處理異常 1 捕捉異常 try except try x input enter the first number y in...

python基礎教程(5)

一 函式的高階特性。1,map map deff x returnx x r map f,1,2,3 map 函式接收兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。print list r r map f,print ...

Python基礎教程 第3章 字串

所有標準的序列操作 索引,分片,乘法,判斷成員資格,求長度,最大值,最小值 對字串都是同樣適用的。3.1 字串是不可變的 在python中,字串和元組一樣,都是不可變的,即一經建立就不可更改它。以下的分片賦值是不合法的 website website 3 com traceback most rec...