Python3的print函數換行問題

前言

最近在看《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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章