python2和3的区别字符编码格式上下文管理is和==的区别
生活随笔
收集整理的這篇文章主要介紹了
python2和3的区别字符编码格式上下文管理is和==的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- python2和python3的區別:
- 字符編碼格式
- 上下文管理
- is和==比較:
python2和python3的區別:
- Python2默認 編碼方式為ASCII, Python3 默認編碼方式為UTF-8(是Unicode 的擴展集)
- python2中字符串有str和unicode兩種類型, python3 中字符串有str和字節(bytes) 兩種類型
- python3中不再支持u中文的語法格式
- str與字節碼(bytes): python3中字符串兩種類型
- unicode與str : python2中字符串兩種類型
python2和python3中編碼轉換:
- 在python3中字符串默認是unicode所以不需要decode(),直接encode成想要轉換的編碼如gb2312
- 在python2中默認是ASCII編碼,必須先轉換成Unicode,Unicode 可以作為各種編碼的轉換的中轉站
頂部的:# -- coding: utf-8 --或者# coding: utf-8目前有三個作用 - 如果代碼中有中文注釋,就需要此聲明。
- 比較高級的編輯器會根據頭部聲明,將此作為代碼文件的格式。
- 程序會通過頭部聲明,解碼初始化 u"人生苦短",這樣的unicode對象,(所以頭部聲明和代碼的存儲格式要一致)
python2在文件中進行字符編碼轉換
#!/usr/bin/env python #-*- coding:utf8 -*-ss = '北京市' #1、第一步先將utf8的字符串解碼成unicode: str ----> Unicode #注:因為上面聲明了使用utf8所以這里必須制定用utf8格式才能decode解碼成Unicode unicode_type = ss.decode('utf8') # 將utf8的str格式轉換成 unicode編碼 print type(unicode_type) # type變成:<type 'unicode'>#2、第二步將unicode轉換成gbk gbk_type = unicode_type.encode('gbk') # 將'unicode' encode編碼成gbk格式的str print gbk_type.decode('gbk') # 只有將gbk格式的str再deode 解碼成 unicode才能顯示 "北京市" # print type( gbk_type.decode('gbk') ) # 能正常顯示的只有:<type 'unicode'> 格式python3在文件中進行字符編碼轉換
import sys print(sys.getdefaultencoding()) #在python3中打印出默認字符編碼: utf-8s = "你好" print(s.encode("gbk")) #將Unicode轉換為gbk: b'\xc4\xe3\xba\xc3' print(s.encode("utf-8")) #將Unicode轉換為utf-8: b'\xe4\xbd\xa0\xe5\xa5\xbd' print(s.encode("utf-8").decode("utf-8").encode("gb2312").decode("gb2312")) # 1. s.encode("utf-8") #將Unicode編碼為utf-8 # 2. s.encode("utf-8").decode("utf-8") #將utf-8解碼為Unicode在解碼時必須指定現在的字符編碼“utf-8” # 3. s.encode("utf-8").decode("utf-8").encode("gb2312") #將Unicode編碼為”gb2312” # 4. s.encode("utf-8").decode("utf-8").encode("gb2312").decode("gb2312") #將gb2312解碼為unicode # 注1:encode("utf-8") encode作用是將Unicode編碼編碼為指定編碼(這里的utf-8是要編碼成什么) # 注2:decode(“utf-8”) decode作用是將其他編碼轉化為Unicode編碼(這里的utf-8是指定現在是什么編碼)字符編碼格式
幾種常用編碼
- ASCII : 不支持中文
- GBK : 是中國的中文字符,其包含了簡體中文和繁體中文的字符
- Unicode : 萬國編碼(Unicode 包含GBK)
1)Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一并且唯一的二進制編碼
2)規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536
3)這里還有個問題:使用的字節增加了,那么造成的直接影響就是使用的空間就直接翻倍了
- Utf-8 : 可變長碼, 是Unicode 的擴展集
1) UTF-8編碼:是對Unicode編碼的壓縮和優化,他不再使用最少使用2個字節,而是將所有的字符和符號進行分類
2)ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存…
上下文管理
什么是with語句
- with是一種上下文管理協議,目的在于從流程圖中把 try,except 和finally 關鍵字和資源分配釋放相關代碼統統去掉,簡化try….except….finlally的處理流程。
所以使用with處理的對象必須有enter()和exit()這兩個方法 - with通過enter方法初始化(enter方法在語句體執行之前進入運行
- 然后在exit中做善后以及處理異常(exit()方法在語句體執行完畢退出后運行)
with語句使用場景 - with 語句適用于對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的“清理”操作,釋放資源
- 比如文件使用后自動關閉、線程中鎖的自動獲取和釋放等
with處理文件操作的實例
with open('/etc/passwd') as f:for line in f:print(line)is和==比較:
== 是比較兩個對象的內容是否相等,即兩個對象的“值“”是否相等,不管兩者在內存中的引用地址是否一樣
is 比較的是兩個實例對象是不是完全相同,它們是不是同一個對象,占用的內存地址是否相同
即is比較兩個條件:
- 內容相同
- 內存中地址相同
總結
以上是生活随笔為你收集整理的python2和3的区别字符编码格式上下文管理is和==的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: select poll epoll I
- 下一篇: 深浅拷贝垃圾回收机制四大高阶函数