可同時列印多個表示式,條件是用逗號分隔它們:在引數之間插入了乙個空格字元
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...