Python3中的編碼問題前,第一個段落對字節(jié)、ASCII與Unicode與UTF-8等進(jìn)行基本介紹,如果不對這幾種編碼犯頭暈,可直接跳過。
創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端成都網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)站定制、全網(wǎng)整合營銷推廣、小程序制作、微信公眾號開發(fā)、營銷推廣服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計、程序開發(fā)來完成項目落地,為假山制作企業(yè)提供源源不斷的流量和訂單咨詢。
ASCII與Unicode與UTF-8與GBK
首先從老大哥說起。跟很多人一樣,大學(xué)讀了這么久,久仰ASCII編碼的大名。要說這個老大哥,我們再先從字節(jié)說起。一個字節(jié)包括八個比特位,每個比特位表示0或1,一個字節(jié)即可表示從00000000到11111111共2^8=256個數(shù)字。一個ASCII編碼使用一個字節(jié)(除去字節(jié)的最高位作為作奇偶校驗位),ASCII編碼實際使用一個字節(jié)中的7個比特位來表示字符,共可表示2^7=128個字符。比如那時寫C語言的程序,就經(jīng)常要背下ASCII編碼中的01000001(即十進(jìn)制的65)表示字符‘A’,01000001加上32之后的01100001(即十進(jìn)制的97)表示字符‘a(chǎn)’。現(xiàn)在打開Python,調(diào)用chr和ord函數(shù),我們可以看到Python為我們對ASCII編碼進(jìn)行了轉(zhuǎn)換。
第一個00000000表示空字符,因此ASCII編碼實際上只包括了
字母、標(biāo)點符號、特殊符號等共127個字符。因為ASCII是在美國出生的,對于由字母組成單詞進(jìn)而用單詞表達(dá)的英文來說也是夠了。但是中國人、日本人、
韓國人等其他語言的人不服了。中文是一個字一個字,ASCII編碼用上了渾身解數(shù)256個字符都不夠用。
因此后來出現(xiàn)了Unicode編碼。Unicode編碼通常由兩個字節(jié)組成,共表示256*256個字符,即所謂的UCS-2。某些偏僻字還會用到四個字節(jié),即所謂的UCS-4。也就是說Unicode標(biāo)準(zhǔn)也還在發(fā)展。但UCS-4出現(xiàn)的比較少,我們先記?。鹤钤嫉腁SCII編碼使用一個字節(jié)編碼,但由于語言差異字符眾多,人們用上了兩個字節(jié),出現(xiàn)了統(tǒng)一的、囊括多國語言的Unicode編碼。
在Unicode中,原本ASCII中的127個字符只需在前面補(bǔ)一個全零的字節(jié)即可,比如前文談到的字符‘a(chǎn)’:01100001,在Unicode中變成了00000000 01100001。不久,美國人不開心了,吃上了世界民族之林的大鍋飯,原本只需一個字節(jié)就能傳輸?shù)挠⑽默F(xiàn)在變成兩個字節(jié),非常浪費存儲空間和傳輸速度。
人們再發(fā)揮聰明才智,于是出現(xiàn)了UTF-8編碼。因為針對的是空間浪費問題,因此這種UTF-8編碼是可變長短的,從英文字母的一個字節(jié),到中文的通常的三個字節(jié),再到某些生僻字的六個字節(jié)。解決了空間問題,UTF-8編碼還有一個神奇的附加功能,那就是兼容了老大哥的ASCII編碼。一些老古董軟件現(xiàn)在在UTF-8編碼中可以繼續(xù)工作。
注意除了英文字母相同,漢字在Unicode編碼和UTF-8編碼中通常是不同的。比如漢字的‘中’字在Unicode中是01001110
00101101,而在UTF-8編碼中是11100100 10111000
10101101。
我們祖國母親自然也有自己的一套標(biāo)準(zhǔn)。那就是GB2312和GBK。當(dāng)然現(xiàn)在挺少看到。通常都是直接使用UTF-8。記得我唯一一次看到GB編碼的網(wǎng)頁,是一個成人網(wǎng)站。
Python3中的默認(rèn)編碼
Python3中默認(rèn)是UTF-8,我們通過以下代碼:
import sys
sys.getdefaultencoding()
可查看Python3的默認(rèn)編碼。
Python3中的encode和decode
Python3中字符編碼經(jīng)常會使用到decode和encode函數(shù)。特別是在抓取網(wǎng)頁中,這兩個函數(shù)用的熟練非常有好處。我的理解,encode的作用,使我們看到的直觀的字符轉(zhuǎn)換成計算機(jī)內(nèi)的字節(jié)形式。decode剛好相反,把字節(jié)形式的字符轉(zhuǎn)換成我們看的懂的、直觀的、“人模人樣”的形式。如下圖。
\x表示后面是十六進(jìn)制,\xe4\xb8\xad即是二進(jìn)制的11100100 10111000
10101101。也就是說漢字‘中’encode成字節(jié)形式,是11100100 10111000
10101101。同理,我們拿11100100
10111000 10101101也就是\xe4\xb8\xad來decode回來,就是漢字‘中’。完整的應(yīng)該是b'\xe4\xb8\xad',在Python3中,以字節(jié)形式表示的字符串則必須加上前綴b,也就是寫成上文的b'xxxx'形式。
前文說的Python3的默認(rèn)編碼是UTF-8,所以我們可以看到,Python處理這些字符的時候是以UTF-8來處理的。因此從上圖可以看到,就算我們通過encode('utf-8')特意把字符encode為UTF-8編碼,出來的結(jié)果還是相同:b'\xe4\xb8\xad'。
明白了這一點,同時我們知道UTF-8兼容ASCII,我們可以猜想大學(xué)時經(jīng)常背誦的‘A’對應(yīng)ASCII中的65,在這里是不是也能正確的decode出來呢。十進(jìn)制的65轉(zhuǎn)換成十六進(jìn)制是41,我們嘗試下:
b'\x41'.decode()
結(jié)果如下。果然是字符‘A’
Python3中的編碼轉(zhuǎn)換
據(jù)說字符在計算機(jī)的內(nèi)存中統(tǒng)一是以Unicode編碼的。只有在字符要被寫進(jìn)文件、存進(jìn)硬盤或者從服務(wù)器發(fā)送至客戶端(例如網(wǎng)頁前端的代碼)時會變成utf-8。但其實我比較關(guān)心怎么把這些字符以Unicode的字節(jié)形式表現(xiàn)出來,露出它在內(nèi)存中的廬山正面目的。這里有個照妖鏡:
xxxx.encode/decode('unicode-escape')
輸出如下
b'\\u4e2d'還是b'\u4e2d,一個斜杠貌似沒影響。同時可以發(fā)現(xiàn)在shell窗口中,直接輸'\u4e2d'和輸入b'\u4e2d'.decode('unicode-escape')是相同的,都會打印出漢字‘中’,反而是'\u4e2d'.decode('unicode-escape')會報錯。說明說明Python3不僅支持Unicode,而且一個‘\uxxxx’格式的Unicode字符可被辨識且被等價于str類型。
如果我們知道一個Unicode字節(jié)碼,怎么變成UTF-8的字節(jié)碼呢。懂了以上這些,現(xiàn)在我們就有思路了,先decode,再encode。代碼如下:
xxx.decode('unicode-escape').encode()
測試如下:
可以看到最后輸出的UTF-8字節(jié)與上面的相同。嘗試成功。所以其他的編碼之間的轉(zhuǎn)換,大概也是如此。
最后的擴(kuò)展
還記得剛剛那個ord嗎。時代變遷,老大哥ASCII被人合并,但ord還是有用武之地。試試ord('中'),輸出結(jié)果是20013。20013是什么呢,我們再試試hex(ord('中')),輸出結(jié)果是'0x4e2d',也就是20013是我們在上文見面了無數(shù)次的x4e2d的十進(jìn)制值。這里說下hex,是用來轉(zhuǎn)換成十六進(jìn)制的函數(shù),學(xué)過單片機(jī)的人對hex肯定不會陌生。
最后的擴(kuò)展,在網(wǎng)上看到的他人的問題。我們寫下類似于'\u4e2d'的字符,Python3知道我們想表達(dá)什么。但是讓Python讀取某個文件的時候出現(xiàn)了'\u4e2d',是不是計算機(jī)就不認(rèn)識它了呢?后來下文有人給出了答案。如下:
import codecs
file = codecs.open( "a.txt", "r", "unicode-escape" )
u = file.read()
print(u)
編碼
字符串是一種數(shù)據(jù)類型,但是,字符串比較特殊的是還有一個編碼問題。
因為計算機(jī)只能處理數(shù)字,如果要處理文本,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理。最早的計算機(jī)在設(shè)計時采用8個比特(bit)作為一個字節(jié)(byte),所以,一個字節(jié)能表示的最大的整數(shù)就是255(二進(jìn)制11111111=十進(jìn)制255),如果要表示更大的整數(shù),就必須用更多的字節(jié)。比如兩個字節(jié)可以表示的最大整數(shù)是65535,4個字節(jié)可以表示的最大整數(shù)是4294967295。
由于計算機(jī)是美國人發(fā)明的,因此,最早只有127個字母被編碼到計算機(jī)里,也就是大小寫英文字母、數(shù)字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。
Unicode
Unicode把所有語言都統(tǒng)一到一套編碼里,這樣就不會再有亂碼問題了。
Unicode標(biāo)準(zhǔn)也在不斷發(fā)展,但最常用的是用兩個字節(jié)表示一個字符(如果要用到非常偏僻的字符,就需要4個字節(jié))?,F(xiàn)代操作系統(tǒng)和大多數(shù)編程語言都直接支持Unicode。
現(xiàn)在,捋一捋ASCII編碼和Unicode編碼的區(qū)別:ASCII編碼是1個字節(jié),而Unicode編碼通常是2個字節(jié)。
字母A用ASCII編碼是十進(jìn)制的65,二進(jìn)制的01000001;
字符0用ASCII編碼是十進(jìn)制的48,二進(jìn)制的00110000,注意字符'0'和整數(shù)0是不同的;
漢字已經(jīng)超出了ASCII編碼的范圍,用Unicode編碼是十進(jìn)制的20013,二進(jìn)制的01001110 00101101。
如果把ASCII編碼的A用Unicode編碼,只需要在前面補(bǔ)0就可以,因此,A的Unicode編碼是00000000 01000001。
新的問題又出現(xiàn)了:如果統(tǒng)一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不劃算。
所以,又出現(xiàn)了把Unicode編碼轉(zhuǎn)化為“可變長編碼”的UTF-8編碼。UTF-8編碼把一個Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個字節(jié),常用的英文字母被編碼成1個字節(jié),漢字通常是3個字節(jié),只有很生僻的字符才會被編碼成4-6個字節(jié)。如果你要傳輸?shù)奈谋景罅坑⑽淖址?,用UTF-8編碼就能節(jié)省空間:
字符
ASCII
Unicode
UTF-8
A ? ?01000001 ? ?00000000 01000001 ? ?01000001 ?
中 ? ?x ? ?01001110 00101101 ? ?11100100 10111000 10101101 ?
從上面的表格還可以發(fā)現(xiàn),UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續(xù)工作。
搞清楚了ASCII、Unicode和UTF-8的關(guān)系,我們就可以總結(jié)一下現(xiàn)在計算機(jī)系統(tǒng)通用的字符編碼工作方式:
在計算機(jī)內(nèi)存中,統(tǒng)一使用Unicode編碼,當(dāng)需要保存到硬盤或者需要傳輸?shù)臅r候,就轉(zhuǎn)換為UTF-8編碼。
用記事本編輯的時候,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里,編輯完成后,保存的時候再把Unicode轉(zhuǎn)換為UTF-8保存到文件:
瀏覽網(wǎng)頁的時候,服務(wù)器會把動態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器:
所以你看到很多網(wǎng)頁的源碼上會有類似meta charset="UTF-8" /的信息,表示該網(wǎng)頁正是用的UTF-8編碼。
Python的字符串
在最新的Python 3版本中,字符串是以Unicode編碼的,也就是說,Python的字符串支持多語言,例如:
print('包含中文的str')
包含中文的str
對于單個字符的編碼,Python提供了ord()函數(shù)獲取字符的整數(shù)表示,chr()函數(shù)把編碼轉(zhuǎn)換為對應(yīng)的字符:
ord('A')65
ord('中')20013
chr(66)'B' chr(25991)'文'
如果知道字符的整數(shù)編碼,還可以用十六進(jìn)制這么寫str
'\u4e2d\u6587' // 中文
byte
由于Python的字符串類型是str,在內(nèi)存中以Unicode表示,一個字符對應(yīng)若干個字節(jié)。如果要在網(wǎng)絡(luò)上傳輸,或者保存到磁盤上,就需要把str變?yōu)橐宰止?jié)為單位的bytes。
Python對bytes類型的數(shù)據(jù)用帶b前綴的單引號或雙引號表示:
x = b'ABC'
要注意區(qū)分'ABC'和b'ABC',前者是str,后者雖然內(nèi)容顯示得和前者一樣,但bytes的每個字符都只占用一個字節(jié)。
以Unicode表示的str通過encode()方法可以編碼為指定的bytes,例如:
'ABC'.encode('ascii')
b'ABC' '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87' '中文'.encode('ascii')
Traceback (most recent call last):
File "stdin", line 1, in moduleUnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
純英文的str可以用ASCII編碼為bytes,內(nèi)容是一樣的,含有中文的str可以用UTF-8編碼為bytes。含有中文的str無法用ASCII編碼,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯。
在bytes中,無法顯示為ASCII字符的字節(jié),用\x##顯示。
反過來,如果我們從網(wǎng)絡(luò)或磁盤上讀取了字節(jié)流,那么讀到的數(shù)據(jù)就是bytes。要把bytes變?yōu)閟tr,就需要用decode()方法:
b'ABC'.decode('ascii')'ABC' b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')'中文'
要計算str包含多少個字符,可以用len()函數(shù)
len('ABC')3
len('中文')2
len()函數(shù)計算的是str的字符數(shù),如果換成bytes,len()函數(shù)就計算字節(jié)數(shù)
len(b'ABC')3
len(b'\xe4\xb8\xad\xe6\x96\x87')6
len('中文'.encode('utf-8'))6
1個中文字符經(jīng)過UTF-8編碼后通常會占用3個字節(jié),而1個英文字符只占用1個字節(jié)。
在操作字符串時,我們經(jīng)常遇到str和bytes的互相轉(zhuǎn)換。為了避免亂碼問題,應(yīng)當(dāng)始終堅持使用UTF-8編碼對str和bytes進(jìn)行轉(zhuǎn)換。
Python源代碼也是一個文本文件,所以,當(dāng)你的源代碼中包含中文的時候,在保存源代碼時,就需要務(wù)必指定保存為UTF-8編碼。當(dāng)Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行
#!/usr/bin/env python3# -*- coding: utf-8 -*-
第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。
格式化:
在Python中,采用的格式化方式和C語言是一致的,用%實現(xiàn),舉例如下:
format % (...params)
'Hello, %s' % 'world''Hello, world' 'Hi, %s, you have $%d.' % ('Michael', 1000000)'Hi, Michael, you have $1000000.'
%運(yùn)算符就是用來格式化字符串的。在字符串內(nèi)部,%s表示用字符串替換,%d表示用整數(shù)替換,%x表示16進(jìn)制整數(shù),有幾個%?占位符,后面就跟幾個變量或者值,順序要對應(yīng)好。如果只有一個%?,括號可以省略。
格式化整數(shù)和浮點數(shù)還可以指定是否補(bǔ)0和整數(shù)與小數(shù)的位數(shù):
'%2d-%02d' % (3, 1)' 3-01' '%.2f' % 3.1415926'3.14'
有些時候,字符串里面的%是一個普通字符怎么辦?這個時候就需要轉(zhuǎn)義,用%%來表示一個%:
'growth rate: %d %%' % 7'growth rate: 7 %'
1、一般來說,聲明編碼格式在腳本中是必需的。2、如果Python源碼文件沒有聲明編碼格式,Python解釋器會默認(rèn)使用ASCII編碼。但出現(xiàn)非ASCII編碼的字符,Python解釋器就會報錯。
1、Python 采用代碼縮進(jìn)和冒號( : )來區(qū)分代碼塊之間的層次。2、在 Python 中,對于類定義、函數(shù)定義、流程控制語句、異常處理語句等,行尾的冒號和下一行的縮進(jìn),表示下一個代碼塊的開始,而縮進(jìn)的結(jié)束則表示此代碼塊的結(jié)束。3、Python 中實現(xiàn)對代碼的縮進(jìn),可以使用空格或者 Tab 鍵實現(xiàn)。但無論是手動敲空格,還是使用 Tab 鍵,通常情況下都是采用 4 個空格長度作為一個縮進(jìn)量(默認(rèn)情況下,一個 Tab 鍵就表示 4 個空格)。4、對于 Python 縮進(jìn)規(guī)則,初學(xué)者可以這樣理解,Python 要求屬于同一作用域中的各行代碼,它們的縮進(jìn)量必須一致,但具體縮進(jìn)量為多少,并不做硬性規(guī)定。
正確示例代碼:
錯誤示例代碼:
Python中使用 # 進(jìn)行注釋,我們在使用# 的時候,# 號后面要空一格在行內(nèi)注釋的時候,中間應(yīng)該至少加兩個空格
print("你好,世界") # 注釋
** 使用的一般性原則:**
1、在二元運(yùn)算符兩邊各空一格,算術(shù)操作符兩邊的空格可靈活使用,但兩側(cè)務(wù)必要保持一致2、不要在逗號、分號、冒號前面加空格,但應(yīng)該在它們后面加(除非在行尾)3、函數(shù)的參數(shù)列表中,逗號之后要有空格4、函數(shù)的參數(shù)列表中,默認(rèn)值等號兩邊不要添加空格5、左括號之后,右括號之前不要加添加空格6、參數(shù)列表, 索引或切片的左括號前不應(yīng)加空格
使用的一般性原則:
1、編碼格式聲明、模塊導(dǎo)入、常量和全局變量聲明、頂級定義和執(zhí)行代碼之間空兩行2、頂級定義之間空兩行,方法定義之間空一行3、在函數(shù)或方法內(nèi)部,可以在必要的地方空一行以增強(qiáng)節(jié)奏感,但應(yīng)避免連續(xù)空行
1、導(dǎo)入總應(yīng)該放在文件頂部,位于模塊注釋和文檔字符串之后,模塊全局變量和常量之前。
2、導(dǎo)入應(yīng)該按照從最通用到最不通用的順序分組,分組之間空一行:
3、每個 import 語句只導(dǎo)入一個模塊,盡量避免一次導(dǎo)入多個模塊
命名規(guī)范這一塊的大家應(yīng)該都比較熟悉了,但是不同的編程語言之間的明明規(guī)范也是有所區(qū)別的~
Python命名建議遵循的一般性原則:
引號使用的一般性原則:
Python跟其他幾個主流編程語言的分號使用區(qū)別很大Python的代碼末尾不需要加分號,而Java和C#等都需要添加
不要在行尾添加分號,也不要用分號將兩條命令放在同一行,例如:
Python學(xué)習(xí)日記
Python2.0與Python3.0主要區(qū)別在于以下幾個方面:
1、輸出
Python2.0使用print關(guān)鍵字進(jìn)行輸出,比如:print “Hello”;
Python3.0使用print()函數(shù),比如print("Hello")。
2、輸入方面
Python2.0使用raw_input()函數(shù),比如:name=raw_input("請輸入你的名字:");
Python3.0使用input()函數(shù),比如:name=input("請輸入你的名字:")。
3、字符串的編碼格式
Python2.0默認(rèn)采用ASCII編碼對輸入的字符串進(jìn)行編碼;
而Python3.0默認(rèn)采用Unicode編碼對字符串進(jìn)行編碼。
4、格式化字符串的方式
Python2.0用%占位符進(jìn)行標(biāo)準(zhǔn)化格式輸出字符串,比如:“Hello,%s" % ("World");
Python3.0用format()函數(shù),比如:”Hello,{}“.format("World")。
5、源文件的編碼格式
Python2.0默認(rèn)采用ASCII,因此使用中文時要在源文件開頭加上一行注釋:# -- coding: utf-8 --;
Python3.0默認(rèn)采用utf-8。
你需要明白兩個概念:
什么叫字符串、字節(jié)串
在Python中字符串是指一串可以展示在終端里、供人閱讀的字符,至于字符采用什么編碼并不重要,同樣的文字,可能是用Unicode、UTF-8或GBK編碼,但打印在終端中的內(nèi)容相同,那么就認(rèn)為是同一串字符串。而字節(jié)串是指將字符串通過某種編碼轉(zhuǎn)換得到的一串字節(jié),同樣一個字符串,使用不同的編碼轉(zhuǎn)換后得到的字節(jié)串可能完全不同。
什么叫encode、decode
encode中文為編碼,顧名思義,是將字符串以某種編碼形式編碼得到字節(jié)串的過程;相反,decode中文為解碼,是將字節(jié)串以某種編碼形式翻譯得到字符串的過程。
a是一個字符串,它的內(nèi)容是“周杰倫”這三個字,類型是str;b = a.encode('utf-8')是將a以utf-8形式編碼得到的字節(jié)串,它的內(nèi)容是“周杰倫”這三個字的utf-8編碼,類型是bytes。
度知道 提問
搜一搜
python中怎么求ascii碼7、8、9的編碼
社會我飛哥16888
今天 01:21 超過161用戶采納過TA的回答
關(guān)注
我們可以使用for循環(huán)和ord()函數(shù)來獲取字符串的 ASCII 值。ord()函數(shù)返回傳遞字符串的 Unicode。它接受1作為字符串的長度。for循環(huán)用于迭代序列:列表、元組、字典、集合或字符串。因此,我們可以使用for循環(huán)來解析字符串的每個字符并將其轉(zhuǎn)換為 ASCII 值。
在下面的代碼中,text 是一個保存用戶輸入的變量。ascii_values 最初是一個空列表,稍后將保存字符串中每個字符的 ASCII 值。一旦循環(huán)完成其循環(huán),我們將向用戶顯示 ascii_values 的內(nèi)容作為輸出。append() 函數(shù)在每次迭代后向列表 ascii_values 添加一個新項目。
當(dāng)我們運(yùn)行這個程序時,用戶會收到一個字符串提示,一旦用戶提供了一個字符串,它就會被存儲在一個變量 text 中。在示例中,輸入是字符串 hello。打印字符串中每個字符的 ASCII 值。
示例代碼:
#python 3.x
text = input("enter a string to convert into ascii values:")
ascii_values = []
for character in text:
ascii_values.append(ord(character))
print(ascii_values)
輸出:
enter a string to convert into ASCII values: hello
[104, 101, 108, 108, 111]
二、在 Python 中使用 List Comprehension 和 ord() 函數(shù)獲取字符串的 ASCII
我們可以使用列表推導(dǎo)來實現(xiàn)相同的結(jié)果。Python 中的列表推導(dǎo)式是一種簡單而緊湊的語法,用于從字符串或其他列表創(chuàng)建列表。這是一種通過對現(xiàn)有列表中的每個項目進(jìn)行操作來創(chuàng)建新列表的簡潔方法。列表推導(dǎo)比使用 for 循環(huán)處理列表快得多。
在下面的代碼中,外部沒有 for 或 while 循環(huán)。但是在列表推導(dǎo)中,我們使用 for 循環(huán)來獲取 text 的每個 character。
示例代碼:
#python 3.x
text = input("enter a string to convert into ascii values: ")
ascii_values = [ord(character) for character in text]
print(ascii_values)
輸出:
enter a string to convert into ASCII values: hello
[104, 101, 108, 108, 111]
三、使用用戶定義的函數(shù) to_ascii() 在 Python 中獲取字符串的 ASCII
另一種編寫代碼以實現(xiàn)相同目標(biāo)的方法是使用用戶定義的函數(shù)。用戶定義函數(shù)是用于在策略正文中組織代碼的函數(shù)。一旦你定義了一個函數(shù),你就可以像內(nèi)置的動作和解析器函數(shù)一樣調(diào)用它。傳遞給函數(shù)的變量是通過引用而不是通過值傳遞的。
在下面的代碼中,我們使用用戶定義的函數(shù) to_ascii 將 text 作為參數(shù)。在函數(shù)內(nèi)部,定義了塊操作,并通過關(guān)鍵字 return 傳遞結(jié)果。當(dāng)從提供 text 的主模塊調(diào)用函數(shù) to_ascii 作為參數(shù)控制轉(zhuǎn)移到 to_ascii 函數(shù)并執(zhí)行代碼塊時,我們會在列表中獲得給定字符串的 ASCII 值。
示例代碼:
#python 3.x
def to_ascii(text):
ascii_values = [ord(character) for character in text]
return ascii_values
text = input("Enter a string: ")
print(to_ascii(text))
輸出:
Enter a string:
hello
[104, 101, 108, 108, 111]
網(wǎng)頁標(biāo)題:python3編碼函數(shù),python3代碼大全
瀏覽路徑:http://chinadenli.net/article34/hdospe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、品牌網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、微信公眾號、ChatGPT、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)