一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python中的字符串類型基本知識(shí)學(xué)習(xí)教程

Python中的字符串類型基本知識(shí)學(xué)習(xí)教程

2020-08-11 17:35Python教程網(wǎng) Python

這篇文章主要介紹了Python中的字符串類型基本知識(shí)學(xué)習(xí)教程,包括轉(zhuǎn)義符和字符串拼接以及原始字符串等基礎(chǔ)知識(shí)講解,需要的朋友可以參考下

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

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

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

一種是:△ + □ = ○
另外一種是:△ + □ = △ □
我們的語(yǔ)言中,離不開(kāi)以上兩類,不是第一類就是第二類。

太天才了。請(qǐng)鼓掌。

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

字符串(String),是由零個(gè)或多個(gè)字符組成的有限串行。一般記為 s=a[1]a[2]...a[n]。
看到維基百科的偉大了吧,它已經(jīng)把我所設(shè)想的一種情況取了一個(gè)形象的名稱,叫做字符串,本質(zhì)上就是一串字符。

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

嚴(yán)格地說(shuō),在 Python 中的字符串是一種對(duì)象類型,這種類型用 str 表示,通常單引號(hào)''或者雙引號(hào)""包裹起來(lái)。

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

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

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

?
1
2
3
4
5
6
7
8
9
>>> 250
250
>>> type(250)
<type 'int'>
 
>>> "250"
'250'
>>> type("250")
<type 'str'>

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

操練一下字符串吧。

?
1
2
3
4
>>> print "good good study, day day up"
good good study, day day up
>>> print "----good---study---day----up"
----good---study---day----up

在 print 后面,打印的都是字符串。注意,是雙引號(hào)里面的,引號(hào)不是字符串的組成部分。它是在告訴計(jì)算機(jī),它里面包裹著的是一個(gè)字符串。

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

What's your name?
這個(gè)問(wèn)題非常好,因?yàn)樵谶@句話中有一個(gè)單引號(hào),如果直接在交互模式中像上面那樣輸入,就會(huì)這樣:

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

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

在 python 中,這一點(diǎn)是非常友好的,如果語(yǔ)句存在錯(cuò)誤,就會(huì)將錯(cuò)誤輸出來(lái),供程序員改正參考。當(dāng)然,錯(cuò)誤來(lái)源有時(shí)候比較復(fù)雜,需要根據(jù)經(jīng)驗(yàn)和知識(shí)進(jìn)行修改。還有一種修改錯(cuò)誤的好辦法,就是講錯(cuò)誤提示放到 google 中搜索。
上面那個(gè)值的錯(cuò)誤原因是什么呢?仔細(xì)觀察,發(fā)現(xiàn)那句話中事實(shí)上有三個(gè)單引號(hào),本來(lái)一對(duì)單引號(hào)之間包裹的是一個(gè)字符串,現(xiàn)在出現(xiàn)了三個(gè)(一對(duì)半)單引號(hào),computer 姑娘迷茫了,她不知道單引號(hào)包裹的到底是誰(shuí)。于是報(bào)錯(cuò)。

解決方法一:雙引號(hào)包裹單引號(hào)

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

用雙引號(hào)來(lái)包裹,雙引號(hào)里面允許出現(xiàn)單引號(hào)。其實(shí),反過(guò)來(lái),單引號(hào)里面也可以包裹雙引號(hào)。這個(gè)可以籠統(tǒng)地成為二者的嵌套。

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

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

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

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

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

變量和字符串
前面講過(guò)變量無(wú)類型,對(duì)象有類型了,比如在數(shù)字中:

?
1
2
3
>>> a = 5
>>> a
5

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

同樣,在對(duì)字符串類型的對(duì)象,也是這樣,能夠通過(guò)賦值語(yǔ)句,將對(duì)象與某個(gè)標(biāo)簽(變量)關(guān)聯(lián)起來(lái)。

?
1
2
3
4
5
>>> b = "hello,world"
>>> b
'hello,world'
>>> print b
hello,world

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

?
1
2
3
4
>>> type(a)
<type 'int'>
>>> type(b)
<type 'str'>

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

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

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

?
1
2
>>> "Py" + "thon"
'Python'

跟我那個(gè)不為大多數(shù)人認(rèn)可的發(fā)現(xiàn)是一樣的,你還不認(rèn)可嗎??jī)蓚€(gè)字符串相加,就相當(dāng)于把兩個(gè)字符串連接起來(lái)。(別的運(yùn)算就別嘗試了,沒(méi)什么意義,肯定報(bào)錯(cuò),不信就試試)

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

用 + 號(hào)實(shí)現(xiàn)連接,的確比較簡(jiǎn)單,不過(guò),有時(shí)候你會(huì)遇到這樣的問(wèn)題:

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

這里引入了一個(gè)指令:print,意思就是打印后面的字符串(或者指向字符串的變量),上面是 Python2 中的使用方式,在 Python3 中,它變成了一個(gè)函數(shù)。應(yīng)該用 print(b+a)的樣式了。
報(bào)錯(cuò)了,其錯(cuò)誤原因已經(jīng)打印出來(lái)了(一定要注意看打印出來(lái)的信息):cannot concatenate 'str' and 'int' objects。原來(lái) a 對(duì)應(yīng)的對(duì)象是一個(gè) int 類型的,不能將它和 str 對(duì)象連接起來(lái)。怎么辦?

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

修改上面的錯(cuò)誤,可以通過(guò)以下方法:

?
1
2
>>> print b + `a` 
free1989

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

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

?
1
2
>>> print b + str(a)
free1989

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

?
1
2
3
4
5
6
7
8
>>> a = "250"
>>> type(a)
<type 'str'>
>>> b = int(a)
>>> b
250
>>> type(b)
<type 'int'>

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

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

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

可能看官看到這個(gè),就要問(wèn)它們?nèi)咧g的區(qū)別了。首先明確,repr()和 \ 是一致的,就不用區(qū)別了。接下來(lái)需要區(qū)別的就是 repr()和 str,一個(gè)最簡(jiǎn)單的區(qū)別,repr 是函數(shù),str 是跟 int 一樣,一種對(duì)象類型。

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

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

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

 

?
1
2
3
4
5
6
>>> 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" #\\ 是為了要后面那個(gè) \
you can connect me by qq\weibo\gmail

raw_input 和 print
分別在交互模式下,將這個(gè)兩個(gè)函數(shù)操練一下。

?
1
2
3
>>> raw_input("input your name:")
input your name:python
'python'

輸入名字之后,就返回了輸入的內(nèi)容。用一個(gè)變量可以獲得這個(gè)返回值。

?
1
2
3
4
5
6
>>> name = raw_input("input your name:")
input your name:python
>>> name
'python'
>>> type(name)
<type 'str'>

而且,返回的結(jié)果是 str 類型。如果輸入的是數(shù)字呢?

?
1
2
3
4
5
6
>>> age = raw_input("How old are you?")
How old are you?10
>>> age
'10'
>>> type(age)
<type 'str'>

返回的結(jié)果,仍然是 str 類型。

再試試 print(),看前面對(duì)它的說(shuō)明,是比較復(fù)雜的。沒(méi)關(guān)系,我們從簡(jiǎn)單的開(kāi)始。在交互模式下操作:

?
1
2
3
4
5
6
7
8
>>> print("hello, world")
hello, world
>>> a = "python"
>>> b = "good"
>>> print a
python
>>> print a,b
python good

比較簡(jiǎn)單吧。當(dāng)然,這是沒(méi)有搞太復(fù)雜了。

特別要提醒的是,print()默認(rèn)是以 \n 結(jié)尾的,所以,會(huì)看到每個(gè)輸出語(yǔ)句之后,輸出內(nèi)容后面自動(dòng)帶上了 \n,于是就換行了。

有了以上兩個(gè)準(zhǔn)備,接下來(lái)就可以寫一個(gè)能夠“對(duì)話”的小程序了。

?
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python
# coding=utf-8
 
name = raw_input("What is your name?")
age = raw_input("How old are you?")
 
print "Your name is:", name
print "You are " + age + " years old."
 
after_ten = int(age) + 10
print "You will be " + str(after_ten) + " years old after ten years."

對(duì)這段小程序中,有幾點(diǎn)說(shuō)明

前面演示了 print()的使用,除了打印一個(gè)字符串之外,還可以打印字符串拼接結(jié)果。

?
1
print "You are " + age + " years old."

注意,那個(gè)變量 age 必須是字符串,如最后的那個(gè)語(yǔ)句中:

?
1
print "You will be " + str(after_ten) + " years old after ten years."

這句話里面,有一個(gè)類型轉(zhuǎn)化,將原本是整數(shù)型 after_ten 轉(zhuǎn)化為了 str 類型。否則,就包括,不信,你可以試試。

同樣注意,在 after_ten = int(age) + 10 中,因?yàn)橥ㄟ^(guò) raw_input 得到的是 str 類型,當(dāng) age 和 10 求和的時(shí)候,需要先用 int()函數(shù)進(jìn)行類型轉(zhuǎn)化,才能和后面的整數(shù) 10 相加。

這個(gè)小程序,是有點(diǎn)綜合的,基本上把已經(jīng)學(xué)到的東西綜合運(yùn)用了一次。請(qǐng)看官調(diào)試一下,如果沒(méi)有通過(guò),仔細(xì)看報(bào)錯(cuò)信息,你能夠從中獲得修改方向的信息。

原始字符串
所謂原始字符串,就是指字符串里面的每個(gè)字符都是原始含義,比如反斜杠,不會(huì)被看做轉(zhuǎn)義符。如果在一般字符串中,比如

?
1
2
3
>>> print "I like \npython"
I like
python

這里的反斜杠就不是“反斜杠”的原始符號(hào)含義,而是和后面的 n 一起表示換行(轉(zhuǎn)義了)。當(dāng)然,這似乎沒(méi)有什么太大影響,但有的時(shí)候,可能會(huì)出現(xiàn)問(wèn)題,比如打印 DOS 路徑(DOS,有沒(méi)有搞錯(cuò),現(xiàn)在還有人用嗎?)

?
1
2
3
4
5
6
>>> dos = "c:\news"
>>> dos
'c:\news'  # 這里貌似沒(méi)有什么問(wèn)題
>>> print dos # 當(dāng)用 print 來(lái)打印這個(gè)字符串的時(shí)候,就出問(wèn)題了。
c:
ews

如何避免?用前面講過(guò)的轉(zhuǎn)義符可以解決:

?
1
2
3
>>> dos = "c:\\news"
>>> print dos
c:\news

此外,還有一種方法,如:

?
1
2
3
4
5
>>> dos = r"c:\news"
>>> print dos
c:\news
>>> print r"c:\news\python"
c:\news\python

狀如 r"c:\news",由 r 開(kāi)頭引起的字符串,就是原始字符串,在里面放任何字符都表示該字符的原始含義。

這種方法在做網(wǎng)站設(shè)置網(wǎng)站目錄結(jié)構(gòu)的時(shí)候非常有用。使用了原始字符串,就不需要轉(zhuǎn)義了。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产99视频精品免视看7 | 国产美女做爰免费视频网址 | 99久久精品免费看国产 | 久久精品成人免费网站 | 国产成人免费在线观看 | 亚洲 日韩 国产 中文视频 | 欧美 亚洲 一区 | 亚洲第一二三四区 | 色老太bbbbb 色老妇 | 久久青青草原精品国产软件 | 7mav视频| 太紧太深了受不了黑人 | 热久久天天拍天天拍热久久2018 | 91精品国产亚洲爽啪在线影院 | 国产欧美视频高清va在线观看 | 精品国产精品人妻久久无码五月天 | 国产成人影院一区二区 | 久久爽狠狠添AV激情五月 | 天堂中文在线免费观看 | 亚洲图片一区二区 | 精品精品精品 | 日日爽日日操 | 国产久热香蕉在线观看 | 日韩不卡一区二区 | 亚洲精品国产成人7777 | 天天性综合 | 国产九九在线观看播放 | 亚洲国产精品嫩草影院久久 | 高h舔穴| 午夜影视免费 | 欧美一级特黄刺激大片视频 | 亚洲视频在线观看免费视频 | 精品国产自在现线拍国语 | tobu8中国在线观看免费视频 | 视频免费观看在线播放高清 | sxx免费看视频在线播放 | 99国产高清久久久久久网站 | 交换性关系中文字幕6 | 亚洲品质自拍视频 | 99久久伊人一区二区yy5099 | 美女被的在线网站91 |