在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 字符串(1)
標準庫 (4)
如何成為 Python 高手
標準庫 (6)
標準庫 (3)
類(2)
Pandas 使用 (2)
xml
用 tornado 做網(wǎng)站 (5)
文件(1)
練習
列表(3)
從小工到專家
除法
錯誤和異常 (2)
函數(shù)(1)
用 tornado 做網(wǎng)站 (7)
為做網(wǎng)站而準備
函數(shù)練習
標準庫 (8)
Pandas 使用 (1)
回顧 list 和 str
字典(1)
用 tornado 做網(wǎng)站 (3)
字符串(1)
函數(shù)(2)
寫一個簡單的程序
將數(shù)據(jù)存入文件
語句(5)
SQLite 數(shù)據(jù)庫
集成開發(fā)環(huán)境(IDE)
集合(1)
類(1)
用 tornado 做網(wǎng)站 (6)
用 tornado 做網(wǎng)站 (2)
自省
語句(4)
錯誤和異常 (1)
用 tornado 做網(wǎng)站 (4)
集合(2)
列表(1)
標準庫 (1)
生成器
mysql 數(shù)據(jù)庫 (1)
第三方庫
實戰(zhàn)
運算符
類(3)
字典(2)
語句(1)
數(shù)和四則運算
語句(2)
文件(2)
MySQL 數(shù)據(jù)庫 (2)
電子表格
迭代器
mongodb 數(shù)據(jù)庫 (1)
特殊方法 (2)
特殊方法 (1)
字符編碼
編寫模塊
用 tornado 做網(wǎng)站 (1)
標準庫 (5)
函數(shù)(4)
類(5)
字符串(2)
關(guān)于 Python 的故事
函數(shù)(3)
字符串(4)
處理股票數(shù)據(jù)
常用數(shù)學函數(shù)和運算優(yōu)先級
字符串(3)
為計算做準備
多態(tài)和封裝
類(4)
迭代
語句(3)
錯誤和異常 (3)
分析 Hello
Python 安裝
標準庫 (2)
列表(2)
元組

字符串(1)

如果對自然語言分類,有很多中分法,比如英語、法語、漢語等,這種分法是最常見的。在語言學里面,也有對語言的分類方法,比如什么什么語系之類的。我這里提出一種分法,這種分法尚未得到廣大人民群眾和研究者的廣泛認同,但是,我相信那句“真理是掌握在少數(shù)人的手里”,至少在這里可以用來給自己壯壯膽。

我的分法:一種是語言中的兩個元素(比如兩個字)拼接在一起,出來一個新的元素(比如新的字);另外一種是兩個元素拼接在一起,只是得到這兩個元素的并列顯示。比如“好”和“人”,兩個元素拼接在一起是“好人”,而 3 和 5 拼接(就是整數(shù)求和)在一起是 8,如果你認為是 35,那就屬于第二類了。

把我的這種分法抽象一下:

  • 一種是:△ + □ = ○
  • 另外一種是:△ + □ = △ □

我們的語言中,離不開以上兩類,不是第一類就是第二類。

太天才了。請鼓掌。

字符串

在我洋洋自得的時候,我 google 了一下,才發(fā)現(xiàn),自己沒那么高明,看維基百科的字符串詞條是這么說的:

字符串(String),是由零個或多個字符組成的有限串行。一般記為 s=a[1]a[2]...a[n]。

看到維基百科的偉大了吧,它已經(jīng)把我所設想的一種情況取了一個形象的名稱,叫做字符串,本質(zhì)上就是一串字符。

根據(jù)這個定義,在前面兩次讓一個程序員感到偉大的"Hello,World",就是一個字符串。或者說不管用英文還是中文還是別的某種文,寫出來的文字都可以做為字符串對待,當然,里面的特殊符號,也是可以做為字符串的,比如空格等。

嚴格地說,在 Python 中的字符串是一種對象類型,這種類型用 str 表示,通常單引號''或者雙引號""包裹起來。

字符串和前面講過的數(shù)字一樣,都是對象的類型,或者說都是值。當然,表示方式還是有區(qū)別的。

"I love Python." 'I love Python.' 'I LOVE PYTHON.' 'I LOVE PYTHON.'

從這兩個例子中可以看出來,不論使用單引號還是雙引號,結(jié)果都是一樣的。

>>> 250
250
>>> type(250)
<type 'int'>

>>> "250"
'250'
>>> type("250")
<type 'str'>

仔細觀察上面的區(qū)別,同樣是 250,一個沒有放在引號里面,一個放在了引號里面,用 type()函數(shù)來檢驗一下,發(fā)現(xiàn)它們居然是兩種不同的對象類型,前者是 int 類型,后者則是 str 類型,即字符串類型。所以,請大家務必注意,不是所有數(shù)字都是 int(or float),必須要看看,它在什么地方,如果在引號里面,就是字符串了。如果搞不清楚是什么類型,就讓 type()來幫忙搞定。

操練一下字符串吧。

>>> print "good good study, day day up"
good good study, day day up
>>> print "----good---study---day----up"
----good---study---day----up

在 print 后面,打印的都是字符串。注意,是雙引號里面的,引號不是字符串的組成部分。它是在告訴計算機,它里面包裹著的是一個字符串。

愛思考的看官肯定發(fā)現(xiàn)上面這句話有問題了。如果我要把下面這句話看做一個字符串,應該怎么做?

What's your name?

這個問題非常好,因為在這句話中有一個單引號,如果直接在交互模式中像上面那樣輸入,就會這樣:

>>> 'What's your name?'
File "<stdin>", line 1
 'What's your name?'
      ^
SyntaxError: invalid syntax

出現(xiàn)了 SyntaxError(語法錯誤)引導的提示,這是在告訴我們這里存在錯誤,錯誤的類型就是 SyntaxError,后面是對這種錯誤的解釋“invalid syntax”(無效的語法)。特別注意,錯誤提示的上面,有一個 ^ 符號,直接只著一個單引號,不用多說,你也能猜測出,大概在告訴我們,可能是這里出現(xiàn)錯誤了。

在 python 中,這一點是非常友好的,如果語句存在錯誤,就會將錯誤輸出來,供程序員改正參考。當然,錯誤來源有時候比較復雜,需要根據(jù)經(jīng)驗和知識進行修改。還有一種修改錯誤的好辦法,就是講錯誤提示放到 google 中搜索。

上面那個值的錯誤原因是什么呢?仔細觀察,發(fā)現(xiàn)那句話中事實上有三個單引號,本來一對單引號之間包裹的是一個字符串,現(xiàn)在出現(xiàn)了三個(一對半)單引號,computer 姑娘迷茫了,她不知道單引號包裹的到底是誰。于是報錯。

解決方法一:雙引號包裹單引號

>>> "What's your name?"
"What's your name?"

用雙引號來包裹,雙引號里面允許出現(xiàn)單引號。其實,反過來,單引號里面也可以包裹雙引號。這個可以籠統(tǒng)地成為二者的嵌套。

解決方法二:使用轉(zhuǎn)義符

所謂轉(zhuǎn)義,就是讓某個符號不在表示某個含義,而是表示另外一個含義。轉(zhuǎn)義符的作用就是它能夠轉(zhuǎn)變符號的含義。在 Python 中,用 \ 作為轉(zhuǎn)義符(其實很多語言,只要有轉(zhuǎn)義符的,都是用這個符號)。

>>> 'What\'s your name?'
"What's your name?"

是不是看到轉(zhuǎn)義符 \ 的作用了。

本來單引號表示包括字符串,它不是字符串一部分,但是如果前面有轉(zhuǎn)義符,那么它就失去了原來的含義,轉(zhuǎn)化為字符串的一部分,相當于一個特殊字符了。

變量和字符串

前面講過變量無類型,對象有類型了,比如在數(shù)字中:

>>> a = 5
>>> a
5

其本質(zhì)含義是變量 a 相當于一個標簽,貼在了對象 5 上面。并且我們把這個語句叫做賦值語句。

同樣,在對字符串類型的對象,也是這樣,能夠通過賦值語句,將對象與某個標簽(變量)關(guān)聯(lián)起來。

>>> b = "hello,world"
>>> b
'hello,world'
>>> print b
hello,world

還記得我們曾經(jīng)用過一個 type 命令嗎?現(xiàn)在它還有用,就是檢驗一個變量,到底跟什么類型聯(lián)系著,是字符串還是數(shù)字?

>>> type(a)
<type 'int'>
>>> type(b)
<type 'str'>

有時候,你會聽到一種說法:把a稱之為數(shù)字型變量,把 b 叫做字符(串)型變量。這種說法,在某些語言中是成立的。某些語言,需要提前聲明變量,然后變量就成為了一個筐,將值裝到這個筐里面。但是,Python 不是這樣的。要注意區(qū)別。

拼接字符串

還記得我在本節(jié)開篇提出的那個偉大發(fā)現(xiàn)嗎?就是將兩個東西拼接起來。

對數(shù)字,如果拼接,就是對兩個數(shù)字求和。如:3+5,就計算出為 8。那么對字符串都能進行什么樣的操作呢?試試吧:

>>> "Py" + "thon"
'Python'

跟我那個不為大多數(shù)人認可的發(fā)現(xiàn)是一樣的,你還不認可嗎?兩個字符串相加,就相當于把兩個字符串連接起來。(別的運算就別嘗試了,沒什么意義,肯定報錯,不信就試試)

>>> "Py" - "thon"     # 這么做的人,是腦袋進水泥了吧?
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'str'

+ 號實現(xiàn)連接,的確比較簡單,不過,有時候你會遇到這樣的問題:

>>> a = 1989
>>> b = "free"
>>> print b+a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

這里引入了一個指令:print,意思就是打印后面的字符串(或者指向字符串的變量),上面是 Python2 中的使用方式,在 Python3 中,它變成了一個函數(shù)。應該用 print(b+a)的樣式了。

報錯了,其錯誤原因已經(jīng)打印出來了(一定要注意看打印出來的信息):cannot concatenate 'str' and 'int' objects。原來 a 對應的對象是一個 int 類型的,不能將它和 str 對象連接起來。怎么辦?

原來,用 + 拼接起來的兩個對象,必須是同一種類型的。如果兩個都是數(shù)字,毫無疑問是正確的,就是求和;如果都是字符串,那么就得到一個新的字符串。

修改上面的錯誤,可以通過以下方法:

>>> print b + `a`       
free1989

注意,\ 是反引號,不是單引號,就是鍵盤中通常在數(shù)字1左邊的那個,在英文半角狀態(tài)下輸入的符號。這種方法,在編程實踐中比較少應用,特別是在 Python3 中,已經(jīng)把這種方式棄絕了。我想原因就是這個符號太容易和單引號混淆了。在編程中,也不容易看出來,可讀性太差。

常言道:“困難只有一個,解決困難的方法不止一種”,既然反引號可讀性不好,在編程實踐中就盡量不要使用。于是乎就有了下面的方法,這是被廣泛采用的。不但簡單,更主要是直白,一看就懂什么意思了。

>>> print b + str(a)    
free1989

str(a)實現(xiàn)將整數(shù)對象轉(zhuǎn)換為字符串對象。雖然 str 是一種對象類型,但是它也能夠?qū)崿F(xiàn)對象類型的轉(zhuǎn)換,這就起到了一個函數(shù)的作用。其實前面已經(jīng)講過的 int 也有類似的作用。比如:

>>> a = "250"
>>> type(a)
<type 'str'>
>>> b = int(a)
>>> b
250
>>> type(b)
<type 'int'>

提醒列位,如果你對 int 和 str 比較好奇,可以在交互模式中,使用 help(int),help(str)查閱相關(guān)的更多資料。

還有第三種:

>>> print b + repr(a)   #repr(a)與上面的類似
free1989 

這里 repr()是一個函數(shù),其實就是反引號的替代品,它能夠把結(jié)果字符串轉(zhuǎn)化為合法的 python 表達式。

可能看官看到這個,就要問它們?nèi)咧g的區(qū)別了。首先明確,repr()和 \ 是一致的,就不用區(qū)別了。接下來需要區(qū)別的就是 repr()和 str,一個最簡單的區(qū)別,repr 是函數(shù),str 是跟 int 一樣,一種對象類型。不過這么說是不能完全解惑的。幸虧有那么好的 google 讓我輩使用,你會找到不少人對這兩者進行區(qū)分的內(nèi)容,我推薦這個:

  1. When should i use str() and when should i use repr() ?

Almost always use str when creating output for end users.

repr is mainly useful for debugging and exploring. For example, if you suspect a string has non printing characters in it, or a float has a small rounding error, repr will show you; str may not.

repr can also be useful for for generating literals to paste into your source code. It can also be used for persistence (with ast.literal_eval or eval), but this is rarely a good idea--if you want editable persisted values, something like JSON or YAML is much better, and if you don't plan to edit them, use pickle.

2.In which cases i can use either of them ?

Well, you can use them almost anywhere. You shouldn't generally use them except as described above.

3.What can str() do which repr() can't ?

Give you output fit for end-user consumption--not always (e.g., str(['spam', 'eggs']) isn't likely to be anything you want to put in a GUI), but more often than repr.

4.What can repr() do which str() can't

Give you output that's useful for debugging--again, not always (the default for instances of user-created classes is rarely helpful), but whenever possible.

And sometimes give you output that's a valid Python literal or other expression--but you rarely want to rely on that except for interactive exploration.

以上英文內(nèi)容來源:http://stackoverflow.com/questions/19331404/str-vs-repr-functions-in-python-2-7-5

Python 轉(zhuǎn)義字符

在字符串中,有時需要輸入一些特殊的符號,但是,某些符號不能直接輸出,就需要用轉(zhuǎn)義符。所謂轉(zhuǎn)義,就是不采用符號本來的含義,而采用另外一含義了。下面表格中列出常用的轉(zhuǎn)義符:

轉(zhuǎn)義字符 描述
\ (在行尾時) 續(xù)行符
\ 反斜杠符號
\' 單引號
\" 雙引號
\a 響鈴
\b 退格(Backspace)
\e 轉(zhuǎn)義
\000
\n 換行
\v 縱向制表符
\t 橫向制表符
\r 回車
\f 換頁
\oyy 八進制數(shù),yy 代表的字符,例如:\o12 代表換行
\xyy 十六進制數(shù),yy 代表的字符,例如:\x0a 代表換行
\other 其它的字符以普通格式輸出

以上所有轉(zhuǎn)義符,都可以通過交互模式下 print 來測試一下,感受實際上是什么樣子的。例如:

>>> print "hello.I am qiwsir.\                  # 這里換行,下一行接續(xù)
... My website is 'http://qiwsir.github.io'."
hello.I am qiwsir.My website is 'http://qiwsir.github.io'.

>>> print "you can connect me by qq\\weibo\\gmail"  #\\ 是為了要后面那個 \
you can connect me by qq\weibo\gmail

看官自己試試吧。如果有問題,可以聯(lián)系我解答。


總目錄   |   上節(jié):寫一個簡單的程序   |   下節(jié):字符串(2)

如果你認為有必要打賞我,請通過支付寶:qiwsir@126.com,不勝感激。

上一篇:字符串(2)下一篇:運算符