日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
闡述PyString Object對(duì)象源代碼

Python也被稱為是一門非常透徹的語言,在當(dāng)初設(shè)計(jì)者當(dāng)初設(shè)計(jì)它的時(shí)候,大體的指導(dǎo)思想,就是對(duì)于一個(gè)特定的問題,只要有一種最好的方法來解決就OK了,下面對(duì)Python PyStringObject對(duì)象說明。

與定長(zhǎng)對(duì)象不同,對(duì)于變長(zhǎng)對(duì)象而言,對(duì)象維護(hù)的數(shù)據(jù)的長(zhǎng)度在對(duì)象定義時(shí)是不知道的。對(duì)于PyIntObject來說,其維護(hù)的數(shù)據(jù)的長(zhǎng)度在對(duì)象定義時(shí)就已經(jīng)確定了。是一個(gè)long變量的長(zhǎng)度;而可變對(duì)象維護(hù)的數(shù)據(jù)的長(zhǎng)度只能在對(duì)象創(chuàng)建時(shí)才能確定,考慮一下,我們只能在創(chuàng)建一個(gè)字符串或一個(gè)列表時(shí)才知道它們所維護(hù)的數(shù)據(jù)的長(zhǎng)度,在此之前,對(duì)這個(gè)信息,我們一無所知。

在變長(zhǎng)對(duì)象中,實(shí)際上還可分為可變對(duì)象(mutable)和不可變對(duì)象(immutable),可變對(duì)象是在對(duì)象創(chuàng)建之后,其維護(hù)的數(shù)據(jù)的長(zhǎng)度還能變化的對(duì)象。比如一個(gè)list被創(chuàng)建后,可以向其中添加元素或刪除元素。

這些操作都會(huì)改變其維護(hù)的數(shù)據(jù)的長(zhǎng)度;而不可變對(duì)象所維護(hù)的數(shù)據(jù)在對(duì)象創(chuàng)建之后就不能再改變了,比如Python中的string和tuple,它們都不支持添加或刪除的操作。本章我們將研究Python變長(zhǎng)對(duì)象中的不可變對(duì)象——字符串對(duì)象。

在Python中,PyStringObject是對(duì)字符串對(duì)象的抽象和表示。PyStringObject對(duì)象是一個(gè)擁有可變長(zhǎng)度內(nèi)存的對(duì)象,這一點(diǎn)非常容易理解,因?yàn)閷?duì)于表示”Hi”和”Python”的兩個(gè)不同的PyStringObject對(duì)象,其內(nèi)部需要的保存字符串內(nèi)容的內(nèi)存空間顯然是不一樣的。

但同時(shí),PyStringObject對(duì)象又是一個(gè)不變對(duì)象(Immutable)。當(dāng)創(chuàng)建了一個(gè)PyStringObject對(duì)象之后,該對(duì)象內(nèi)部維護(hù)的字符串就不能再被改變了。這一點(diǎn)特性使得PyStringObject對(duì)象能作為PyDictObject的鍵值,但同時(shí)也使得一些字符串操作的效率大大降低,比如多個(gè)字符串的連接操作。

PyStringObject對(duì)象的聲明如下:

 
 
 
  1. [stringobject.h]   
  2. typedef struct {   
  3.  PyObject_VAR_HEAD  
  4.   long ob_shash;    
  5. int ob_sstate;    
  6. char ob_sval[1];} PyStringObject; 

在PyStringObject的定義中我們看到,在PyStringObject對(duì)象的頭部實(shí)際上是一個(gè)PyObject_VAR_HEAD,其中有一個(gè)ob_size變量保存著對(duì)象中維護(hù)的可變長(zhǎng)度內(nèi)存的長(zhǎng)度。雖然在PyStringObject的定義中,ob_sval是一個(gè)字符的字符數(shù)組。

但是ob_sval實(shí)際上是作為一個(gè)字符指針指向了一段內(nèi)存,這段內(nèi)存保存著這個(gè)字符串對(duì)象所維護(hù)的實(shí)際字符串,顯然,這段內(nèi)存不會(huì)只是一個(gè)字節(jié)。而這段內(nèi)存的實(shí)際長(zhǎng)度(字節(jié)),正是由ob_size來維護(hù),這個(gè)機(jī)制是Python中所有擁有可變長(zhǎng)度內(nèi)存的對(duì)象的實(shí)現(xiàn)機(jī)制。比如對(duì)于PyStringObject對(duì)象”Python”,ob_size的值就是6。

同C中的字符串一樣,PyStringObject內(nèi)部維護(hù)的字符串在末尾必須以’\0’結(jié)尾,但是由于字符串的實(shí)際長(zhǎng)度是由ob_size維護(hù)的,所以PyStringObject表示的字符串對(duì)象中間是可能出現(xiàn)字符’\0’的,這一點(diǎn)與C語言中不同,因?yàn)樵贑中。只要遇到了字符’\0’,就認(rèn)為一個(gè)字符串結(jié)束了。所以,實(shí)際上,ob_sval指向的是一段長(zhǎng)度為ob_size+1個(gè)字節(jié)的內(nèi)存,而且必須滿足ob_sval[ob_size] = ‘\0’。

【編輯推薦】

  1. 如何使Python嵌入C++應(yīng)用程序?
  2. 深入探討Ruby與Python語法比較
  3. Python學(xué)習(xí)資料介紹分享
  4. Python學(xué)習(xí)經(jīng)驗(yàn)談:版本、IDE選擇及編碼解 決方案
  5. 淺析Python的GIL和線程安全

標(biāo)題名稱:闡述PyString Object對(duì)象源代碼
網(wǎng)頁鏈接:http://www.5511xx.com/article/djhosdd.html