## 變量命名
在[《初識永遠強大的函數》](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/106.md)一文中,有一節專門討論“取名字的學問”,就是有關變量名稱的問題,本著溫故而知新的原則,這里要復習:
名稱格式:(下劃線或者字母)+(任意數目的字母,數字或下劃線)
**注意:**
1. 區分大小寫
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。
* 名字要有意義的區分,有時候你可能會用到a1,a2之類的名字,最好不要這么做,換個別的方式,通過字面能夠看出一定的區分來更好。
* 最好是名稱能夠讀出來,千萬別自己造英文單詞,也別亂用縮寫什么的,特別是貴國的,還喜歡用漢語拼音縮寫來做為名字,更麻煩了,還不如全拼呢。最好是用完整的單詞或者公認的不會引起歧義的縮寫。
* 單個字母和數字就少用了,不僅是顯得你太懶惰,還會因為在一段代碼中可能有很多個單個的字母和數字,為搜索帶來麻煩,別人也更不知道你的i和他理解的i是不是一個含義。
總之,取名字,講究不少。不論如何,要記住一個標準:**明確**
## [](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/127.md#賦值語句)賦值語句
對于賦值語句,看官已經不陌生了。任何一個變量,在python中,只要想用它,就要首先賦值。
**語句格式:**變量名稱 = 對象
[上一節](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/126.md)中也分析了賦值的本質。
還有一種賦值方式,叫做隱式賦值,通過import、from、del、class、for、函數參數。等模塊導入,函數和類的定義,for循環變量以及函數參數都是隱式賦值運算。這方面的東西后面會徐徐道來。
~~~
>>> 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'
~~~
## [](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/127.md#增強賦值)增強賦值
這個東西聽名字就是比賦值強的。
在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。可以用下面方式實現:
~~~
>>> 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]
~~~
- 第零部分 獨上高樓,望盡天涯路
- 嘮叨一些關于Python的事情
- 為什么要開設本欄目
- 第一部分 積小流,至江海
- Python環境安裝
- 集成開發環境(IDE)
- 數的類型和四則運算
- 啰嗦的除法
- 開始真正編程
- 初識永遠強大的函數
- 玩轉字符串(1):基本概念、字符轉義、字符串連接、變量與字符串關系
- 玩轉字符串(2)
- 玩轉字符串(3)
- 眼花繚亂的運算符
- 從if開始語句的征程
- 一個免費的實驗室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比較
- 畫圈還不簡單嗎
- 再深點,更懂list
- 字典,你還記得嗎?
- 字典的操作方法
- 有點簡約的元組
- 一二三,集合了
- 集合的關系
- Python數據類型總結
- 深入變量和引用對象
- 賦值,簡單也不簡單
- 坑爹的字符編碼
- 做一個小游戲
- 不要紅頭文件(1): open, write, close
- 不要紅頭文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 窮千里目,上一層樓
- 正規地說一句話
- print能干的事情
- 從格式化表達式到方法
- 復習if語句
- 用while來循環
- 難以想象的for
- 關于循環的小伎倆
- 讓人歡喜讓人憂的迭代
- 大話題小函數(1)
- 大話題小函數(2)
- python文檔
- 重回函數
- 變量和參數
- 總結參數的傳遞
- 傳說中的函數條規
- 關于類的基本認識
- 編寫類之一創建實例
- 編寫類之二方法
- 編寫類之三子類
- 編寫類之四再論繼承
- 命名空間
- 類的細節
- Import 模塊
- 模塊的加載
- 私有和專有
- 折騰一下目錄: os.path.<attribute>
- 第三部分 昨夜西風,亭臺誰登
- 網站的結構:網站組成、MySQL數據庫的安裝和配置、MySQL的運行
- 通過Python連接數據庫:安裝python-MySQLdb,連接MySQL
- 用Pyton操作數據庫(1):建立連接和游標,并insert and commit
- 用Python操作數據庫(2)
- 用Python操作數據庫(3)
- python開發框架:框架介紹、Tornado安裝
- Hello,第一個網頁分析:tornado網站的基本結構剖析:improt模塊、RequestHandler, HTTPServer, Application, IOLoop
- 實例分析get和post:get()通過URL得到數據和post()通過get_argument()獲取數據
- 問候世界:利用GAE建立tornado框架網站
- 使用表單和模板:tornado模板self.render和模板變量傳遞
- 模板中的語法:tornado模板中的for,if,set等語法
- 靜態文件以及一個項目框架
- 模板轉義
- 第四部分 暮然回首,燈火闌珊處
- requests庫
- 比較json/dictionary的庫
- defaultdict 模塊和 namedtuple 模塊
- 第五部分 Python備忘錄
- 基本的(字面量)值
- 運算符
- 常用的內建函數
- 擴展閱讀(來自網絡文章)
- 人生苦短,我用Python