(002)我們一起學Python;深入Python流程控制

開始之前先講一下python的命令行如何清屏,在idle環境下無效。打開cmd窗口,輸入python回車,鍵入 import os    i=os.system('cls')就能實現清屏函數。

 ①if 語句,if … elif … elif … 序列用於替代其它語言中的 switch 或 case 語句。

>>> x = int(input("Please enter an integer: "))
Please enter an integer: 42
>>> if x < 0:
...      x = 0
...      print('Negative changed to zero')
... elif x == 0:
...      print('Zero')
... elif x == 1:
...      print('Single')
... else:
...      print('More')

for 語句,Python 的 for 語句依據任意序列(鏈表或字符串)中的子項,按它們在序列中的順序來進行迭代。在迭代過程中修改迭代序列是不安全的。例如:

Python和C  for循環中最大的不同在於他會自己進行循環,當沒有條件控制語句的時候他可以自己執行完一個週期,目標在表達式中,按照表達式的從頭至尾執行循環。
 for的語法格式:        for  目標 in 表達式:
                                        循環體

   >>> words=['cat','windows','defenestrate']
    >>> for w in words:
    print(w,len(w))

    >>> a="通哥好帥哦,他是世界上最帥的男人!"
    >>> for i in a:
    ...     print(i,end='_')
    ...
    通_哥_好_帥_哦_,_他_是_世_界_上_最_帥_的_男_人_!_>>>

    cat 3
    windows 7
    defenestrate 12

>>> for w in words[:]:  # Loop over a slice copy of the entire list.
...     if len(w) > 6:
...         words.insert(0, w)     # insert函數  插入作用
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']

 range() 函數,如果你需要一個數值序列,內置函數 range() 會很方便,它生成一個等差級數鏈表,所生成的鏈表中不包括範圍中的結束值:

for i in range(5):        #range  函數只能生成 整數函數
...     print(i)
0 1 2 3 4

range(5, 10)    #可以選擇生成數的範圍
   5 through 9

range(0, 10, 3)    #可以選擇生成數的 步距
   0, 3, 6, 9

range(-10, -100, -30)    #可以選擇...
  -10, -40, -70
a作爲一個循環的數據基礎,i是循環變量,這樣寫可以循環執行print的同時,首先生成一個序列,再打印值
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
...     print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
list函數,它從可迭代(對象)中創建列表:
    >>> list(range(5))
    [0, 1, 2, 3, 4]

④break和continue函數,continue 語句是從 C 中借鑑來的,它表示循環繼續執行下一次迭代:

>>> for num in range(2,10):
...     if num%2 ==0:
...             print("Found an even number",num)
...             continue
...     print("Found a number",num)
...
Found an even number 2
Found a number 3
Found an even number 4
Found a number 5
Found an even number 6
Found a number 7
Found an even number 8
Found a number 9

break 語句和 C 中的類似,用於跳出最近的一級 for 或 while 循環。

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(n, 'equals', x, '*', n//x)
...             break
...     else:
...         # loop fell through without finding a factor
...         print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

⑤pass語句,什麼也不做,它用於那些語法上必須要有什麼語句,但程序什麼也不做的場合。

>>> def initlog(*args):
...     pass   # Remember to implement this!

⑥定義函數,三引號引起來的內容叫_函數文檔

>>> def fib(n):    # write Fibonacci series up to n
...     """Print a Fibonacci series up to n."""
...     a, b = 0, 1
...     while a < n:
...         print(a, end=' ')
...         a, b = b, a+b
...     print()    #用來轉移最後一行的光標到新的一行
...
>>> # Now call the function we just defined:
... fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

    

>>> def fib2(n): # return Fibonacci series up to n
...     """Return a list containing the Fibonacci series up to n."""
...     result = []
...     a, b = 0, 1
...     while a < n:
...         result.append(a)    # see below
...         a, b = b, a+b
...     return result
...
>>> f100 = fib2(100)    # call it
>>> f100                # write the result
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
語句result.append(b)成爲鏈表對象result的一個方法。方法是“屬於”一個對象的函數,
它被命名爲obj.methodname,這裏的obj是某個對象(可能是一個表達式),methodname是
某個在該對象類型定義中的方法的命名。

python提供了多種函數定義形式:

(1)def ask_ok(prompt, retries=4, complaint=
                'Yes or no, please!'):
(2)ask_ok('Do you really want to quit?')
(3)ask_ok('OK to overwrite the file?', 2)
(4)ask_ok('OK to overwrite the file?', 2, 
            'Come on, only yes or no!')

可變參數列表,通常,這些可變參數是參數列表中的最後一個,因爲它們將把所有的剩餘輸入參數

傳遞給函數。

⑦ Lambda 形式,Lambda 形式可以用於任何需要的函數對象。出於語法限制,

它們只能有一個單獨的表達式。語義上講,它們只是普通函數定義中的一個語法

技巧。類似於嵌套函數定義,lambda 形式可以從外部作用域引用變量:

>>> def lamb_test(n):...     return lambda x:x+n...>>> f=lamb_test(39)>>> f(1)40

>>> mm = lambda x: x ** 3
>>> mm(3)

使用print函數打印函數文檔的用法:print(mytest.__doc__)其中doc左右兩邊的  _  字符  有兩個。

函數註解,註解是以字典形式存儲在函數的 __annotations__ 屬性中,對函數的其它部分沒有任何影響。參數註解(Parameter annotations)是定義在參數名稱的冒號後面,緊隨着一個用來表示註解的值得表達式。返回註釋(Return annotations)是定義在一個 -> 後面,緊隨着一個表達式,在冒號與 -> 之間。下面的示例包含一個位置參數,一個關鍵字參數,和沒有意義的返回值註釋:    (沒看懂...)

>>> def f(ham: 42, eggs: int = 'spam') -> "Nothing to see here":
...     print("Annotations:", f.__annotations__)
...     print("Arguments:", ham, eggs)
...
>>> f('wonderful')
Annotations: {'eggs': <class 'int'>, 'return': 'Nothing to see here', 'ham': 42}
Arguments: wonderful spam

編碼風格:

  • 使用 4 空格縮進,而非 TAB在小縮進(可以嵌套更深)和大縮進(更易讀)之間,4空格是一個很好的折中。TAB 引發了一些混亂,最好棄用

  • 折行以確保其不會超過 79 個字符,這有助於小顯示器用戶閱讀,也可以讓大顯示器能並排顯示幾個代碼文件

  • 使用空行分隔函數和類,以及函數中的大塊代碼

  • 可能的話,註釋獨佔一行

  • 使用文檔字符串

  • 把空格放到操作符兩邊,以及逗號後面,但是括號裏側不加空格:a = f(1, 2) + g(3, 4)

  • 統一函數和類命名

    推薦類名用 駝峯命名, 函數和方法名用 小寫_和_下劃線。總是用 self 作爲方法的第一個參數(關於類和方法的知識詳見 初識類 )

  • 不要使用花哨的編碼,如果你的代碼的目的是要在國際化環境。Python 的默認情況下,UTF-8,甚至普通的 ASCII 總是工作的最好

  • 同樣,也不要使用非 ASCII 字符的標識符,除非是不同語種的會閱讀或者維護代碼。












發佈了24 篇原創文章 · 獲贊 28 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章