繼續第一篇的內容,講解,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!' >>> 10000L 10000L >>> print "hello,world!" hello,world! >>> print 10000L 10000
可以看到,長整型數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?huhu Traceback (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:3 3 >>> 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+5 12
原始字符串
>>> path ='C:\abc' >>> print path C: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字符串。