在 Python 裏,標識符由字母、數字、下劃線組成。html
在 Python 中,全部標識符能夠包括英文、數字以及下劃線(_),但不能以數字開頭。python
Python 中的標識符是區分大小寫的。c++
如下劃線開頭的標識符是有特殊意義的。app
以單下劃線開頭 _foo 的表明不能直接訪問的類屬性,需經過類提供的接口進行訪問,不能用 from xxx import * 而導入;函數
以雙下劃線開頭的 __foo 表明類的私有成員;post
以雙下劃線開頭和結尾的 __foo__ 表明 Python 裏特殊方法專用的標識,如 __init__() 表明類的構造函數。url
在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是能夠修改的對象。spa
不可變類型:變量賦值 a=5 後再賦值 a=10,這裏實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,至關於新生成了a。code
可變類型:變量賦值 la=[1,2,3,4] 後再賦值 la[2]=5 則是將 list la 的第三個元素值更改,自己la沒有動,只是其內部的一部分值被修改了。htm
python 函數的參數傳遞:
不可變類型:相似 c++ 的值傳遞,如 整數、字符串、元組。如fun(a),傳遞的只是a的值,沒有影響a對象自己。好比在 fun(a)內部修改 a 的值,只是修改另外一個複製的對象,不會影響 a 自己。
可變類型:相似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改後fun外部的la也會受影響
python 中一切都是對象,嚴格意義咱們不能說值傳遞仍是引用傳遞,咱們應該說傳不可變對象和傳可變對象。
#!/usr/bin/python # -*- coding: UTF-8 -*- def ChangeInt( a ): a = 10 b = 2 ChangeInt(b) print b # 結果是 2
實例中有 int 對象 2,指向它的變量是 b,在傳遞給 ChangeInt 函數時,按傳值的方式複製了變量 b,a 和 b 都指向了同一個 Int 對象,在 a=10 時,則新生成一個 int 值對象 10,並讓 a 指向它。
#!/usr/bin/python # -*- coding: UTF-8 -*- # 可寫函數說明 def changeme( mylist ): "修改傳入的列表" mylist.append([1,2,3,4]); print "函數內取值: ", mylist return # 調用changeme函數 mylist = [10,20,30]; changeme( mylist ); print "函數外取值: ", mylist
實例中傳入函數的和在末尾添加新內容的對象用的是同一個引用,故輸出結果以下:
函數內取值: [10, 20, 30, [1, 2, 3, 4]] 函數外取值: [10, 20, 30, [1, 2, 3, 4]]
更多見:https://www.cnblogs.com/yanfengt/p/6305542.html
變量是擁有匹配對象的名字(標識符)。命名空間是一個包含了變量名稱們(鍵)和它們各自相應的對象們(值)的字典。
一個 Python 表達式能夠訪問局部命名空間和全局命名空間裏的變量。若是一個局部變量和一個全局變量重名,則局部變量會覆蓋全局變量。
每一個函數都有本身的命名空間。類的方法的做用域規則和一般函數的同樣。
Python 會智能地猜想一個變量是局部的仍是全局的,它假設任何在函數內賦值的變量都是局部的。
所以,若是要給函數內的全局變量賦值,必須使用 global 語句。
global VarName 的表達式會告訴 Python, VarName 是一個全局變量,這樣 Python 就不會在局部命名空間裏尋找這個變量了。
例如,咱們在全局命名空間裏定義一個變量 Money。咱們再在函數內給變量 Money 賦值,而後 Python 會假定 Money 是一個局部變量。然而,咱們並無在訪問前聲明一個局部變量 Money,結果就是會出現一個 UnboundLocalError 的錯誤。取消 global 語句的註釋就能解決這個問題。
#!/usr/bin/python # -*- coding: UTF-8 -*- Money = 2000 def AddMoney(): # 想改正代碼就取消如下注釋: # global Money Money = Money + 1 print Money AddMoney() print Money
類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。
class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt()
以上實例執行結果爲:
<__main__.Test instance at 0x10d066878> __main__.Test
從執行結果能夠很明顯的看出,self 表明的是類的實例,表明當前對象的地址,而 self.class 則指向類。
能夠用以下的方式,對格式進行進一步的控制:
%[(name)][flags][width].[precision]typecode
(name)爲命名
flags能夠有+,-,' '或0。+表示右對齊。-表示左對齊。' '爲一個空格,表示在正數的左側填充一個空格,從而與負數對齊。0表示使用0填充。
width表示顯示寬度
precision表示小數點後精度
好比:
print("%+10x" % 10) print("%04d" % 5) print("%6.3f" % 2.3)