1. 程式人生 > >Python 學習成長記(三)---- Python 基本用法簡介

Python 學習成長記(三)---- Python 基本用法簡介

最近準備重新系統學習一下Python語言,著手研讀Python 3.6.1官方教程文件,於是想著不如翻譯整理出來 , 希望能幫到一起學習Python的同學們,與大家一起進步,由於水平有限,翻譯若有不妥之處,請大家指正 。

  在以下示例中,輸入和輸出通過提示符(>>>和…)是否存在區分:若要重複該示例,你必須在出現提示符後鍵入所有內容; 不是以提示符開始的行從直譯器輸出的結果。 請注意,在一個示例中,一行上的輔助提示符本身就意味著你必須鍵入一個空行; 這用於結束多行命令。
  本手冊中的許多示例,即使是在互動式提示中輸入的示例,也可以包括註釋。 Python中的註釋以‘#’開頭,並擴充套件到物理行的末尾。 一個註釋可能會出現在行的開頭或後面的空格或程式碼,但不能在字串中。 字串中的‘#’只是一個雜湊字元。由於註釋是為了澄清程式碼而不是解釋Python,所以在輸入示例時可能會省略它們。
例如:

# this is the first comment
spam = 1 # and this is the second comment
     # … and now a third!
text = “# This is not a comment because it’s inside quotes.”

3.1 使用Python作為計算器

  我們來嘗試一些簡單的Python命令。 啟動直譯器,等待主提示符>>>。 (不要花很長時間)

3.1.1 Numbers

  Python直譯器作為一個簡單的計算器:你可以在其中鍵入一個表示式,它將輸出該表示式的結果。 表示式語法很簡單:運算子+, - ,*和/ ,用起來就像大多數其他語言(例如,Pascal或C)一樣; 括號()可用於組合。 例如:

>>> 2 + 2
4
>>> 50 - 5*6
20
>>> (50 - 5*6) / 4
5.0
>>> 8 / 5 # division always returns a floating point number
1.6

  整數(例如2,4,20)是int型別,具有小數部分(例如5.0,1.6)的j float型別。 本教程稍後將介紹有關數字型別的更多資訊。
  除法(/)總是返回一個float。若要進行分割槽並獲得整數結果(丟棄任何分數結果),可以使用//運算子; 計算剩餘部分可以使用%:

>>> 17 / 3 # classic division returns a float
5.666666666666667
>>>
>>> 17 // 3 # floor division discards the fractional part
5
>>> 17 % 3 # the % operator returns the remainder of the division
2
>>> 5 * 3 + 2 # result divisor + remainder*
17

  在Python語言中,可以使用**運算子來計算指數冪

>>> 5 * 2 # 5 squared*
25
>>> 2 * 7 # 2 to the power of 7*
128

  等號(=)是用於為變數賦值。它在下一個互動式提示符之前不會顯示結果:

>>> width = 20
>>> height = 5 * 9
>>> width * height
900

  如果一個變數沒有被定義(賦值),嘗試使用它會給出如下錯誤:

>>> n # try to access an undefined variable
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘n’ is not defined

  Python完全支援浮點數; 帶有混合型別運算元的運算子會將整數運算元轉換為浮點數:

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5

  在互動模式下,最後列印的表示式賦給變數‘_’。 這意味著當您使用Python作為桌面計算器時,可更方便於繼續計算,例如:

>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06

  該變數應該被使用者視為只讀。 不要顯式分配一個值給‘_’,如果你這麼做,將會建立一個具有相同名稱的獨立本地變數,並遮蔽該內建變數。
  除了int和float型別外,Python還支援其他型別的數字,例如Decimal和Fraction。 Python還內建了對複數的支援,並使用j或J字尾來表示虛部(例如3 + 5j)。

3.1.2 String

  除了數字,Python也可以操作字串,可以用以下幾種方式表達。 它們可以用單引號(’…’)或雙引號(“…”)括起來,結果相同, \可以用來轉義引號:

>>> ‘spam eggs’ # single quotes
‘spam eggs’
>>> ‘doesn\’t’ # use \’ to escape the single quote…
“doesn’t”
>>> “doesn’t” # …or use double quotes instead
“doesn’t”
>>> ‘“Yes,” he said.’
‘“Yes,” he said.’
>>> “\”Yes,\” he said.”
‘“Yes,” he said.’
>>> ‘“Isn\’t,” she said.’
‘“Isn\’t,” she said.’

  在互動式直譯器中,輸出字串用引號括起來,特殊字元用反斜槓轉義。 雖然這有時可能看起來不同於輸入(封閉的引號可能會改變),但是兩個字串是等效的。 如果字串包含單引號並且沒有雙引號,則該字串用雙引號括起來,否則將其括在單引號中。 print()函式產生一個更可讀的輸出,省略封閉引號,並列印轉義和特殊字元:

>>> ‘“Isn\’t,” she said.’
‘“Isn\’t,” she said.’
>>> print(‘“Isn\’t,” she said.’)
“Isn’t,” she said.
>>> s = ‘First line.\nSecond line.’ # \n means newline
>>> s # without print(), \n is included in the output
‘First line.\nSecond line.’
>>> print(s) # with print(), \n produces a new line
First line.
Second line.

  如果您不希望以\開頭的字元被轉義為特殊字元,則可以在第一個引號之前新增一個r來使用原始字串:

>>> print(‘C:\some\name’) # here \n means newline!
C:\some
ame
>>> print(r’C:\some\name’) # note the r before the quote
C:\some\name

  字串文字可以跨越多行。 一種方法是使用三重引號:“”“…”“”或“”…”。行的尾部被自動包括在字串中的,但它能夠通過在該行的末尾新增一個\來防止這一點。例如:

print(“”“\
Usage: thingy [OPTIONS]
  -h Display this usage message
  -H hostname Hostname to connect to
“”“)

輸出結果如下:

Usage: thingy [OPTIONS]
  -h Display this usage message
  -H hostname Hostname to connect to

  字串可以用+操作符連線(膠合在一起),也可以用*複製:

>>> # 3 times ‘un’, followed by ‘ium’
>>> 3 * ‘un’ + ‘ium’
‘unununium’

  兩個或多個字串文字(即引號之間的引號)彼此相鄰的字串文字自動合併。

>>> ‘Py’ ‘thon’
‘Python’

  這隻適用於兩個字串,但不適用於變數或表示式:

>>> prefix = ‘Py’
>>> prefix ‘thon’ # can’t concatenate a variable and a string literal

SyntaxError: invalid syntax
>>> (‘un’ * 3) ‘ium’

SyntaxError: invalid syntax

  如果要連線變數或變數和字串,請使用+:

>>> prefix + ‘thon’
‘Python’

  當您想要打斷長字串時,此功能特別有用:

>>> text = (‘Put several strings within parentheses ’
… ‘to have them joined together.’)
>>> text
‘Put several strings within parentheses to have them joined together.’

  字串可以通過下標索引,第一個字元的下標索引為0. 沒有單獨的字元型別; 一個字元是一個大小為一的字串:

>>> word = ‘Python’
>>> word[0] # character in position 0
‘P’
>>> word[5] # character in position 5
‘n’

  索引數也可能是負數,從意味著從右邊開始計數:

>>> word[-1] # last character
‘n’
>>> word[-2] # second-last character
‘o’
>>> word[-6]
‘P’

  注意,由於-0與0相同,負索引從-1開始。
  除索引之外,Python還支援slice。 當使用索引來獲取單個字元時,slice可以讓您獲取子字串:

>>> word[0:2] # characters from position 0 (included) to 2 (excluded)
‘Py’
>>> word[2:5] # characters from position 2 (included) to 5 (excluded)
‘tho’

  注意若索引值冒號前預設,則認為是從第一個開始:如s[:i]== s[0:i],若索引值冒號後預設,則認為不包含i, 例如s[i:]是不包含s[i]這個字元的。即確保s [:i] + s [i:]始終等於s:

>>> word[:2] + word[2:]
‘Python’
>>> word[:4] + word[4:]
‘Python’

  Slice需要有有效的預設值索引值; 省略的第一個索引預設為零,省略的第二個索引預設為要分割的字串的大小。

>>> word[:2] # character from the beginning to position 2 (excluded)
‘Py’
>>> word[4:] *# characters from position 4 (included) to the end
‘on’*
>>> word[-2:] # characters from the second-last (included) to the end
‘on’

  記住slice如何工作的一種方式是將索引視為指向字元之間,第一個字元的左邊緣編號為0.然後n個字串的最後一個字元的右邊緣具有索引n,例如:

+—+—+—+—+—+—+
 | P  | y  |  t  |   h | o  | n  |
+—+—+—+—+—+—+
0    1     2    3    4    5     6
-6  -5   -4   -3   -2  -1

  第一行數字給出了字串中的索引0 … 6的位置; 第二行給出相應的負索引。 從i到j的slice分別由標記為i和j的邊緣之間的所有字元組成。
  對於非負指數,slice的長度是索引的差值,如果兩者都在範圍內。 例如,字[1:3]的長度為2。
  如果使用過大的索引值將導致錯誤:

>>> word[42] # the word only has 6 characters
Traceback (most recent call last):
File “”, line 1, in
IndexError: string index out of range

  但是,超出範圍的slice索引可以正常處理:

\>>> word[4:42]
‘on’
\>>> word[42:]

  Python字串不能被更改,它們是不可變的。 因此,賦值字串中的索引位置會導致錯誤:

>>> word[0] = ‘J’

TypeError: ‘str’ object does not support item assignment
>>> word[2:] = ‘py’

TypeError: ‘str’ object does not support item assignment

  如果您需要一個不同的字串,您應該建立一個新的字串:

>>> ‘J’ + word[1:]
‘Jython’
>>> word[:2] + ‘py’
‘Pypy’

  內建函式len()返回字串的長度:

>>> s = ‘supercalifragilisticexpialidocious’
>>> len(s)
34

也可以參考

文字序列型別 - str
  字串是序列型別的示例,並支援這些型別支援的常見操作。
String方法
  字串支援大量的基本轉換和搜尋方法。
格式化字串文字
  具有嵌入表示式的字串文字。
格式化字串語法
  有關使用str.format()的字串格式化的資訊。
Printf型別的字串格式
  當字串是%操作符的左運算元時呼叫的舊格式化操作在此更詳細地描述。

3.1.3. Lists

  Python支援複合資料型別,用於將其他值組合在一起。 最通用的是list列表,可以寫成方括號之間的逗號隔開的列表。 列表可能包含不同型別的item,但通常這些item都具有相同的型別。

>>> squares = [1, 4, 9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]

  像字串(和所有其他內建的序列型別)一樣,list可以索引和slice:

>>> squares[0] # indexing returns the item
1
>>> squares[-1]
25
>>> squares[-3:] # slicing returns a new list
[9, 16, 25]

  所有slice操作返回的是包含所請求元素的新列表。 這意味著以下切片返回列表的新列表:

>>> squares[:]
[1, 4, 9, 16, 25]
  列表還支援連線操作:
>>> squares + [36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

  不同於不可變的字串,列表是可變型別,即可以更改其內容:

>>> cubes = [1, 8, 27, 65, 125] # something’s wrong here
>>> 4 ** 3 # the cube of 4 is 64, not 65!
64
>>> cubes[3] = 64 # replace the wrong value
>>> cubes
[1, 8, 27, 64, 125]

  你還可以在列表末尾新增新item,方法是使用append()方法(稍後將會詳細介紹有關方法):

>>> cubes.append(216) # add the cube of 6
>>> cubes.append(7 * 3) # and the cube of 7*
>>> cubes
[1, 8, 27, 64, 125, 216, 343]

  賦值到slice也是可以的,它甚至可以更改列表的大小或完全清除它:

>>> letters = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]
>>> letters
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]
>>> # replace some values
>>> letters[2:5] = [‘C’, ‘D’, ‘E’]
>>> letters
[‘a’, ‘b’, ‘C’, ‘D’, ‘E’, ‘f’, ‘g’]
>>> # now remove them
>>> letters[2:5] = []
>>> letters
[‘a’, ‘b’, ‘f’, ‘g’]
>>> # clear the list by replacing all the elements with an empty list
>>> letters[:] = []
>>> letters
[]

  內建函式len()也適用於列表:

>>> letters = [‘a’, ‘b’, ‘c’, ‘d’]
>>> len(letters)
4

  Python也可以支援巢狀列表(建立包含其他列表的列表),例如:

>>> a = [‘a’, ‘b’, ‘c’]
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[[‘a’, ‘b’, ‘c’], [1, 2, 3]]
>>> x[0]
[‘a’, ‘b’, ‘c’]
>>> x[0][1]
‘b’

3.2 開始程式設計的第一步

  當然,我們可以使用Python進行更復雜的任務,而不是將兩個新增在一起。 例如,我們可以寫一個Fibonacci series的初始子序列:

>>> # Fibonacci series:
… # the sum of two elements defines the next
… a, b = 0, 1
>>> while b < 10:
…  print(b)
…  a, b = b, a+b

1
1
2
3
5
8

  此示例介紹了幾個新特性。
  第一行包含一個多重賦值:變數a和b同時獲取新的值0和1. 在最後一行,也是這樣,表明在任何賦值之前,右側的表示式先執行(計算)。右側表示式從左到右進行執行(計算)。
  只要條件(這裡:b <10)保持為true,則while迴圈繼續將執行。在Python中,像在C中,任何非零整數值都為真;零是假的條件也可以是任何序列包括字串或列表值;任何具有非零長度的東西都是真的,空的序列是假的。該示例中使用的是一個簡單的比較。標準比較運算子與C語言一樣:<(小於),>(大於),==(等於),<=(小於或等於),> =(大於或等於)和!=(不等於)。
  迴圈體是縮排的:縮排是Python對語句進行分組的方法。在互動式提示符下,您必須為每個縮排行鍵入一個tab鍵或空格。在實踐中,你需要使用文字編輯器來編寫更復雜的Python程式碼; 好的程式碼編輯器都有自動縮排功能。當以互動方式輸入複合語句時,它必須後跟一個空行來指示完成(因為解析器無法猜測哪一行是最後一行)。請注意,基本塊中的每一行必須縮排相同的數量。
  print()函式寫入給定的引數的值。它不同於只需要以處理多個引數,浮點數量和字串的方式編寫表示式(如我們之前在計算器示例中所做的那樣)。列印沒有帶引號字串,並且在item之間插入一個空格,所以你可以很好地格式化它們,如下所示:

>>> i = 256*256
>>> print(‘The value of i is’, i)
The value of i is 65536

  關鍵字引數end可以用於避免輸出被換行,或者用不同的字串結束輸出:

>>> a, b = 0, 1
>>> while b < 1000:
…  print(b, end=’,’)
…  a, b = b, a+b

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,