日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

python字符串解释_Python学习:字符串的简单解释,深入浅出

發(fā)布時(shí)間:2025/3/20 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python字符串解释_Python学习:字符串的简单解释,深入浅出 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

字符串是python很常見的一種數(shù)據(jù)類型,比如日志的打印,程序中函數(shù)的注釋,數(shù)據(jù)庫(kù)的訪問,變量的操作都需要用到字符串。

一、字符串基礎(chǔ)

字符串是由獨(dú)立字符組成的一個(gè)序列,通常包含在單引號(hào)(’’)雙引號(hào)("")或者三引號(hào)之中(’’’ ‘’'或""" “”",兩者一樣),比如下面幾種寫法。

name = 'jason'

city = 'beijing'

text = "welcome to jike shijian"

Python 中單引號(hào)、雙引號(hào)和三引號(hào)的字符串是一模一樣的,沒有區(qū)別。

s1 = 'hello'

s2 = "hello"

s3 = """hello"""

s1 == s2 == s3

True

Python 同時(shí)支持這三種表達(dá)方式,很重要的一個(gè)原因就是,這樣方便你在字符串中,內(nèi)嵌帶引號(hào)的字符串。

Python 的三引號(hào)字符串,則主要應(yīng)用于多行字符串的情境,比如函數(shù)的注釋等等。

同時(shí),Python 也支持轉(zhuǎn)義字符。所謂的轉(zhuǎn)義字符,就是用反斜杠開頭的字符串,來(lái)表示一些特定意義的字符。

在轉(zhuǎn)義字符的應(yīng)用中,最常見的就是換行符’\n’的使用。比如文件讀取,如果我們一行行地讀取,那么每一行字符串的末尾,都會(huì)包含換行符’\n’。而最后做數(shù)據(jù)處理時(shí),我們往往會(huì)丟掉每一行的換行符。

二、字符串的常用操作

可以把字符串想象成一個(gè)由單個(gè)字符組成的數(shù)組,所以,Python 的字符串同樣支持索引,切片和遍歷等等操作。

name = 'jason'

name[0]

'j'

name[1:3]

'as'

和其他數(shù)據(jù)結(jié)構(gòu),如列表、元組一樣,字符串的索引同樣從 0 開始,index=0 表示第一個(gè)元素(字符),[index:index+2] 則表示第 index 個(gè)元素到 index+1 個(gè)元素組成的子字符串。

遍歷字符串同樣很簡(jiǎn)單,相當(dāng)于遍歷字符串中的每個(gè)字符。

for char in name:

print(char)

j

a

s

o

n

要注意,Python 的字符串是不可變的(immutable)。因此,用下面的操作,來(lái)改變一個(gè)字符串內(nèi)部的字符是錯(cuò)誤的,不允許的。

s = 'hello'

s[0] = 'H'

Traceback (most recent call last):

File "", line 1, in

TypeError: 'str' object does not support item assignment

Python 中字符串的改變,通常只能通過創(chuàng)建新的字符串來(lái)完成。比如上述例子中,想把’hello’的第一個(gè)字符’h’,改為大寫的’H’,我們可以采用下面的做法:

s = 'H' + s[1:]

s = s.replace('h', 'H')

第一種方法,是直接用大寫的’H’,通過加號(hào)’+'操作符,與原字符串切片操作的子字符串拼接而成新的字符串。

第二種方法,是直接掃描原字符串,把小寫的’h’替換成大寫的’H’,得到新的字符串。

在其他語(yǔ)言中,如 Java,有可變的字符串類型,比如 StringBuilder,每次添加、改變或刪除字符(串),無(wú)需創(chuàng)建新的字符串,時(shí)間復(fù)雜度僅為 O(1)。這樣就大大提高了程序的運(yùn)行效率。

但可惜的是,Python 中并沒有相關(guān)的數(shù)據(jù)類型,我們還是得老老實(shí)實(shí)創(chuàng)建新的字符串。因此,每次想要改變字符串,往往需要 O(n) 的時(shí)間復(fù)雜度,其中,n 為新字符串的長(zhǎng)度。

但也有一個(gè)例外,打破了字符串不可變的特性。就是使用加法操作符’+='的字符串拼接方法。

str1 += str2 # 表示 str1 = str1 + str2

看下面的例子的時(shí)間復(fù)雜度

s = ''

for n in range(0, 100000):

s += str(n)

每次循環(huán),似乎都得創(chuàng)建一個(gè)新的字符串;而每次創(chuàng)建一個(gè)新的字符串,都需要 O(n) 的時(shí)間復(fù)雜度。因此,總的時(shí)間復(fù)雜度就為 O(1) + O(2) + … + O(n) = O(n^2)。

但這只適用于老版本的python,自從 Python2.5 開始,每次處理字符串的拼接操作時(shí)(str1 += str2),Python 首先會(huì)檢測(cè) str1 還有沒有其他的引用。如果沒有的話,就會(huì)嘗試原地?cái)U(kuò)充字符串 buffer 的大小,而不是重新分配一塊內(nèi)存來(lái)創(chuàng)建新的字符串并拷貝。這樣的話,上述例子中的時(shí)間復(fù)雜度就僅為 O(n) 了。

另外,對(duì)于字符串拼接問題,除了使用加法操作符,我們還可以使用字符串內(nèi)置的 join 函數(shù)。string.join(iterable),表示把每個(gè)元素都按照指定的格式連接起來(lái)。

l = []

for n in range(0, 100000):

l.append(str(n))

l = ' '.join(l)

由于列表的 append 操作是 O(1) 復(fù)雜度,字符串同理。因此,這個(gè)含有 for 循環(huán)例子的時(shí)間復(fù)雜度為 n*O(1)=O(n)。

字符串的分割函數(shù) split()。string.split(separator),表示把字符串按照 separator 分割成子字符串,并返回一個(gè)分割后子字符串組合的列表。它常常應(yīng)用于對(duì)數(shù)據(jù)的解析處理,比如我們讀取了某個(gè)文件的路徑,想要調(diào)用數(shù)據(jù)庫(kù)的 API,去讀取對(duì)應(yīng)的數(shù)據(jù),我們通常會(huì)寫成下面這樣:

def query_data(namespace, table):

"""

given namespace and table, query database to get corresponding

data

"""

path = 'hive://ads/training_table'

namespace = path.split('//')[1].split('/')[0] # 返回'ads'

table = path.split('//')[1].split('/')[1] # 返回 'training_table'

data = query_data(namespace, table)

此外,常見的函數(shù)還有:

string.strip(str),表示去掉首尾的 str 字符串;

string.lstrip(str),表示只去掉開頭的 str 字符串;

string.rstrip(str),表示只去掉尾部的 str 字符串。

這些在數(shù)據(jù)的解析處理中同樣很常見。比如很多時(shí)候,從文件讀進(jìn)來(lái)的字符串中,開頭和結(jié)尾都含有空字符,我們需要去掉它們,就可以用 strip() 函數(shù):

s = ' my name is jason '

s.strip()

'my name is jason'

Python 中字符串還有很多常用操作,比如,string.find(sub, start, end),表示從 start 到 end 查找字符串中子字符串 sub 的位置等等。更多的字符串操作自行查閱文檔。

三、字符串格式化

通常,我們使用一個(gè)字符串作為模板,模板中會(huì)有格式符。這些格式符為后續(xù)真實(shí)值預(yù)留位置,以呈現(xiàn)出真實(shí)值應(yīng)該呈現(xiàn)的格式。字符串的格式化,通常會(huì)用在程序的輸出、logging 等場(chǎng)景。

舉一個(gè)常見的例子。比如我們有一個(gè)任務(wù),給定一個(gè)用戶的 userid,要去數(shù)據(jù)庫(kù)中查詢?cè)撚脩舻囊恍┬畔?#xff0c;并返回。而如果數(shù)據(jù)庫(kù)中沒有此人的信息,我們通常會(huì)記錄下來(lái),這樣有利于往后的日志分析,或者是線上 bug 的調(diào)試等等。

print('no data available for person with id: {}, name: {}'.format(id, name))

其中的

string.format()

,就是所謂的格式化函數(shù);而大括號(hào){}就是所謂的格式符,用來(lái)為后面的真實(shí)值——變量 name 預(yù)留位置。如果id = ‘123’、name=‘jason’,那么輸出便是:

'no data available for person with id: 123, name: jason'

不過要注意,string.format() 是最新的字符串格式函數(shù)與規(guī)范。自然,我們還有其他的表示方法,比如在 Python 之前版本中,字符串格式化通常用 % 來(lái)表示,那么上述的例子,就可以寫成下面這樣:

print('no data available for person with id: %s, name: %s' % (id, name))

當(dāng)然,新的版本提出來(lái)

格式化字符串f-string

,亦稱為格式化字符串常量(formatted string literals),是Python3.6新引入的一種字符串格式化方法,主要目的是使格式化字符串的操作更加簡(jiǎn)便。f-string在形式上是以 f 或 F 修飾符引領(lǐng)的字符串(f’xxx’ 或 F’xxx’),以大括號(hào) {} 標(biāo)明被替換的字段。

f-string在功能方面不遜于傳統(tǒng)的%-formatting語(yǔ)句和str.format()函數(shù),同時(shí)性能又優(yōu)于二者,且使用起來(lái)也更加簡(jiǎn)潔明了,因此對(duì)于Python3.6及以后的版本,推薦使用f-string進(jìn)行字符串格式化。

簡(jiǎn)單使用

f-string用大括號(hào) {} 表示被替換字段,其中直接填入替換內(nèi)容:

>>> name = 'Eric'

>>> f'Hello, my name is {name}'

'Hello, my name is Eric'

>>> number = 7

>>> f'My lucky number is {number}'

'My lucky number is 7'

>>> price = 19.99

>>> f'The price of this book is {price}'

'The price of this book is 19.99'

表達(dá)式求值與函數(shù)調(diào)用

f-string的大括號(hào) {} 可以填入表達(dá)式或調(diào)用函數(shù),Python會(huì)求出其結(jié)果并填入返回的字符串內(nèi):

>>> f'A total number of {24 * 8 + 4}'

'A total number of 196'

>>> f'Complex number {(2 + 2j) / (2 - 3j)}'

'Complex number (-0.15384615384615388+0.7692307692307692j)'

>>> name = 'ERIC'

>>> f'My name is {name.lower()}'

'My name is eric'

>>> import math

>>> f'The answer is {math.log(math.pi)}'

'The answer is 1.1447298858494002'

引號(hào)、大括號(hào)與反斜杠

f-string大括號(hào)內(nèi)所用的引號(hào)不能和大括號(hào)外的引號(hào)定界符沖突,可根據(jù)情況靈活切換 ’ 和 ":

>>> f'I am {"Eric"}'

'I am Eric'

>>> f'I am {'Eric'}'

File "", line 1

f'I am {'Eric'}'

^

SyntaxError: invalid syntax

lambda表達(dá)式

f-string大括號(hào)內(nèi)也可填入lambda表達(dá)式,但lambda表達(dá)式的 : 會(huì)被f-string誤認(rèn)為是表達(dá)式與格式描述符之間的分隔符,為避免歧義,需要將lambda表達(dá)式置于括號(hào) () 內(nèi):

>>> f'result is {lambda x: x ** 2 + 1 (2)}'

File "", line 1

(lambda x)

^

SyntaxError: unexpected EOF while parsing

>>> f'result is {(lambda x: x ** 2 + 1) (2)}'

'result is 5'

>>> f'result is {(lambda x: x ** 2 + 1) (2):

'result is +5.00 '

總結(jié)

主要是Python 字符串的一些基本知識(shí)和常用操作。

需要注意的是:

Python 中字符串使用單引號(hào)、雙引號(hào)或三引號(hào)表示,三者意義相同,并沒有什么區(qū)別。其中,三引號(hào)的字符串通常用在多行字符串的場(chǎng)景。

Python 中字符串是不可變的(前面所講的新版本 Python 中拼接操作’+='是個(gè)例外)。因此,隨意改變字符串中字符的值,是不被允許的。

Python 新版本(2.5+)中,字符串的拼接變得比以前高效了許多,你可以放心使用。

Python 中字符串的格式化(string.format)常常用在輸出、日志的記錄等場(chǎng)景。同時(shí)還有最新的f-string格式化字符串。

參考:

《Python核心技術(shù)與實(shí)踐》

《f-string的使用》

總結(jié)

以上是生活随笔為你收集整理的python字符串解释_Python学习:字符串的简单解释,深入浅出的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。