本節點標題
1、語法要求
1.1、縮進規范
1.2、變量標識符規范
2、變量
2.1、變量的賦值是存放在內存空間中,再從內存空間獲取
2.2、變量賦值的時候,若變量名在內存中沒有的話就等於賦一個新的變量,若變量名已在內存中,則是重新改寫這個變量
2.3、變量的賦值是指向內存地址,變量1賦值變量2,變量1重新賦值后不改變變量2的值,因為變量1重新賦值后內存地址改變,而沒有重新賦值的變量2內存地址不變。
2.4、查看變量的內存地址,id()
2.5、python虛擬機跟操作系統打交道,它對python做了優化,如果變量賦值為0-255(python2.7實際是-5~256)其中一個數字,則相同數值的變量全都指向同一內存空間,避免浪費內存
2.6、多單詞拼接變量名風格規范
2.7、多個變量賦值
2.8、變量的引用
2.9、多變量的引用
========================================================================================================================
1、語法要求
1.1、縮進規范
縮進統一,空格、tab等,盡量使用一種。(官方建議四個空格)
流程控制語句體要縮進,不縮進則被解析為非流程控制的語句體。
例子1:
無縮進則報錯:
#coding:utf-8
a=1
b=2
if (b>=a):
print "7、b大於等於a"
else:
print "7、b小於a"
運行結果:(語句體沒縮進會報錯)
[root@zookeeper-server-01 script]# python BiJiaoYunSuanFu.py
File "BiJiaoYunSuanFu.py", line 42
print "7、b大於等於a"
^
IndentationError: expected an indented block(將一塊縮進)
正確如下:
if (b>=a):
print "7、b大於等於a" --至少有一個空格或tab縮進
else:
print "7、b小於a"
多個空格少個空格都會報錯,要注意!
----------------------------------------------------------------------------------------------------------------------------------------------
例子2:
name = raw_input("Please input your name:")
if name == 'Alex':
print "he is the python teacher. "
print "haha"
print "xixi"
運行結果1:(沒縮進的語句不會被解析為流程結構的語句體,沒縮進語句出現的時候已代表if流程結束了)
Please input your name:qq
qq
xixi
運行結果2:(有縮進的語句會被解析為流程結構的語句體,滿足條件則執行,流程結構的語句體執行結束后繼續往下運行程序其他語句)
Please input your name:Alex
he is the python teacher.
haha
xixi
----------------------------------------------------------------------------------------------------------------------------------------------
例子3:
name = raw_input("Please input your name:")
if name == 'Alex':
print "he is the python teacher. "
print "haha"
print "xixi"
運行結果:(流程語句體的縮進不統一也會報錯)
[root@zookeeper-server-01 ~]# python /root/XWR/my_python/script/Node1/user_interactive.py
File "/root/XWR/my_python/script/Node1/user_interactive.py", line 9
print "haha"
^
IndentationError: unindent does not match any outer indentation level
----------------------------------------------------------------------------------------------------------------------------------------------
例子4:
#coding:utf-8
a=1
b=2
if (b>=a):
print "7、b大於等於a"
else:
print "7、b小於a"
運行結果:(if下語句體與else下語句體不是同一層的,縮進可不一致,但建議盡量同一縮進)
7、b大於等於a
1.2、變量標識符規范
• 標識符的第一個字符必須是字母表中的字母(大寫或小寫)或者一個下划線(‘ _ ’)
• 標識符名稱的其他部分可以由字母(大寫或小寫)、下划線(‘ _ ’)或數字(0-9)組成。
• 標識符名稱是對大小寫敏感的。例如,myname和myName不是一個標識符。注意前者中的小寫n和后者中的大寫N。
• 標識符名稱不能是關鍵字,如import、class、break、if、while等等,用了不報錯,但當使用關鍵字的時候就報錯了,被你的變量沖掉了原來的關鍵字
• 有效 標識符名稱的例子有i、__my_name、name_23和a1b2_c3。
• 無效 標識符名稱的例子有2things、this is spaced out和my-name。
2、變量
2.1、變量的賦值是存放在內存空間中,再從內存空間獲取
變量存儲在內存中的值。這就意味着在創建變量時會在內存中開辟一個空間。
基於變量的數據類型,解釋器會分配指定內存,並決定什么數據可以被存儲在內存中。
因此,變量可以指定不同的數據類型,這些變量可以存儲整數,小數或字符。
>>> name = "Zha"
>>> name
'Zha'
>>>
2.2、變量賦值的時候,若變量名在內存中沒有的話就等於賦一個新的變量,若變量名已在內存中,則是重新改寫這個變量
>>> name = "Zha"
>>> name
'Zha'
>>> name = "Zhong Yi"
>>> name
'Zhong Yi'
>>>
2.3、變量的賦值是指向內存地址,變量1賦值變量2,變量1重新賦值后不改變變量2的值,因為變量1重新賦值后內存地址改變,而沒有重新賦值的變量2內存地址不變。
>>> name = "Zhong Yi"
>>> name
'Zhong Yi'
>>> name2 = name
>>> name2
'Zhong Yi'
>>> name = "Jigongtou"
>>> name
'Jigongtou'
>>> name2
'Zhong Yi'
>>>
2.4、查看變量的內存地址,id()
例子1:
>>> id(name)
140514571357472
>>> id(name2)
140514571357520
>>> id(name),id(name2)
(140514571357472, 140514571357520)
>>>
例子2:
>>> a = 10
>>> b = a
>>> id(a),id(b)
(29024400, 29024400)
>>>
例子3:
有時候完全獨立的變量賦相同值,存放內存地址一樣,不會另外再開新的內存空間
>>> a = 10
>>> b = a
>>> id(a),id(b)
(29024400, 29024400)
>>> c = 10
>>> id(a),id(b),id(c)
(29024400, 29024400, 29024400)
>>>
2.5、python虛擬機跟操作系統打交道,它對python做了優化,如果變量賦值為0-255(python2.7實際是-5~256)其中一個數字,則相同數值的變量全都指向同一內存空間,避免浪費內存
>>> a = -6
>>> b = a
>>> c = -6
>>> id(a),id(b),id(c)
(30048416, 30048416, 30048224) -------不同
>>> del a,b,c
>>>
>>> a = -5
>>> b = a
>>> c = -5
>>> id(a),id(b),id(c)
(29024760, 29024760, 29024760) --------相同
>>> del a,b,c
>>>
>>> a = 256
>>> b = a
>>> c = 256
>>> id(a),id(b),id(c)
(29030448, 29030448, 29030448) --------相同
>>> del a,b,c
>>>
>>> a = 257
>>> b = a
>>> c = 257
>>> id(a),id(b),id(c)
(30048224, 30048224, 30048392) -------不同
2.6、多單詞拼接變量名風格規范
>>> eric_gf_name = "Erin" --建議
>>> EricFgName = "Eric" --不建議,因為類名也是首字母大寫的,區別開來
>>> ericGfName = "Eric" --建議
風格要統一,不能代碼一時用一種風格變量名,一時又換另一種變量名
2.7、多個變量賦值
Python允許你同時為多個變量賦值。例如:
a = b = c = 1
以上實例,創建一個整型對象,值為1,三個變量被分配到相同的內存空間上。
>>> a=b=c=1
>>> a,b,c
(1, 1, 1)
>>>
您也可以為多個對象指定多個變量。例如:
a, b, c = 1, 2, "john"
以上實例,兩個整型對象1和2的分配給變量a和b,字符串對象"john"分配給變量c。
>>> a,b,c=1,2,"john"
>>> a,b,c
(1, 2, 'john')
>>>
2.8、python2.x變量的引用
變量把對象和自己連接起來(指針連接對象空間),這就是引用。引用完成,就實現了賦值。
%操作符 + %變量名 一起使用才能引用變量,更多類型變量的操作符參考“數據類型/字符串/字符串格式化(%操作符)”章節
>>> name = 'Alex'
>>> print """Welcome to Python,
...
... I am %s
... good bye.
... """ %name
Welcome to Python,
I am Alex
good bye.
>>>
>>> age = 1
>>> print '''I am %d year old''' %age
I am 1 year old
2.9、python2.x多變量的引用
>>> name = "Alex"
>>> age = 18
>>> print "%s is %d years old." %(name,age)
Alex is 18 years old.
>>>
2.10、python3.x變量的引用
(以后會說到字符串格式化(format()函數),本節點略過)
自python2.6開始,新增了一種格式化字符串的函數str.format(),可謂威力十足。那么,他跟之前的%型格式化字符串相比,有什么優越的存在呢?讓我們來揭開它羞答答的面紗。
語法
它通過{}和:來代替%。
“映射”示例
通過位置
In [1]: '{0},{1}'.format('kzc',18)
Out[1]: 'kzc,18'
In [2]: '{},{}'.format('kzc',18)
Out[2]: 'kzc,18'
In [3]: '{1},{0},{1}'.format('kzc',18)
Out[3]: '18,kzc,18'
字符串的format函數可以接受不限個參數,位置可以不按順序,可以不用或者用多次,不過2.6不能為空{},2.7才可以。
--------------------------------------
通過關鍵字參數
In [5]: '{name},{age}'.format(age=18,name='kzc')
Out[5]: 'kzc,18'
--------------------------------------
通過對象屬性
class Person:
def __init__(self,name,age):
self.name,self.age = name,age
def __str__(self):
return 'This guy is {self.name},is {self.age} old'.format(self=self)
In [2]: str(Person('kzc',18))
Out[2]: 'This guy is kzc,is 18 old'
--------------------------------------
通過下標
In [7]: p=['kzc',18]
In [8]: '{0[0]},{0[1]}'.format(p)
Out[8]: 'kzc,18'
有了這些便捷的“映射”方式,我們就有了偷懶利器。基本的python知識告訴我們,list和tuple可以通過“打散”成普通參數給函數,而dict可以打散成關鍵字參數給函數(通過和*)。所以可以輕松的傳個list/tuple/dict給format函數。非常靈活。
--------------------------------------
格式限定符
它有着豐富的的“格式限定符”(語法是{}中帶:號),比如:
填充與對齊
填充常跟對齊一起使用
^、<、>分別是居中、左對齊、右對齊,后面帶寬度
:號后面帶填充的字符,只能是一個字符,不指定的話默認是用空格填充
比如
In [15]: '{:>8}'.format('189')
Out[15]: ' 189'
In [16]: '{:0>8}'.format('189')
Out[16]: '00000189'
In [17]: '{:a>8}'.format('189')
Out[17]: 'aaaaa189'
--------------------------------------
精度與類型f
精度常跟類型f一起使用
In [44]: '{:.2f}'.format(321.33345)
Out[44]: '321.33'
其中.2表示長度為2的精度,f表示float類型。
--------------------------------------
其他類型
主要就是進制了,b、d、o、x分別是二進制、十進制、八進制、十六進制。
In [54]: '{:b}'.format(17)
Out[54]: '10001'
In [55]: '{:d}'.format(17)
Out[55]: '17'
In [56]: '{:o}'.format(17)
Out[56]: '21'In [57]: '{:x}'.format(17)Out[57]: '11'
--------------------------------------
用,號還能用來做金額的千位分隔符。
In [47]: '{:,}'.format(1234567890)
Out[47]: '1,234,567,890'