亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python中的字符串類型基本知識學習教程

2020-01-04 17:46:53
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Python中的字符串類型基本知識學習教程,包括轉義符和字符串拼接以及原始字符串等基礎知識講解,需要的朋友可以參考下
 

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

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

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

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

太天才了。請鼓掌。

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

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

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

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

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

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

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

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

仔細觀察上面的區別,同樣是 250,一個沒有放在引號里面,一個放在了引號里面,用 type()函數來檢驗一下,發現它們居然是兩種不同的對象類型,前者是 int 類型,后者則是 str 類型,即字符串類型。所以,請大家務必注意,不是所有數字都是 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 后面,打印的都是字符串。注意,是雙引號里面的,引號不是字符串的組成部分。它是在告訴計算機,它里面包裹著的是一個字符串。

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

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

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

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

在 python 中,這一點是非常友好的,如果語句存在錯誤,就會將錯誤輸出來,供程序員改正參考。當然,錯誤來源有時候比較復雜,需要根據經驗和知識進行修改。還有一種修改錯誤的好辦法,就是講錯誤提示放到 google 中搜索。
上面那個值的錯誤原因是什么呢?仔細觀察,發現那句話中事實上有三個單引號,本來一對單引號之間包裹的是一個字符串,現在出現了三個(一對半)單引號,computer 姑娘迷茫了,她不知道單引號包裹的到底是誰。于是報錯。

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

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

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

解決方法二:使用轉義符

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

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

是不是看到轉義符 / 的作用了。

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

變量和字符串
前面講過變量無類型,對象有類型了,比如在數字中:

>>> a = 5>>> a5

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

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

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

還記得我們曾經用過一個 type 命令嗎?現在它還有用,就是檢驗一個變量,到底跟什么類型聯系著,是字符串還是數字?

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

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

拼接字符串
還記得我在本節開篇提出的那個偉大發現嗎?就是將兩個東西拼接起來。

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

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

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

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

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

>>> 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 中,它變成了一個函數。應該用 print(b+a)的樣式了。
報錯了,其錯誤原因已經打印出來了(一定要注意看打印出來的信息):cannot concatenate 'str' and 'int' objects。原來 a 對應的對象是一個 int 類型的,不能將它和 str 對象連接起來。怎么辦?

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

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

>>> print b + `a`  free1989

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

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

>>> print b + str(a) free1989

用 str(a)實現將整數對象轉換為字符串對象。雖然 str 是一種對象類型,但是它也能夠實現對象類型的轉換,這就起到了一個函數的作用。其實前面已經講過的 int 也有類似的作用。比如:

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

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

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

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

可能看官看到這個,就要問它們三者之間的區別了。首先明確,repr()和 / 是一致的,就不用區別了。接下來需要區別的就是 repr()和 str,一個最簡單的區別,repr 是函數,str 是跟 int 一樣,一種對象類型。

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

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

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

 

>>> print "hello.I am qiwsir./     # 這里換行,下一行接續... 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

raw_input 和 print
分別在交互模式下,將這個兩個函數操練一下。

>>> raw_input("input your name:")input your name:python'python'

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

>>> name = raw_input("input your name:")input your name:python>>> name'python'>>> type(name)<type 'str'>

而且,返回的結果是 str 類型。如果輸入的是數字呢?

>>> age = raw_input("How old are you?")How old are you?10>>> age'10'>>> type(age)<type 'str'>

返回的結果,仍然是 str 類型。

再試試 print(),看前面對它的說明,是比較復雜的。沒關系,我們從簡單的開始。在交互模式下操作:

>>> print("hello, world")hello, world>>> a = "python">>> b = "good">>> print apython>>> print a,bpython good

比較簡單吧。當然,這是沒有搞太復雜了。

特別要提醒的是,print()默認是以 /n 結尾的,所以,會看到每個輸出語句之后,輸出內容后面自動帶上了 /n,于是就換行了。

有了以上兩個準備,接下來就可以寫一個能夠“對話”的小程序了。

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

對這段小程序中,有幾點說明

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

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

注意,那個變量 age 必須是字符串,如最后的那個語句中:

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

這句話里面,有一個類型轉化,將原本是整數型 after_ten 轉化為了 str 類型。否則,就包括,不信,你可以試試。

同樣注意,在 after_ten = int(age) + 10 中,因為通過 raw_input 得到的是 str 類型,當 age 和 10 求和的時候,需要先用 int()函數進行類型轉化,才能和后面的整數 10 相加。

這個小程序,是有點綜合的,基本上把已經學到的東西綜合運用了一次。請看官調試一下,如果沒有通過,仔細看報錯信息,你能夠從中獲得修改方向的信息。

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

>>> print "I like /npython"I like python

這里的反斜杠就不是“反斜杠”的原始符號含義,而是和后面的 n 一起表示換行(轉義了)。當然,這似乎沒有什么太大影響,但有的時候,可能會出現問題,比如打印 DOS 路徑(DOS,有沒有搞錯,現在還有人用嗎?)

>>> dos = "c:/news">>> dos'c:/news'  # 這里貌似沒有什么問題>>> print dos # 當用 print 來打印這個字符串的時候,就出問題了。c:ews

如何避免?用前面講過的轉義符可以解決:

>>> dos = "c://news">>> print dosc:/news

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

>>> dos = r"c:/news">>> print dosc:/news>>> print r"c:/news/python"c:/news/python

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

這種方法在做網站設置網站目錄結構的時候非常有用。使用了原始字符串,就不需要轉義了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲自拍欧美色图| 视频在线观看一区二区| 亚洲欧洲午夜一线一品| 欧美性猛xxx| 成人字幕网zmw| 国产精品影院在线观看| 日韩中文在线视频| 亚洲成色999久久网站| 国产91色在线免费| 国产欧美一区二区三区四区| 久久久影视精品| 夜夜嗨av一区二区三区免费区| 亚洲欧美一区二区激情| 亚洲国产精久久久久久久| 国自产精品手机在线观看视频| 国产精品久久久久久久久久99| 成人精品一区二区三区电影免费| 最新国产成人av网站网址麻豆| 久久综合电影一区| 亚洲精品自拍视频| 亚洲美女黄色片| 成人黄色av网| 国产精品视频yy9099| 欧美激情乱人伦一区| 久久久久久久久久婷婷| 亚洲精品国精品久久99热一| 91极品女神在线| 亚洲国产欧美一区二区三区同亚洲| 久久6精品影院| 日韩福利视频在线观看| 国产精品美女久久久免费| 国产精品免费在线免费| 色伦专区97中文字幕| 亚洲人成电影网站色| 中文字幕亚洲一区二区三区| 免费不卡欧美自拍视频| 日本精品久久久久影院| 国产精品欧美久久久| 亚洲精品mp4| 久久影视三级福利片| 亚洲国产成人久久综合| 欧美日韩亚洲91| 国产亚洲欧洲黄色| 精品国产视频在线| 欧美电影《睫毛膏》| 亚洲国产欧美一区二区三区久久| 亚洲国产精久久久久久| 久久视频在线观看免费| 欧美国产第二页| 国产成人精品在线观看| 亚洲一区二区自拍| 久久久久久久久久久免费| 亚洲mm色国产网站| 青草青草久热精品视频在线网站| 成人国产精品一区二区| 亚洲人成人99网站| 成人福利在线观看| 日韩欧美在线中文字幕| 最近2019中文字幕第三页视频| 欧美亚洲成人精品| 亚洲欧美在线一区二区| 色yeye香蕉凹凸一区二区av| 中文字幕国内精品| 亚洲欧洲高清在线| 国产美女被下药99| 精品日韩美女的视频高清| 色综合老司机第九色激情| 久久天天躁夜夜躁狠狠躁2022| 成人av在线亚洲| 欧美日韩性生活视频| 亚洲国产精品高清久久久| 黑人巨大精品欧美一区二区一视频| 亚洲男女自偷自拍图片另类| 国产日韩视频在线观看| 久久激情视频免费观看| 国产精品一久久香蕉国产线看观看| 亚洲欧美中文日韩在线v日本| 中文字幕少妇一区二区三区| 久久久精品在线| 亚州欧美日韩中文视频| 欧美大奶子在线| 国产裸体写真av一区二区| 日韩在线资源网| 亚洲精品国产电影| 成人做爰www免费看视频网站| 亚洲在线一区二区| 精品爽片免费看久久| 久久久精品一区二区三区| 国产在线日韩在线| 午夜精品久久久久久久99热浪潮| 欧美国产精品va在线观看| 亚洲视频精品在线| 日韩成人网免费视频| 国自在线精品视频| 高潮白浆女日韩av免费看| 国产成人精品电影久久久| 一本色道久久88综合亚洲精品ⅰ| 搡老女人一区二区三区视频tv| 亚洲精品久久久久| 国产深夜精品福利| 国产日韩欧美在线播放| 久久综合电影一区| 亚洲精品第一页| 亚洲一区二区三区在线视频| 成人国产精品久久久久久亚洲| 九九热99久久久国产盗摄| 亚洲成人精品av| 欧美日韩不卡合集视频| 日韩在线观看免费全集电视剧网站| 欧美一区视频在线| 国产精国产精品| 国产精品高清免费在线观看| 91高清免费视频| 国产精品网站大全| 日韩欧美亚洲范冰冰与中字| 欧美日韩国产一区中文午夜| 日韩av资源在线播放| 青青a在线精品免费观看| 国产成+人+综合+亚洲欧洲| 中文字幕国产精品久久| 亚洲国产成人爱av在线播放| 精品日韩视频在线观看| 国产精品91在线观看| 青青在线视频一区二区三区| 91av视频在线观看| 精品久久久久久久久久| 午夜精品久久17c| 欧美老女人性生活| 懂色av一区二区三区| 亚洲性视频网址| 高清日韩电视剧大全免费播放在线观看| 国产精品视频不卡| 亚洲图片欧洲图片av| 国产精品第100页| 国模视频一区二区三区| 色哟哟亚洲精品一区二区| 国外成人在线直播| 日本精品免费一区二区三区| 亚洲日韩欧美视频一区| 久久久久久久久久国产精品| 91sa在线看| 日本国产精品视频| 日韩av在线资源| 国产主播在线一区| 久久久久亚洲精品国产| 曰本色欧美视频在线| 免费不卡欧美自拍视频| 狠狠色狠色综合曰曰| 欧美激情欧美狂野欧美精品| 国产一区二区动漫| 91精品国产色综合久久不卡98| 亚洲欧美日韩区| 日本国产精品视频| 国语对白做受69| 国产亚洲精品综合一区91| 在线电影av不卡网址| 亚洲美女av网站| 欧美激情一区二区三级高清视频| 国产精品一区二区三区免费视频| 日韩av一卡二卡| 亚洲国产精品专区久久| 伊人伊成久久人综合网站| 欧美日韩另类字幕中文| 国产成人avxxxxx在线看|