iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
0
自我挑戰組

在資訊宅中打滾的通訊系生系列 第 7

Day-7 Python2轉3小程式

前言

這次教大家簡單的使用Python小程式,這隻程式其實是在Python3中內建的程式,可以將簡單的Python程式碼,從Python2.x轉換為Python3.x,對於小程式來說很實用,但是如果是比較大的程式不建議使用這隻程式,因為在library中,有些從Python2.x到Python3.x時,拆成了兩個,所以不建議這樣使用。

轉換Python2 -> Python3

  1. 藉由 python35\Tools\scripts\2to3.py 檔轉換
python D:\python\Tools\scripts\2to3.py D:\Users\a0979\Desktop\scrip.py

python [轉檔程式] [欲轉檔.py]
* python 為 python3 ->因為轉檔程式為python3
![](https://i.imgur.com/PeQkvhk.png)
  1. python2 - scrip2.py
import httplib

i = 99999999L
print type(i)

try:
	print 5/2

except ValueError, e:
	print "Value Error Detected! "

j = 10
print j
print [j for j in range(15)]
print j
  1. python3 - scrip.py
import http.client

i = 99999999
print(type(i))

try:
	print(5/2)

except ValueError as e:
	print("Value Error Detected! ")	

j = 10
print (j)
print ([j for j in range(15)])
print (j)

差別

  1. 語法差異

    1. import 函式庫上httplib 在python3中被取代為http.client

    2. print 上 python3要求使用者將參數加上()號

    3. try-except 將原本的,改為as

  2. 語意差異

    1. python3 無long長整數->int
    i = 99999999L
    print type(i)
    
    #python2 -> <type 'long'>
    #python3 -> <class 'int'>
    
    1. python3 自動化為浮點數
    print 5/2
    
    #python2 -> 2
    #python3 -> 2.5
    
    1. 變數會被新值取代
    j = 10
    print j
    print [j for j in range(15)]
    print j
    
    #python2 -> 10
    #python3 -> 14
    

Linux中 Python2.x 轉換 Python3.x

  • 使用2to3指令

    2to3 [python2專案]
    

  • 下載Python3

    wget https://www.python.org/ftp/python/3.2/Python-3.2.tar.bz2
    tar -xvjf Python-3.2.tar.bz2 -C /opt #解壓縮到 /opt
    cd /opt/Python-3.2
    ./configure
    make
    make install
    




使用2to3轉檔

2to3 -w script.py

#會產生一個script.py -> Python3 script.py.bak -> Python2

  • 執行程式碼
cp script.py.bak script2.py
python script2.py
python3 script.py
  • 結果與windows相同

結語

這次跳脫一下之前所教的,教大家小程式來做Python版本轉換,希望可以幫到大家,來完成小程式的轉換。
            
            (此文章為教育使用,個人實作皆屬個人行為,本作者不負任何法律責任)

上一篇
Day-6 虛擬機架設
下一篇
Day8-學校資安健檢
系列文
在資訊宅中打滾的通訊系生30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言