前言
最近在看《python網絡爬蟲實戰》,裏面的第三章有個打印99乘法表的例子,但是由於書上代碼基於Python2.X,我的電腦上是Python3.6,結果print()的時候出了問題,所以通過寫博客的方式記錄下來。
Ptyhon2.X 版本
python2.X的代碼如下:
class PrintTable(object):
def __init__(self):
print('開始打印 9X9 乘法表格')
self.print99()
def print99(self):
for i in xrange(1, 10):
for j in xrange(1, i+1):
print('%d * %d =%2s ' %(j,i,i*j)),
print('\n')
if __name__ == '__main__':
pt = PrintTable()
輸出的結果爲:
Python3.6版本
但是在Python3.6版本上的輸出爲:
很明顯看到print()函數自動給我們換行了。如果要實現像2.X一樣的效果,需要把代碼改成
class PrintTable(object):
def __init__(self):
print('開始打印 9X9 乘法表格')
self.print99()
def print99(self):
for i in range(1, 10):
for j in range(1, i+1):
print('%d * %d =%2s ' %(j,i,i*j),end="")
print('\n')
if __name__ == '__main__':
pt = PrintTable()
主要是以下幾個變動的地方:
- 去掉print()函數後的’ , ‘
- 加上 end=”
說明
爲什麼要這樣子改動呢?這纔是本文的重點,我們不僅需要知其然,更要知其所以然。原因就是Python3 對 print() 進行了改動
1.print從語句變成了函數
python2.X : print ‘hello’,’world’
python3.X : print(‘hello’,’world’)
既然是變成了函數,print()有個參數爲end=”,默認是 ‘\n’,因此默認會進行換行操作,像上面的例子,爲了不換行,只能指定end=”
舉個例子:
沒有指定end參數:
print('hello')
print('world')
輸出結果爲:
指定了end=”
print('hello',end='')
print('world')
輸出結果爲:
2.xrange被去掉了
python2.X : for i in xrange(1, 10)
python3.X : for i in range(1, 10)
xrange的實現已經被包括在range裏面了
總結
按照目前的趨勢來說,Python3肯定是大勢所趨,而且Python2版本也將在2020年停止維護,所以建議大家在學習python的時候儘量選擇基於python3的教程和資料。
這裏有一個關於python2.7停止維護倒計時的網站
Python 2, thank you for your years of faithful service.
Python 3, your time is now.