標籤:too nan 指定 nts git 有用 range tps 課程
1.神奇的print函數
??print函數相信讀者一定對它不陌生,因為在前面的章節,幾乎每個例子都使用了print函數,這個函數的功能就是在控制台輸出文本。不過print在輸出文本時還可以進行一些設定,以及輸出多參數字串。
??如果為print函數傳入多個參數值,那麼print函數會將所有的參數值首尾相接輸出。
# 輸出結果:a b c d eprint("a","b","c","d","e");
??我們可以看到,上面的這行代碼輸出了a到e,共5個字母。在Python控制台中輸出了“a b c d e”。很明顯是將這5個字元首尾相接輸出了。不過這些字母之間用空格分隔,這是print函數預設的分隔字元,用於分隔輸出的多個參數值,這個預設設定是非常有用的,例如,執行下面的代碼,會在等號(=)後面加一個空格。
print("name =", "Bill")print("age =", 30)
輸出結果如下:
name = Bill
age = 30
??其中等號(=)前面的空格是第1個參數值包含的。
??print函數會為除了第1個參數值以外的其它參數值前面添加一個空格,這樣做,在需要用空格分隔的情境下,就不需要在每一個參數值前面添加空格了。
??不過這種預設設定有利有弊,在不需要用空格分隔時,print函數仍然會添加空格。例如,要輸出字串“Apple,Orange,Banana”。其中Apple、Orange和Banana之間用逗號(,)分隔,逗號(,)與英文單詞之間沒有空格。如果按前面的做法,會有如下的代碼輸出這行字串。
print("Apple",",", "Orange",",","Banana")
輸出的結果如下:
Apple , Orange , Banana
print("Apple",",", "Orange",",","Banana")
??很明顯,逗號(,)前後都有空格。當然,可以將逗號(,)與前面的英文單詞合并,但逗號(,)與後面的英文單詞之間仍然會有空格。
print("Apple",",", "Orange",",","Banana")
解決這個問題的方法很多,例如,可以用傳統的字串相加的方式輸出字串“Apple,Orange,Banana”。
print("Apple" + "," + "Orange" + "," + "Banana")
??現在我們要用print函數特有的方法解決這個問題,就是修改預設的多參數值分隔字元。在print函數最後添加“sep=","”,就可以將分隔字元從空格改成逗號(,)。現在可以直接使用下面的代碼輸出字串“Apple,Orange,Banana”。
print("Apple", "Orange","Banana", sep=",")
輸出結果。
Apple,Orange,Banana
??print函數輸出字串時,預設會在字串結尾添加分行符號(\n),這樣每次調用print函數輸出字串,都會另起一行。不過有時我們希望調用多次print函數都在同一行輸出,這時我們可以在print函數最後加上“end=" "”,讓最後一個輸出字串結尾符變成空格,而不是原來的“\n”,當然,也可以將結尾符設成長度為0的字串,這樣多次使用print函數輸出的結果就會首尾相接了,中間沒有任何分隔字元。
print("a",end="");print("b",end="");print("c");
輸出結果:abc
??下面的例子示範了print函數輸出多參數值,修改預設多參數值分隔字元,以及修改輸出字串結尾字元的方法。
# 輸出用空格分隔的多參數值print("name =", "Bill")# 輸出用空格分隔的多參數值print("age =", 30)# 使用加號(+)連接字串print("Apple" + "," + "Orange" + "," + "Banana")# 修改多參數值分隔字元為逗號(,),然後輸出多參數值print("Apple", "Orange","Banana", sep=",")# 修改多參數值分隔字元為“&”,然後輸出多參數值print("Can","you","tell","me", "how", "to", "get", "to","the","nearest", "tube", "station", sep="&")# 修改輸出字串結尾符為空白格,這樣下一次調用print函數,就會中同一行輸出內容了# 運行結果:Hello worldprint("Hello", end=" ")print("world")# 修改輸出字串結尾符為長度為0的字串,這樣下一次調用print函數,輸出的內容不僅會在同一行,# 而且會首尾相接,運行結果:abcprint("a",end="");print("b",end="");print("c");
程式運行結果如所示。
2.有趣的賦值操作
??在很多讀者看來,賦值操作是再簡單不過了,我們在前面的章節也多次使用了賦值操作。不過Python語言中的賦值操作要有趣的多。例如,可以同時將多個值賦給多個變數。
>>> x,y,z = 1,2,3>>> print(x,y,z)1 2 3
??在上面的代碼中,將1,2,3分別賦給了x,y,z三個變數,並輸出這3個變數的值。使用Python語言中的這個特性可以很容易實現兩個變數中值的交換。
>>> x,y = 20,30>>> x,y = y,x>>> print(x,y)30 20
??這種同時將多個值賦給多個變數的操作,等號(=)右側的值與左側的變數個數必須相等,否則會拋出異常。
>>> x,y,z = 1,2Traceback (most recent call last): File "<stdin>", line 1, in <module>ValueError: not enough values to unpack (expected 3, got 2)>>> x,y = 1,2,3Traceback (most recent call last): File "<stdin>", line 1, in <module>ValueError: too many values to unpack (expected 2)
??Python語言的這種特性稱為序列解包(Sequence Unpacking),其實任何一個可迭代(Iterable)的對象都支援這一特性,關於迭代對象(列表、集合等)的詳細資料會在後面的章節介紹。
??Python語言還支援鏈式賦值(Chained Assignments)和增量賦值(Augmented Assignments),鏈式賦值是指將同一個值連續賦給多個變數。
x = y = 20
??增量賦值是指將變數自身增加或減小(負增量)指定值的運算式的簡化形式。例如,x = x + 2,如果用增量賦值運算式,可以寫成x += 2,也就是將等號(=)右側的x省略,並將加號(+)放到等號左側。
其實前面介紹的二元運算子都支援增量賦值,例如,x = x 20可以寫成x = 20,x = x % 3可以寫成x %= 3。
下面的例子示範了序列解包、鏈式賦值和增量賦值的使用方法。
x,y,z = 1,2,3 # 使用序列解包方式進行賦值print(x,y,z)x,y = y,x # 利用序列解包交換x和y的值print(x,y)# x,y,z = 1,2 # 拋出異常# x,y = 1,2,3 # 拋出異常x = y = 20 # 使用鏈式賦值設定x和yprint(x,y)x *= 2 # 增量賦值x %= 3 # 增量賦值print(x)
程式運行結果如所示。
《Python從菜鳥到高手》開始轉載了,敬請關注
3. 用縮排建立代碼塊
??代碼塊並非一種語句,而是在學習條件和迴圈語句之前必須要掌握的知識。
??代碼塊是在條件為真(true)時執行的一組語句,在代碼前放置空格來縮排語句即可建立代碼塊。
??注意:使用tab字元也可以縮排語句形成代碼塊。Python將一個tab字元解釋為到下一個tab字元位置的移動,而一個tab字元為8個空格,不過Python標準推薦使用空格縮排的方式建立代碼塊,建議使用4個空格縮排的方式建立代碼塊。
??代碼塊的每行語句應該縮排同樣的量。下面的虛擬碼(並非真正的Python代碼)展示了如何用縮排的方式建立代碼塊。
This is a code lineThis is another code line: This is a block continuing the same block the last line of this blockWe escaped the inner block
??很多程式設計語言使用特殊單詞或字元來表示一個代碼塊的開始,用另外的單詞或字元表示代碼塊的結束,例如,Pascal語言使用begin表示代碼塊的開始,使用end表示代碼塊的結束,而C風格的程式設計語言(如Java、C#、C++等)使用一對大括弧表示代碼塊的開始和結束。Python語言和這些語言都不一樣,Python語言使用冒號(:)表示代碼塊的開始,代碼塊中的每一條語句都是縮排的(縮排量相同)。當回退到與快的開始語句同樣的縮排量時,就表示當前塊已經結束。很多整合式開發環境(IDE)會協助使用者輕鬆把握縮排,因此讀者不必擔心縮排量不對導致Python程式無法編譯通過。
??我們現在已經瞭解了如何使用Python語言中的縮排塊,在下面幾節就詳細介紹各種縮排塊的應用。
《Python從菜鳥到高手》已經出版,開始連載了,購買送視頻課程
Python從菜鳥到高手(8):print函數、賦值與代碼塊