1. 程式人生 > 其它 >SSH前言 - 靜態代理的簡單實現

SSH前言 - 靜態代理的簡單實現

  1. 元組不可變,若元組的成員可變型別,則成員可編輯。

    a = [1,2,3,4]
    b = [5,6,7,8]
    c = [9,10,11,12]
    t = a,b,c
    print(t)
    del b[1:4]
    print(t)

    輸出:

    ([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12])
    ([1, 2, 3, 4], [5], [9, 10, 11, 12])
  2. 列表推導式(又稱列表解析式)提供了一種簡明扼要的方法來建立列表。

    它的結構是在一箇中括號裡包含一個表示式,然後是一個for語句,然後是 0 個或多個 for 或者 if 語句。那個表示式可以是任意的,意思是你可以在列表中放入任意型別的物件。返回結果將是一個新的列表,在這個以 if 和 for 語句為上下文的表示式執行完成之後產生。

    列表推導式的執行順序:各語句之間是巢狀關係,左邊第二個語句是最外層,依次往右進一層,左邊第一條語句是最後一層。

    [x*y for x in range(1,5) if x > 2 for y in range(1,4) if y < 3]

    他的執行順序是:

    for x in range(1,5)
        if x > 2
            for y in range(1,4)
                if y < 3
                    x*y
  3. 有多個列表需要遍歷時,需要zip,除了用'{0}{1}'.format(q,a)的方法,還可以使用%s方法(兩者效果一樣一樣的):

    questions=['name','quest','favorite color']
    answers=['qinshihuang','the holy','blue']
    for q,a in zip(questions,answers):
        print('what is your %s? it is %s' %(q,a))
        print('what is your {0}? it is {1}'.format(q,a))
  4. 教程中遍歷 dict 使用的 .items() 方法配合 for 迴圈,非常簡明易懂,但有一項需要注意的是,在 for 迴圈中,使用單個變數和雙變數的區別,注意觀察以下兩個例子的區別:

    >>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
    >>> for k, v in knights.items():
    ...     print(k, v)
    ...
    gallahad the pure
    robin the brave

    ===========================分隔線===========================

    >>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
    >>> for k in knights.items():
    ...     print(k)
    ...
    ('gallahad', 'the pure')
    ('robin', 'the brave')

    使用 k 和 v 兩個變數時,將鍵與值分別賦予 k 和 v。使用 k 一個變數時,將對應的鍵與值作為一個整體賦給 k。所以,最終 print 的顯示內容是有區別的。不只是此例,程式設計過程中有很多地方都會體現個體與整體的差異,雖然顯示出來的結果非常相似,但邏輯上卻是完全不同的。

  5. 針對上述所講的的執行順序介紹,講解一下正文中的一個例子:

    >>> matrix = [
    ...     [1, 2, 3, 4],
    ...     [5, 6, 7, 8],
    ...     [9, 10, 11, 12],
    ... ]

    以下例項將 3X4 的矩陣列表轉換為 4X3 列表:

    >>> [[row[i] for row in matrix] for i in range(4)]
    [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

    這個例子中的執行順序應該為:

    for i in range(4)
        for row in matrix
            row[i]

    即將每一個 matrix 中的列表元素的第一個放在一起、第二個放在一起、第三個放在一起、第四個元素放在一起作為一個新的列表元素。

  6. 使用小括號包裹推導式會生成生成器物件,而不是元組。

    >>> a = (2*x for x in range(2))
    >>> type(a)
    <class 'generator'>
    >>> next(a)
    0
    >>> next(a)
    2
    >>> next(a)
    Traceback (most recent call last):
      File "<pyshell#691>", line 1, in <module>
        next(a)
    StopIteration
  7. 推導式不僅還能加人三元表示式進行一些更加複雜的多層判斷:

    array = []
    for i in range(30):
        if i%3==0 and i%5==0:
            array.append("能被3-5整除")
        elif i%5==0:
            array.append("能被5整除")
        elif i%3==0:
            array.append("能被3整除")
        else:
            array.append("不能能被3-5整除")
    
    array = ["能被3-5整除" if i%3==0 and i%5==0 else "能被5整除" if i%5==0 else "能被3整除" if i%3==0 else "不能被3-5整除" for i in range(30)]
    print(array)
  8. 針對上述所講的的執行順序介紹,講解一下正文中的一個例子:

    matrix = [ [7, 2, 9, 4], [5, 6, 9, 8], [9, 10, 11, 12],]
    
    
    relist1 = [row[i] for i in range(4) for row in matrix]
    relist2 = [[row[i] for row in matrix] for i in range(4)]
    
    print(relist1)
    print(relist2)

    輸出:

    [7, 5, 9, 2, 6, 10, 9, 9, 11, 4, 8, 12]
    [[7, 5, 9], [2, 6, 10], [9, 9, 11], [4, 8, 12]]

    relist1 返回為一個單層列表。

    relist2。內部迴圈結果先生成一個列表,並以子列表的形式新增到外層列表中。