繼續第一篇的內容,講解,python的一些基本的東西。
注釋
為了讓別人能夠更容易理解程式,使用注釋是非常有效,即使是自己回頭再看舊代碼也是一樣。
>>> #獲得使用者名稱:>>> user_name = raw_input("what is your name?")
在python 中用井號(#)表示注釋。井號(#)右邊的記憶體將不被程式執行。即使沒有注釋,也應該讓代碼本身易於理解。幸好!Python是一門出色的語言,它能協助程式員編寫易於理解的程式。^_^
字串
單引號字串和轉義引號
>>> "hello,world"'hello,world'>>> '"hello ,world" she said''"hello ,world" she said'>>> "'hello,world' she said""'hello,world' she said"
第一個輸出,明明是雙引號( “” ) ,怎麼輸入變成了單引號( ‘’ )。這有什麼區別呢?事實上,沒有區別。
再看第二個,單引導(‘’)裡麵包含了一對雙引號(“”),這次完整輸出了。難道只有雙引號輸出會變成單引號嗎?
再看第三個,雙引號(“”)號裡麵包含了一對單引號(‘’),這次為什麼沒把最外面的雙引號變成單引號輸出? 這編譯器比較情緒化,呵呵!
>>> "Let's go""Let's go">>>'Let's go'SyntaxError: invalid syntax>>> 'Let\'s go'"Let's go"
第一個輸出,雙引號包含一個單引號(實際上應該叫撇(‘) ,因為它不是成對出現的。)可以正常輸出。
第二個輸出,一對單引號裡麵包含了一個單引號(這應該是輸入者的本意)。編譯器不知道怎麼識別了。
第三個輸出,為了達到這個目的,我們需要把中間的單引號用斜杠(\)進行轉義。這次又不一樣了,單引號輸出之後變成了雙引號。編譯器,你真調皮。
拼接字串
下面試試加號(+)來拼接一個字元
>>> "helle,"+"world!"'helle,world!'
>>> x="hello,">>> y="world!">>> x+y'hello,world!'
字串表示,str 和 repr
前面的例子讀者可能注意到,所有通過python列印的字串還是被引號括起來的。這是因為python列印值的時候會保持該值在python代碼中的狀態,而不是你希望 使用者所看到的狀態。如果用print語句,結果就不一樣了:
>>> "hello,world!"'hello,world!'>>> 10000L10000L>>> print "hello,world!"hello,world!>>> print 10000L10000
可以看到,長整型數10000L被轉換成了數字10000 ,而且在顯示給使用者的時候也如此。
我們在這裡討論的實際上是值被轉為字元的兩種機制。可以通過以下兩個函數來使用這兩種機制:
>>> print str("hello,world!")hello,world!>>> print str(10000L)10000>>> print repr("hello,world!")'hello,world!'>>> print repr(10000L)10000L
str()函數 ,它會把值轉換為合理形式的字串,以例使用者可以理解;
repr()函數,它會建立一個字串,它以合法的python運算式的形式來表示值。
input 和 raw_input 的比較
上一章的最後一個例子用到了raw_input 函數,那它與 input 有什麼不用? 下面我們用input函數,再試試那個例子。
>>> name = input("what is your name?")what is your name?huhuTraceback (most recent call last): File "<pyshell#0>", line 1, in <module> name = input("what is your name?") File "<string>", line 1, in <module>NameError: name 'huhu' is not defined>>> name = input("what is name?")what is name?"huhu">>> print "hello, " + name + " !"hello, huhu !
input()函數會假設使用者輸入的是合法的python運算式。所以直接輸入huhu 系統會提示錯誤,但是如果加上引號(“huhu”)就會是一個合法的字元,程式運行是沒有問題的。
然而,要求使用者帶著引號輸入他們的名字有點過份,因此,就這需要使用raw_input函數。
>>> input("enter a namber:")enter a namber:33>>> raw_input("enter a namber:")enter a namber:3'3'
當然input有特別的需要,比如要求使用者輸入數字時。
長字串
如果需要寫一個非常非常長的字串,它需要跨多行,那麼,可以使用三個引號帶點普通引號。
>>> print ''' this is a very long string.It continues here.and it's not over yet.''' this is a very long string.It continues here.and it's not over yet.
一般字元串也可以跨行。如果一行之中最後一個字元是反斜線,那麼,分行符號本身就“轉義”了,也就是被忽略了。
>>> print " Hello.\world!" Hello.world!>>> 1+2+\ 4+512
原始字串
>>> path ='C:\abc'>>> print pathC:bc
怎麼會這樣呢,我想輸入的是一個路徑,卻被換行了。
>>> print 'C:\\abc'C:\abc>>> print 'C:\\Program Files\\fnord\\foo\\bar\\baz\\frozz'C:\Program Files\fnord\foo\bar\baz\frozz
通過上面的雙斜線(\\)解決了路徑問題,但如果路徑很長的話會不會太麻煩了。
>>> print r'C:\Program Files\fnord\foo\bar\baz\frozz'C:\Program Files\fnord\foo\bar\baz\frozz>>> print r'Let\'s go !'Let\'s go !
原始字串不會把反斜線當作特殊字元。可以看到,原始字串以r開頭。
Unicode字串
字串常量的最後一種類型就是Unicode 字串(或者稱為Unicode 對象---與字串並不是同一個類型)。Python中的一般字元串在內部是以8位ASCII碼形成儲存的,而Unicode字串則儲存為16位Unicode字元,這樣就能夠表示更多的字元集了,包括世界上大多數語言的特殊字元。
如果你不短簡什麼是Unicode ,可以訪問Unicode網站:http://www.unicode.org
>>> u'hello, world!'u'hello, world!'
可以看到,Unicode字串使用u首碼,就像原始字串使用r 一樣。
注意:在python 3.0中,所有字串都是Unicode字串。