1. 程式人生 > 程式設計 >python 使用三引號時容易犯的小錯誤

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

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

# -*- coding:utf-8 -*-
from tkinter import *
from tkinter import ttk
from PIL import ImageTk
import qrcode
class QRcodeImage(object):
  '''生成二維碼圖片類'''

  def __init__(self,content,fcolor=None,bcolor=None,size=None):
    '''
    引數說明:
    content:二維碼圖片的文字內容
    fcolor:二維碼圖片的前景色
    bcolor:二維碼圖片的背景色
    size:二維碼大小
    '''
    qr = qrcode.QRCode(version=2,error_correction=qrcode.constants.ERROR_CORRECT_L,#容錯率
              box_size=8,border=2) # 例項化QRCode類,得到qr物件
    qr.add_data(content) # 二維碼內容新增到圖片中
    qr.make(fit=True) # 圖片中的二維碼大小自適應,以保證二維碼內容能完整繪製
    if fcolor == None: fcolor = 'black' #預設前景色為黑色
    if bcolor == None:bcolor = 'white' #預設背景色為白色
    img = qr.make_image(fill_color=fcolor,back_color=bcolor) #生成彩色二維碼圖片
    img = img.convert(mode="RGBA") # 將圖片的模式轉換為彩色透明模式
    if size == None: size = 150 #預設圖片大小
    self.img = img.resize((size,size))

  def getPhotoImage(self):
    '''轉換為PhotoImage'''
    tkimg = ImageTk.PhotoImage(self.img)
    return tkimg
def cvfill():
  cv.create_window(200,50,window=lbimg1,width=155,height=155,anchor=NW,)
  cv.create_window(50,window=lbimg2,)
  global img1
  img1 = QRcodeImage(content).getPhotoImage()
  lbimg1.config(image=img1)
  content1='''BEGIN:VCARD
  FN:steven
  TITLE:Drector
  TEL;TYPE=CELL:15201011234
  NOTE:
  END:VCARD '''
  global img2
  img2=QRcodeImage(content1).getPhotoImage()
  lbimg2.config(image=img2)
root = Tk()


cv = Canvas(root,width='94m',height='54m',bg='#F0F8FF',highlightbackground='gold',highlightthickness=2,)
cv.pack(pady=10)

lbimg1 = Label()
lbimg2 = Label()
content='''BEGIN:VCARD
FN:steven
TITLE:Drector
TEL;TYPE=CELL:15201011234
NOTE:
END:VCARD '''
cvfill()
mainloop()

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

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

明顯兩個二維碼圖片不同,而出現這樣的差異的原因就出現在全域性變數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()中,三引號'''中的內容從第二行開始進行了縮排,導致增加了很多縮排的空格,這是很容易犯的一個小錯誤,並且不易被注意到。

以上就是python 使用三引號時容易犯的小錯誤的詳細內容,更多關於python 三引號的資料請關注我們其它相關文章!