1. 程式人生 > 實用技巧 >在使用三引號時容易犯的小錯誤

在使用三引號時容易犯的小錯誤

請看如下程式碼,執行後,思考生成的兩個二維碼為什麼不一樣?

 1 # -*- coding:utf-8 -*-
 2 from tkinter import *
 3 from tkinter import ttk
 4 from PIL import ImageTk
 5 import qrcode
 6 class QRcodeImage(object):
 7     '''生成二維碼圖片類'''
 8 
 9     def __init__(self, content, fcolor=None, bcolor=None, size=None):
10         '''
11         引數說明:
12 content:二維碼圖片的文字內容 13 fcolor:二維碼圖片的前景色 14 bcolor:二維碼圖片的背景色 15 size:二維碼大小 16 ''' 17 qr = qrcode.QRCode(version=2, 18 error_correction=qrcode.constants.ERROR_CORRECT_L, #容錯率 19 box_size=8, 20 border=2) #
例項化QRCode類,得到qr物件 21 qr.add_data(content) # 二維碼內容新增到圖片中 22 qr.make(fit=True) # 圖片中的二維碼大小自適應,以保證二維碼內容能完整繪製 23 if fcolor == None: fcolor = 'black' #預設前景色為黑色 24 if bcolor == None:bcolor = 'white' #預設背景色為白色 25 img = qr.make_image(fill_color=fcolor, 26 back_color=bcolor) #
生成彩色二維碼圖片 27 img = img.convert(mode="RGBA") # 將圖片的模式轉換為彩色透明模式 28 if size == None: size = 150 #預設圖片大小 29 self.img = img.resize((size, size)) 30 31 def getPhotoImage(self): 32 '''轉換為PhotoImage''' 33 tkimg = ImageTk.PhotoImage(self.img) 34 return tkimg 35 def cvfill(): 36 cv.create_window(200, 50, window=lbimg1, width=155, height=155, 37 anchor=NW, 38 ) 39 cv.create_window(50, 50, window=lbimg2, width=155, height=155, 40 anchor=NW, 41 ) 42 global img1 43 img1 = QRcodeImage(content).getPhotoImage() 44 lbimg1.config(image=img1) 45 content1='''BEGIN:VCARD 46 FN:steven 47 TITLE:Drector 48 TEL;TYPE=CELL:15201011234 49 NOTE: 50 END:VCARD ''' 51 global img2 52 img2=QRcodeImage(content1).getPhotoImage() 53 lbimg2.config(image=img2) 54 root = Tk() 55 56 57 cv = Canvas(root, width='94m', height='54m', bg='#F0F8FF', 58 highlightbackground='gold', 59 highlightthickness=2, 60 ) 61 cv.pack(pady=10) 62 63 lbimg1 = Label() 64 lbimg2 = Label() 65 content='''BEGIN:VCARD 66 FN:steven 67 TITLE:Drector 68 TEL;TYPE=CELL:15201011234 69 NOTE: 70 END:VCARD ''' 71 cvfill() 72 mainloop()

執行上述程式碼,結果如下圖所示:

明顯兩個二維碼圖片不同,而出現這樣的差異的原因就出現在全域性變數content和區域性變數content1的賦值上。

content的賦值後的結果為:

content = BEGIN:VCARD\nFN:steven\nTITLE:Drector\nTEL;TYPE=CELL:15201011234\nNOTE:\nEND:VCARD 

而content1的賦值後的結果為:

content1 = BEGIN:VCARD\n    FN:steven\n    TITLE:Drector\n    TEL;TYPE=CELL:15201011234\n    NOTE:\n    END:VCARD 

明顯content和content1的值的內容不一樣,content1多了很多空格字元。造成這樣結果的原因就是因為在函式cvfill()中,三引號'''中的內容從第二行開始進行了縮排,導致增加了很多縮排的空格,這是很容易犯的一個小錯誤,並且不易被注意到。