我正在使用python2.7,我想知道Python元組字符串插值背後的推理是什麼。使用元組切片的Python字符串插值?
def show(self):
self.score()
print "Player has %s and total %d." % (self.player,self.player_total)
print "Dealer has %s showing." % self.dealer[:2]
打印:
Player has ('diamond', 'ten', 'diamond', 'eight') and total 18
Traceback (most recent call last):
File "trial.py", line 43, in <module>
Blackjack().player_options()
File "trial.py", line 30, in player_options
self.show()
File "trial.py", line 27, in show
print "Dealer has %s showing." % (self.dealer[:2])
TypeError: not all arguments converted during string formatting
所以我發現我需要改變其中的錯誤是從哪裏來的第四行,在做這個代碼小一點,當我陷入了TypeErrors
這個:
print "Dealer has %s %s showing." % self.dealer[:2]
有兩個%s
運算符,每個元素分片一個。當我被檢查出發生了什麼事情與這條線雖然我在print type(self.dealer[:2])
增加,並會得到:
<type 'tuple'>
像我預料的,爲什麼會非切片元組像Player has %s and total %d." % (self.player,self.player_total)
格式罰款和切片的元組self.dealer[:2]
不?它們都是同一類型,爲什麼不在沒有明確格式化切片中的每個項目的情況下傳遞切片?
這很有道理謝謝你。我誤解了正在發生的事情。我認爲當傳遞的元組切片是一個較小的整個元組時,不會傳遞兩個單獨的參數。那是怎麼回事,對嗎? – tijko
你永遠不會傳遞「兩個不同的論點」。語法'「string」%(foo,bar)'是一個表達式,它包含具有兩個字面操作數的字符串和元組的'%'二元運算符。即使在着名的pythonic'a,b = b,a''你用元組操作。字符串插值只是爲字符串重載的'%'運算符。 –