python3floattoint
⑴ python3.4學習筆記 3.x和2.x的區別,持續更新
python3.4學習筆記(四) 3.x和2.x的區別
在2.x中:print html,3.x中必須改成:print(html)
import urllib2
ImportError: No mole named 'urllib2'
在python3.x裡面,用urllib.request代替urllib2
import thread
ImportError: No mole named 'thread'
在python3.x裡面,用_thread(在前面加一個下劃線)代替thread
在2.x中except Exception,e : 3.x中改為except (Exception):
=================================
print函數
雖然print語法是Python 3中一個很小的改動,且應該已經廣為人知,但依然值得提一下:Python 2中的print語句被Python 3中的print()函數取代,這意味著在Python 3中必須用括弧將需要輸出的對象括起來。
在Python 2中使用額外的括弧也是可以的。但反過來在Python 3中想以Python2的形式不帶括弧調用print函數時,會觸發SyntaxError。
Python 2.7.6
print 'Python', python_version()
print 'Hello, World!'
print('Hello, World!')
print "text", ; print 'print more text on the same line'
輸出:
Hello, World!
Hello, World!
text print more text on the same line
---------------------------
Python 3.4.1
print('Python', python_version())
print('Hello, World!')
print("some text,", end="")
print(' print more text on the same line')
輸出:
Hello, World!
some text, print more text on the same line
print 'Hello, World!'
File "<ipython-input-3-139a7c5835bd>", line 1
print 'Hello, World!'
^
SyntaxError: invalid syntax
注意:在Python中,帶不帶括弧輸出」Hello World」都很正常。
但如果在圓括弧中同時輸出多個對象時,就會創建一個元組,這是因為在Python 2中,print是一個語句,而不是函數調用。
print 'Python', python_version()
print('a', 'b')
print 'a', 'b'
Python 2.7.7
('a', 'b')
a b
---------------------------------
整數除法
由於人們常常會忽視Python 3在整數除法上的改動(寫錯了也不會觸發Syntax Error),所以在移植代碼或在Python 2中執行Python 3的代碼時,需要特別注意這個改動。
所以,我還是會在Python 3的腳本中嘗試用float(3)/2或 3/2.0代替3/2,以此來避免代碼在Python
2環境下可能導致的錯誤(或與之相反,在Python 2腳本中用from __future__ import division來使用Python
3的除法)。
Python 2.7.6
3 / 2 = 1
3 // 2 = 1
3 / 2.0 = 1.5
3 // 2.0 = 1.0
Python 3.4.1
3 / 2 = 1.5
3 // 2 = 1
3 / 2.0 = 1.5
3 // 2.0 = 1.0
---------------------------------
Unicode
Python 2有基於ASCII的str()類型,其可通過單獨的unicode()函數轉成unicode類型,但沒有byte類型。
而在Python 3中,終於有了Unicode(utf-8)字元串,以及兩個位元組類:bytes和bytearrays。
Python 2.7.6
print type(unicode('this is like a python3 str type'))
<type 'unicode'>
print type(b'byte type does not exist')
<type 'str'>
print 'they are really' + b' the same'
they are really the same
print type(bytearray(b'bytearray oddly does exist though'))
<type 'bytearray'>
Python 3.4.1 has <class 'bytes'>
print('and Python', python_version(), end="")
print(' also has', type(bytearray(b'bytearrays')))
and Python 3.4.1 also has <class 'bytearray'>
1
'note that we cannot add a string' + b'bytes for data'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-13-d3e8942ccf81> in <mole>()
----> 1 'note that we cannot add a string' + b'bytes for data'
TypeError: Can't convert 'bytes' object to str implicitly
=================================
python 2.4 與 python 3.0 的比較
一、 print 從語句變為函數
原: print 1,2+3
改為: print ( 1,2+3 )
二、range 與 xrange
原 : range( 0, 4 ) 結果 是 列表 [0,1,2,3 ]
改為:list( range(0,4) )
原 : xrange( 0, 4 ) 適用於 for 循環的變數控制
改為:range(0,4)
三、字元串
原: 字元串以 8-bit 字元串存儲
改為: 字元串以 16-bit Unicode 字元串存儲
四、try except 語句的變化
在2.x中except Exception,e : 3.x中改為except (Exception):
五、打開文件
原: file( ..... )
或 open(.....)
改為:
只能用 open(.....)
六、從鍵盤錄入一個字元串
原: raw_input( "提示信息" )
改為: input( "提示信息" )
七、bytes 數據類型
A bytes object is an immutable array. The items are 8-bit bytes, represented by integers in the range 0 <= x < 256.
bytes 可以看成是「位元組數組」對象,每個元素是 8-bit 的位元組,取值范圍 0~255。
由於在 python 3.0中字元串以 unicode 編碼存儲,當寫入二進制文件時,字元串無法直接寫入(或讀取),必須以某種方式的編碼為位元組序列後,方可寫入。
(一)字元串編碼(encode) 為 bytes
例: s = "張三abc12"
b = s.encode( 編碼方式)
# b 就是 bytes 類型的數據
# 常用的編碼方式為 : "uft-16" , "utf-8", "gbk", "gb2312", "ascii" , "latin1" 等
# 注 : 當字元串不能編碼為指定的「編碼方式」時,會引發異常
(二) bytes 解碼(decode)為字元串
s = "張三abc12"
b = s.encode( "gbk") # 字元串 s 編碼為 gbk 格式的位元組序列
s1 = b.decode("gbk") # 將位元組序列 b以gbk格式 解碼為字元串
# 說明,當位元組序列不能以指定的編碼格式解碼時會引發異常
(三)使用方法舉例
#coding=gbk
f = open("c:\\1234.txt", "wb")
s = "張三李四abcd1234"
# -------------------------------
# 在 python2.4 中我們可以這樣寫:
# f.write( s )
# 但在 python 3.0中會引發異常
# -------------------------------
b = s.encode("gbk")
f.write( b )
f.close()
input("?")
讀取該文件的例子:
#coding=gbk
f = open("c:\\1234.txt", "rb")
f.seek(0,2) #定位至文件尾
n = f.tell() #讀取文件的位元組數
f.seek(0,0) #重新定位至文件開始處
b = f.read( n )
# ------------------------------
# 在 python 2.4 中 b 是字元串類型
# 要 python 3.0 中 b 是 bytes 類型
# 因此需要按指定的編碼方式確碼
# ------------------------------
s = b.decode("gbk")
print ( s )
# ------------------------------
# 在 python 2.4 中 可以寫作 print s 或 print ( s )
# 要 python 3.0 中 必須寫作 print ( s )
# ------------------------------
f.close()
input("?")
運行後應顯示:
張三李四abcd1234
(四) bytes序列,一但形成,其內容是不可變的,例:
s="ABCD"
b=s.encode("gbk")
print b[0] # 顯示 65
b[0] = 66
# 執行該句,出現異常: 'bytes' object does not support item assignment
八、 chr( K ) 與 ord( c )
python 2.4.2以前
chr( K ) 將編碼K 轉為字元,K的范圍是 0 ~ 255
ord( c ) 取單個字元的編碼, 返回值的范圍: 0 ~ 255
python 3.0
chr( K ) 將編碼K 轉為字元,K的范圍是 0 ~ 65535
ord( c ) 取單個字元的編碼, 返回值的范圍: 0 ~ 65535
九、 除法運算符
python 2.4.2以前
10/3 結果為 3
python 3.0
10 / 3 結果為 3.3333333333333335
10 // 3 結果為 3
十、位元組數組對象 --- 新增
(一) 初始化
a = bytearray( 10 )
# a 是一個由十個位元組組成的數組,其每個元素是一個位元組,類型借用 int
# 此時,每個元素初始值為 0
(二) 位元組數組 是可變的
a = bytearray( 10 )
a[0] = 25
# 可以用賦值語句更改其元素,但所賦的值必須在 0 ~ 255 之間
(三) 位元組數組的切片仍是位元組數組
(四) 字元串轉化為位元組數組
#coding=gbk
s ="你好"
b = s.encode( "gbk") # 先將字元串按某種「GBK」編碼方式轉化為 bytes
c = bytearray( b ) #再將 bytes 轉化為 位元組數組
也可以寫作
c = bytearray( "你好", "gbk")
(五) 位元組數組轉化為字元串
c = bytearray( 4 )
c[0] = 65 ; c[1]=66; c[2]= 67; c[3]= 68
s = c.decode( "gbk" )
print ( s )
# 應顯示: ABCD
(六) 位元組數組可用於寫入文本文件
#coding=gbk
f = open("c:\\1234.txt", "wb")
s = "張三李四abcd1234"
# -------------------------------
# 在 python2.4 中我們可以這樣寫:
# f.write( s )
# 但在 python 3.0中會引發異常
# -------------------------------
b = s.encode("gbk")
f.write( b )
c=bytearray( "王五","gbk")
f.write( c )
f.close()
input("?")
⑵ Python如何轉換百分數字元串為浮點數
int函數能夠
(1)把符合數學格式的數字型字元串轉換成整數
(2)把浮點數轉換成整數,但是只是簡單的取整,而非四捨五入。
舉例:
1 aa = int("124") #Correct
2 print "aa = ", aa #result=124
3 bb = int(123.45) #correct
4 print "bb = ", bb #result=123
5 cc = int("-123.45") #Error,Can't Convert to int
6 print "cc = ",cc
7 dd = int("34a") #Error,Can't Convert to int
8 print "dd = ",dd
9 ee = int("12.3") #Error,Can't Convert to int
10 print ee
11
二、float函數將整數和字元串轉換成浮點數。
舉例:
1 aa = float("124") #Correct
2 print "aa = ", aa #result = 124.0
3 bb = float("123.45") #Correct
4 print "bb = ", bb #result = 123.45
5 cc = float(-123.6) #Correct
6 print "cc = ",cc #result = -123.6
7 dd = float("-123.34") #Correct
8 print "dd = ",dd #result = -123.34
9 ee = float('123v') #Error,Can't Convert to float
10 print ee
三、str函數將數字轉換成字元
舉例:
1 aa = str(123.4) #Correct
2 print aa #result = '123.4'
3 bb = str(-124.a) #SyntaxError: invalid syntax
4 print bb
5 cc = str("-123.45") #correct
6 print cc #result = '-123.45'
7 dd = str('ddd') #correct
8 print dd #result = ddd
9 ee = str(-124.3) #correct
10 print ee #result = -124.3
⑶ python中如何把string 轉換成int
用數字字元串初始化int類,就可以將整數字元串(str)轉換成整數(int):
In [1]: int(『1234』)
Out[1]: 1234
相反用整數初始化str類,就可以將整數(int)轉換為對應的字元串(str):
In [2]: str(1234)
Out[2]: 『1234』
如果字元串是浮點數,可以用字元串初始化float類,把浮點數字元串(str)轉換成浮點數(float):
In [3]: float(『12.34』)
Out[3]: 12.34
(3)python3floattoint擴展閱讀:
Python (英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/), 是一種面向對象的解釋型計算機程序設計語言,由荷蘭人Guido van Rossum於1989年發明,第一個公開發行版發行於1991年。
Python是純粹的自由軟體,源代碼和解釋器CPython遵循 GPL(GNUGeneral Public License)許可。Python語法簡潔清晰,特色之一是強制用空白符(white space)作為語句縮進。
Python具有豐富和強大的庫。它常被昵稱為膠水語言,能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕松地聯結在一起。常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),然後對其中有特別要求的部分,用更合適的語言改寫,比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而後封裝為Python可以調用的擴展類庫。需要注意的是在您使用擴展類庫時可能需要考慮平台問題,某些可能不提供跨平台的實現。
7月20日,IEEE發布2017年編程語言排行榜:Python高居首位 。
2018年3月,該語言作者在郵件列表上宣布 Python 2.7將於2020年1月1日終止支持。用戶如果想要在這個日期之後繼續得到與Python 2.7有關的支持,則需要付費給商業供應商。
⑷ 怎麼將python時間段(Timedelta)轉化為int或float數值形式! 急。
1、打開visio studio 2015,在文件中打開新建項目,新建一個Python應用程序,並修改程序的名稱為int2date。
⑸ python 怎麼生出成一個表格,並發送郵件
# -*- coding: utf-8 -*-
#程序名稱:自動化缺陷報告腳本
#程序描述:實現從本地路徑讀取excel文件內容,並繪制HTML表格,將內容寫入郵件正文區發送
#編寫時間:2014.11.29-2014.12.4
#作者:劉琳澤
#解釋環境:Windows 7家庭高級版 Python 2.7.8IDLE
#引入excel文檔相關庫
import xlrd
import os,time
#引入郵件相關庫
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import base64
#處理從excel中讀取的float類型數據的類
#目前集成兩種處理:(1)float到int型的轉換(2)float到str型的轉換,後續有需要可以增加方法以集成其他類型的轉換
class judgeFloat:
def floatToInt(self,variable):
variable="%d"%variable
return variable
def floatToStr(self,variable):
variable=xlrd.xldate_as_tuple(variable,0)
variable=list(variable)
if variable[1]<10:
variable[1]='0'+str(variable[1])
variable=str(variable[0])+str(variable[1])+str(variable[2])
return variable
#確定文檔是否修改的函數:獲取文檔的修改時間與本地時間對比,不一致要求用戶確認是否繼續執行,一致則直接執行
def openFile(filename,address):
filetime=time.strftime("%Y/%m/%d",time.localtime(os.stat(address+filename).st_mtime))
local=time.strftime("%Y/%m/%d",time.localtime())
if filetime!=local:
single=input("文檔今天還沒有修改過,請確認是否繼續?確認請輸入1後點擊回車,否則輸入2點擊回車。")
if single==1:
pass
elif single==2:
exit()
else:
print '您的輸入有誤!腳本即將結束。'
time.sleep(5)
exit()
else:
pass
#寫郵件的函數
def mailWrite(filename,address):
header='<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>'
th='<body text="#000000">committed缺陷詳情:<table border="1" cellspacing="0" cellpadding="3" bordercolor="#000000" width="1800" align="left" ><tr bgcolor="#F79646" align="left" ><th>標識</th><th>摘要</th><th>狀態</th><th>優先順序</th><th>嚴重性</th><th>標記</th><th>所有者</th><th>創建時間</th><th>修改時間</th></tr>'
#打開文件
filepath=address+filename
book=xlrd.open_workbook(filepath)
sheet=book.sheet_by_index(0)
#獲取行列的數目,並以此為范圍遍歷獲取單元數據
nrows = sheet.nrows-1
ncols = sheet.ncols
body=''
cellData=1
for i in range(1,nrows+1):
td=''
for j in range(ncols):
#讀取單元格數據,賦給cellData變數供寫入HTML表格中
cellData=sheet.cell_value(i,j)
#調用浮點型轉換方法解決讀取的日期內容為浮點型數據的問題
if isinstance(cellData,float):
if j==0 and i>0:
cellDataNew=judgeFloat()
cellData=cellDataNew.floatToInt(cellData)
else:
cellDataNew=judgeFloat()
cellData=cellDataNew.floatToStr(cellData)
else:
pass
tip='<td>'+cellData+'</td>'
#並入tr標簽
td=td+tip
tr='<tr>'+td+'</tr>'
#為解決字元串拼接問題增設語句,tr從excel中讀取出來是unicode編碼,轉換成UTF-8編碼即可拼接
tr=tr.encode('utf-8')
#並入body標簽
body=body+tr
tail='</table></body></html>'
#將內容拼接成完整的HTML文檔
mail=header+th+body+tail
return mail
#發送郵件
def mailSend(mail):
#設置發件人
sender = '***'
#設置接收人
receiver = '***@***.com'
#設置郵件主題
subject = '測試郵件,請忽略!'
#設置發件伺服器,即smtp伺服器
smtpserver = 'smtp.***.net'
#設置登陸名稱
username = '***@***.net'
#設置登陸密碼
password = '******'
#實例化寫郵件到正文區,郵件正文區需要以HTML文檔形式寫入
msg = MIMEText(mail,'html','utf-8')
#輸入主題
msg['Subject'] = subject
#調用郵件發送方法,需配合導入郵件相關模塊
smtp = smtplib.SMTP()
#設置連接發件伺服器
smtp.connect('smtp.***.net')
#輸入用戶名,密碼,登陸伺服器
smtp.login(username, password)
#發送郵件
smtp.sendmail(sender, receiver, msg.as_string())
#退出登陸並關閉與發件伺服器的連接
smtp.quit()
#入口函數,配置文件地址和文件名
def main():
filename='Sheet1.xlsx'
address='d:/defectManage/'
openFile(filename,address)
mail=mailWrite(filename,address)
mailSend(mail)
#調用執行main函數
if __name__=="__main__":
main()
⑹ Python基本語法都有哪些
標識符
第一個字元必須是英文字母或下劃線 _ 。標識符的其他的部分由字母、數字和下劃線組成。標識符對大小寫敏感。
保留字
保留字即關鍵字,不能用作任何標識符名稱。keyword 模塊可以輸出當前版本的所有關鍵字:
import keyword
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
注釋
單行注釋採用#,注釋是給人看的,可以是任意內容,解釋器會忽略掉注釋。多行注釋採用'''或"""。
# print("我是注釋,不會執行")
print("正常執行代碼")
'''
這是多行注釋,用三個單引號
這是多行注釋,用三個單引號
'''
print("Hello, World!")
"""
這是多行注釋,用三個雙引號
這是多行注釋,用三個雙引號
"""
print("Hello, World!")
行與縮進
Python 使用縮進來表示代碼塊而不是大括弧 {}。縮進的空格數是可變的,但是同一個代碼塊的語句必須是相同的縮進空格數。空格數建議一般空四個。其次注意Tab和四格空格混用可能會報錯,並且這個錯誤還不容易被察覺。
輸入輸出
一般情況下都是一條語法一行,如果寫的語句很長,我們還可以使用反斜杠()來呈現多行語句。在 [], {}, 或 () 中的多行語句,則不需要反斜杠。
sentence1 = "I love " +
"python"
sentence2 = ["I", "love",
"python"]
關於Python基本語法的內容,青藤小編就和您分享到這里了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關於python編程的技巧及素材等內容,可以點擊本站的其他文章進行學習。
⑺ python2和python3的區別,轉換及共存
python2和python3的區別
1.性能
Py3.0運行 pystone benchmark的速度比Py2.5慢30%。Guido認為Py3.0有極大的優化空間,在字元串和整形操作上可以取得很好的優化結果。
Py3.1性能比Py2.5慢15%,還有很大的提升空間。
2.編碼
Py3.X源碼文件默認使用utf-8編碼,這就使得以下代碼是合法的:
>>> 中國 = 'china'
>>>print(中國)
china
3. 語法
1)去除了<>,全部改用!=
在Python 2里,為了得到一個任意對象的字元串表示,有一種把對象包裝在反引號里(比如`x`)的特殊語法。在Python 3里,這種能力仍然存在,但是你不能再使用反引號獲得這種字元串表示了。你需要使用全局函數repr()。
Notes
Python 2
Python 3
①
`x` repr(x)
②
`'PapayaWhip' + `2`` repr('PapayaWhip'+repr(2))
Note:x可以是任何東西—一個類,函數,模塊,基本數據類型,等等。repr()函數可以使用任何類型的參數。
2)去除``,全部改用repr()
3)關鍵詞加入as 和with,還有True,False,None
4)整型除法返回浮點數,要得到整型結果,請使用//
由於人們常常會忽視Python 3在整數除法上的改動(寫錯了也不會觸發Syntax Error),所以在移植代碼或在Python 2中執行Python 3的代碼時,需要特別注意這個改動。
所以,我還是會在Python 3的腳本中嘗試用float(3)/2或 3/2.0代替3/2,以此來避免代碼在Python 2環境下可能導致的錯誤(或與之相反,在Python 2腳本中用from __future__ import division來使用Python 3的除法)。
Python 2
print'3/2=',3/2print'3//2=',3//2print'3/2.0=',3/2.0print'3//2.0=',3//2.0
3/2=13//2=13/2.0=1.53//2.0=1.0
默認,如果兩個操作數都是整數,Python 2 自動執行整型計算。
Python 3
print('3/2=',3/2)print('3//2=',3//2)print('3/2.0=',3/2.0)print('3//2.0=',3//2.0)
3/2=1.53//2=13/2.0=1.53//2.0=1.0
Note: 需要注意的是「雙劃線」(//)操作符將一直執行整除,而不管操作數的類型,這就是為什麼 5.0//2.0 值為 2.0。Python 3 中,/ 操作符是做浮點除法,而 // 是做整除(即商沒有餘數,比如 10 // 3 其結果就為 3,余數會被截除掉,而 (-7) // 3 的結果卻是 -3。這個演算法與其它很多編程語言不一樣,需要注意,它們的整除運算會向0的方向取值。而在 Python 2 中,/ 就是整除,即和 Python 3 中的 // 操作符一樣。
5)加入nonlocal語句。使用noclocal x可以直接指派外圍(非全局)變數
6)print
去除print語句,加入print()函數實現相同的功能。同樣的還有 exec語句,已經改為exec()函數
在Python 2里,print是一個語句。無論你想輸出什麼,只要將它們放在print關鍵字後邊就可以。
Python 3里,print()是一個函數。就像其他的函數一樣,print()需要你將想要輸出的東西作為參數傳給它。
例如:
2.X: print "The answer is", 2*2
3.X: print("The answer is", 2*2)
2.X: print x, # 使用逗號結尾禁止換行
3.X: print(x, end=" ") # 使用空格代替換行
在Python 2里,如果你使用一個逗號(,)作為print語句的結尾,它將會用空格分隔輸出的結果,然後在輸出一個尾隨的空格(trailing space),而不輸出回車(carriage return)。在Python 3里,通過把end=' '作為一個關鍵字參數傳給print()可以實現同樣的效果。參數end的默認值為'
',所以通過重新指定end參數的值,可以取消在末尾輸出回車符。
2.X: print # 輸出新行
3.X: print() # 輸出新行
2.X: print >>sys.stderr, "fatal error"
3.X: print("fatal error", file=sys.stderr)
在Python 2里,你可以通過使用>>pipe_name語法,把輸出重定向到一個管道,比如sys.stderr。在Python 3里,你可以通過將管道作為關鍵字參數file的值傳遞給print()來完成同樣的功能。參數file的默認值為std.stdout,所以重新指定它的值將會使print()輸出到一個另外一個管道。
2.X: print (x, y) # 輸出repr((x, y))
3.X: print((x, y)) # 不同於print(x, y)!
exec語句
exec()函數使用一個包含任意Python代碼的字元串作為參數,然後就像執行語句或者表達式一樣執行它。exec()跟eval()是相似的,但是exec()更加強大並更具有技巧性。eval()函數只能執行單獨一條表達式,但是exec()能夠執行多條語句,導入(import),函數聲明—實際上整個Python程序的字元串表示也可以。
Notes
Python 2
Python 3
①
execcodeString exec(codeString)
②
execcodeStringina_global_namespace exec(codeString,a_global_namespace)
③
execcodeStringina_global_namespace,a_local_namespace exec(codeString,a_global_namespace,a_local_namespace)
在最簡單的形式下,因為exec()現在是一個函數,而不是語句,2to3會把這個字元串形式的代碼用括弧圍起來。
Python 2里的exec語句可以指定名字空間,代碼將在這個由全局對象組成的私有空間里執行。Python 3也有這樣的功能;你只需要把這個名字空間作為第二個參數傳遞給exec()函數。
更加神奇的是,Python 2里的exec語句還可以指定一個本地名字空間(比如一個函數里聲明的變數)。在Python 3里,exec()函數也有這樣的功能。
- execfile('a_filename') exec(compile(open('a_filename').read(),'a_filename','exec'))
- for line in a_file.xreadlines(): for line in a_file:
- for line in a_file.xreadlines(5): no change (broken)
如果你以前調用沒有參數的xreadlines(),2to3會把它轉換成文件對象本身。在Python 3里,這種轉換後的代碼可以完成前同樣的工作:一次讀取文件的一行,然後執行for循環的循環體。
如果你以前使用一個參數(每次讀取的行數)調用xreadlines(),2to3不能為你完成從Python 2到Python 3的轉換,你的代碼會以這樣的方式失敗:AttributeError: '_io.TextIOWrapper' object has no attribute 'xreadlines'。你可以手工的把xreadlines()改成readlines()以使代碼能在Python 3下工作。(readline()方法在Python 3里返回迭代器,所以它跟Python 2里的xreadlines()效率是不相上下的。)
- u'PapayaWhip' 'PapayaWhip'
- ur'PapayaWhipfoo' r'PapayaWhipfoo'
Python 2里的Unicode字元串在Python 3里即普通字元串,因為在Python 3里字元串總是Unicode形式的。
Unicode原始字元串(raw string)(使用這種字元串,Python不會自動轉義反斜線"")也被替換為普通的字元串,因為在Python 3里,所有原始字元串都是以Unicode編碼的。
- unicode(anything) str(anything)
- from sys import maxint from sys import maxsize
execfile語句
就像以前的exec語句,Python 2里的execfile語句也可以像執行Python代碼那樣使用字元串。不同的是exec使用字元串,而execfile則使用文件。在Python 3里,execfile語句已經被去掉了。如果你真的想要執行一個文件里的Python代碼(但是你不想導入它),你可以通過打開這個文件,讀取它的內容,然後調用compile()全局函數強制Python解釋器編譯代碼,然後調用新的exec()函數。
Notes
Python 2
Python 3
7)輸入函數改變了,刪除了raw_input,用input代替: Python 2有兩個全局函數,用來在命令行請求用戶輸入。第一個叫做input(),它等待用戶輸入一個Python表達式(然後返回結果)。第二個叫做raw_input(),用戶輸入什麼它就返回什麼。這讓初學者非常困惑,並且這被廣泛地看作是Python語言的一個「肉贅」(wart)。Python 3通過重命名raw_input()為input(),從而切掉了這個肉贅,所以現在的input()就像每個人最初期待的那樣工作。
2.X:guess = int(raw_input('Enter an integer : ')) # 讀取鍵盤輸入的方法
3.X:guess = int(input('Enter an integer : '))
Note:如果你真的想要請求用戶輸入一個Python表達式,計算結果,可以通過調用input()函數然後把返回值傳遞給eval()。
I/O方法xreadlines()
在Python 2里,文件對象有一個xreadlines()方法,它返回一個迭代器,一次讀取文件的一行。這在for循環中尤其有用。事實上,後來的Python 2版本給文件對象本身添加了這樣的功能。
在Python 3里,xreadlines()方法不再可用了。2to3可以解決簡單的情況,但是一些邊緣案例則需要人工介入。
Notes
Python 2
Python 3
①
②
8)改變了順序操作符的行為,例如x<y,當x和y類型不匹配時拋出TypeError而不是返回隨即的 bool值
9)去除元組參數解包。不能def(a, (b, c)):pass這樣定義函數了
10)新式的8進制字變數,相應地修改了oct()函數。
2.X的方式如下:
>>> 0666
438
>>> oct(438)
'0666'
3.X這樣:
>>> 0666
SyntaxError: invalid token (<pyshell#63>, line 1)
>>> 0o666
438
>>> oct(438)
'0o666'
11)增加了 2進制字面量和bin()函數
>>> bin(438)
'0b110110110'
>>> _438 = '0b110110110'
>>> _438
'0b110110110'
12)擴展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求兩點:rest是list對象和seq是可迭代的。
13)新的super(),可以不再給super()傳參數,
>>> class C(object):
def __init__(self, a):
print('C', a)
>>> class D(C):
def __init(self, a):
super().__init__(a) # 無參數調用super()
>>> D(8)
C 8
<__main__.D object at 0x00D7ED90>
14)支持class decorator。用法與函數decorator一樣:
>>> def foo(cls_a):
def print_func(self):
print('Hello, world!')
cls_a.print = print_func
return cls_a
>>> @foo
class C(object):
pass
>>> C().print()
Hello, world!
class decorator可以用來玩玩狸貓換太子的大把戲。更多請參閱PEP 3129
4. 字元串和位元組串
Python 2有兩種字元串類型:Unicode字元串和非Unicode字元串。Python 2有基於ASCII的str()類型,其可通過單獨的unicode()函數轉成unicode類型,但沒有byte類型。
而在Python 3中,終於有了Unicode(utf-8)字元串,以及兩個位元組類:bytes和bytearrays。Python 3隻有一種類型:Unicode字元串(Unicode strings)。只有str一種類型,但它跟2.x版本的unicode幾乎一樣。
Notes
Python 2
Python 3
①
②
全局函數unicode()
Python 2有兩個全局函數可以把對象強制轉換成字元串:unicode()把對象轉換成Unicode字元串,還有str()把對象轉換為非Unicode字元串。
Python 3隻有一種字元串類型,Unicode字元串,所以str()函數即可完成所有的功能。(unicode()函數在Python 3里不再存在了。)
Notes
Python 2
Python 3
5.數據類型
1)Python 2有為非浮點數准備的int和long類型。int類型的最大值不能超過sys.maxint,而且這個最大值是平台相關的。可以通過在數字的末尾附上一個L來定義長整型,顯然,它比int類型表示的數字范圍更大。
在Python 3里,只有一種整數類型int,大多數情況下,它很像Python 2里的長整型。
Note:檢查一個變數是否是整型,獲得它的數據類型,並與一個int類型(不是long)的作比較。你也可以使用isinstance()函數來檢查數據類型;再強調一次,使用int,而不是long,來檢查整數類型。
sys.maxint
由於長整型和整型被整合在一起了,sys.maxint常量不再精確。但是因為這個值對於檢測特定平台的能力還是有用處的,所以它被Python 3保留,並且重命名為sys.maxsize。
Notes
Python 2
Python 3
①
②
⑻ python float函數字元串轉換浮點數 保留位數
int函數能夠
(1)把符合數學格式的數字型字元串轉換成整數
(2)把浮點數轉換成整數,但是只是簡單的取整,而非四捨五入。
舉例:
1 aa = int("124") #Correct
2 print "aa = ", aa #result=124
3 bb = int(123.45) #correct
4 print "bb = ", bb #result=123
5 cc = int("-123.45") #Error,Can't Convert to int
6 print "cc = ",cc
7 dd = int("34a") #Error,Can't Convert to int
8 print "dd = ",dd
9 ee = int("12.3") #Error,Can't Convert to int
10 print ee
11
二、float函數將整數和字元串轉換成浮點數。
舉例:
1 aa = float("124") #Correct
2 print "aa = ", aa #result = 124.0
3 bb = float("123.45") #Correct
4 print "bb = ", bb #result = 123.45
5 cc = float(-123.6) #Correct
6 print "cc = ",cc #result = -123.6
7 dd = float("-123.34") #Correct
8 print "dd = ",dd #result = -123.34
9 ee = float('123v') #Error,Can't Convert to float
10 print ee
三、str函數將數字轉換成字元
舉例:
1 aa = str(123.4) #Correct
2 print aa #result = '123.4'
3 bb = str(-124.a) #SyntaxError: invalid syntax
4 print bb
5 cc = str("-123.45") #correct
6 print cc #result = '-123.45'
7 dd = str('ddd') #correct
8 print dd #result = ddd
9 ee = str(-124.3) #correct
10 print ee #result = -124.3
⑼ python寫一個要求用戶輸入數字,如果不是數字就一直循環要求輸入,直到輸入數字為止的代碼
主要出在eval上。
python3.0
第一個方案:
while True:
ten=input("x:")
try:
x=eval(ten)
if type(x)==int:break
except:pass
然後輸入asf,沒有提示。輸入344就退出了
x:asf
x:344
第二個方案
while True:
ten=None
try:
ten=int(input("x:"))
except:pass
if type(ten)==int:break
這個在python3.0上調試通過
第三個方案:python2.x的方案
while True:
ten=raw_input("Enter a number:")
if ten.isdigit():break
ten=int(ten) #或者是ten=eval(ten)
都調試過。可以用