跟老齊學Python之賦值,簡單也不簡單

字號:


    變量命名
    在《初識永遠強大的函數》一文中,有一節(jié)專門討論“取名字的學問”,就是有關變量名稱的問題,本溫故而知新的原則,這里要復習:
    名稱格式:(下劃線或者字母)+(任意數目的字母,數字或下劃線)
    注意:
    1.區(qū)分大小寫
    2.禁止使用保留字
    3.遵守通常習慣
    •以單一下劃線開頭的變量名(_X)不會被from module import *語句導入的。
    •前后有下劃線的變量名(X)是系統定義的變量名,對解釋器有特殊意義。
    •以兩個下劃線開頭,但結尾沒有兩個下劃線的變量名(__X)是類本地(壓縮)變量。
    •通過交互模式運行時,只有單個下劃線變量(_)會保存最后的表達式結果。
    需要解釋一下保留字,就是python里面保留了一些單詞,這些單詞不能讓用戶來用作變量名稱。都有哪些呢?(python2和python3少有差別,但是總體差不多)
    代碼如下:
    and assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while yield
    需要都記住嗎?當然不需要了。一方面,可以在網上隨手查到,另外,還能這樣:
    復制代碼 代碼如下:>>> not = 3
    File "<stdin>", line 1
    not = 3
    ^
    SyntaxError: invalid syntax
    >>> pass = "hello,world"
    File "<stdin>", line 1
    pass = "hello,world"
    ^
    SyntaxError: invalid syntax
    在交互模式的實驗室中,用保留字做變量,就報錯了。當然,這時候就要換名字了。
    以上原則,是基本原則。在實際編程中,大家通常還這樣做,以便讓程序更具有可讀性:
    •名字具有一定的含義。比如寫:n = "qiwsir",就不如寫:name = "qiwsir"更好。
    •名字不要誤導別人。比如用account_list指一組賬號,就會被人誤解為是list類型的數據,事實上可能是也可能不是。所以這時候最好換個名稱,比如直接用accounts。
    •名字要有意義的區(qū)分,有時候你可能會用到a1,a2之類的名字,最好不要這么做,換個別的方式,通過字面能夠看出一定的區(qū)分來更好。
    •最好是名稱能夠讀出來,千萬別自己造英文單詞,也別亂用所寫什么的,特別是貴國的,還喜歡用漢語拼音縮寫來做為名字,更麻煩了,還不如全拼呢。最好是用完整的單詞或者公認的不會引起歧義的縮寫。
    •單個字母和數字就少用了,不僅是顯得你太懶惰,還會因為在一段代碼中可能有很多個單個的字母和數字,為搜索帶來麻煩,別人也更不知道你的i和他理解的i是不是一個含義。
    總之,取名字,講究不少。不論如何,要記住一個標準:明確
    賦值語句
    對于賦值語句,看官已經不陌生了。任何一個變量,在python中,只要想用它,就要首先賦值。
    語句格式:變量名稱 = 對象
    上一節(jié)中也分析了賦值的本質。
    還有一種賦值方式,叫做隱式賦值,通過import、from、del、class、for、函數參數。等模塊導入,函數和類的定義,for循環(huán)變量以及函數參數都是隱式賦值運算。這方面的東西后面會徐徐道來。
    代碼如下:
    >>> name = "qiwsir"
    >>> name, website = "qiwsir","qiwsir.github.io" #多個變量,按照順序依次賦值
    >>> name
    'qiwsir'
    >>> website
    'qiwsir.github.io'
    >>> name, website = "qiwsir" #有幾個變量,就對應幾個對象,不能少,也不能多
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ValueError: too many values to unpack
    如果這樣賦值,也得兩邊數目一致:
    代碼如下:
    >>> one,two,three,four = "good"
    >>> one
    'g'
    >>> two
    'o'
    >>> three
    'o'
    >>> four
    'd'
    這就相當于把good分拆為一個一個的字母,然后對應著賦值給左邊的變量。
    代碼如下:
    >>> [name,site] = ["qiwsir","qiwsir.github.io"]
    >>> name
    'qiwsir'
    >>> site
    'qiwsir.github.io'
    >>> name,site = ("qiwsir","qiwsir.github.io")
    >>> name
    'qiwsir'
    >>> site
    'qiwsir.github.io'
    這樣也行呀。
    其實,賦值的樣式不少,核心就是將變量和某對象對應起來。對象,可以用上面的方式,也許是這樣的
    代碼如下:
    >>> site = "qiwsir.github.io"
    >>> name, main = site.split(".")[0], site.split(".")[1] #還記得str.split(<sep>)這個東東嗎?忘記了,google一下吧。
    >>> name
    'qiwsir'
    >>> main
    'github'
    增強賦值
    這個東西聽名字就是比賦值強的。
    在python中,將下列的方式稱為增強賦值:
    增強賦值語句 等價于語句
    x+=y x = x+y
    x-=y x = x-y
    x*=y x = x*y
    x/=y x = x/y
    其它類似結構:x&=y  x|=y  x^=y  x%=y  x>>=y x<<=y  x**=y  x//=y
    看下面的例子,有一個list,想得到另外一個列表,其中每個數比原來list中的大2??梢杂孟旅娣绞綄崿F:
    代碼如下:
    >>> number
    [1, 2, 3, 4, 5]
    >>> number2 = []
    >>> for i in number:
    ... i = i+2
    ... number2.append(i)
    ...
    >>> number2
    [3, 4, 5, 6, 7]
    如果用上面的增強賦值,i = i+2可以寫成 i +=2,試一試吧:
    代碼如下:
    >>> number
    [1, 2, 3, 4, 5]
    >>> number2 = []
    >>> for i in number:
    ... i +=2
    ... number2.append(i)
    ...
    >>> number2
    [3, 4, 5, 6, 7]
    這就是增強賦值。為什么用增強賦值?因為i +=2,比i = i+2計算更快,后者右邊還要拷貝一個i。
    上面的例子還能修改,別忘記了list解析的強大功能呀。
    代碼如下:
    >>> [i+2 for i in number]
    [3, 4, 5, 6, 7]