Bunu Python 2'de yapıyorum:
"(%d goals, $%d)" % (self.goals, self.penalties)
Bunun Python 3 sürümü nedir?
Çevrimiçi örnekler aramayı denedim ama Python 2 sürümlerini almaya devam ettim.
Bunu Python 2'de yapıyorum:
"(%d goals, $%d)" % (self.goals, self.penalties)
Bunun Python 3 sürümü nedir?
Çevrimiçi örnekler aramayı denedim ama Python 2 sürümlerini almaya devam ettim.
Yanıtlar:
Burada , "yeni" biçim sözdizimiyle ilgili belgeler bulunmaktadır . Bir örnek şöyle olabilir:
"({:d} goals, ${:d})".format(self.goals, self.penalties)
İkisi de goals
ve penalties
tamsayı ise (yani, varsayılan biçimleri uygunsa), kısaltılabilir:
"({} goals, ${})".format(self.goals, self.penalties)
Ve parametreler alanları olduğu için self
, bunu iki kez tek bir argüman kullanarak yapmanın bir yolu da var (@ Burhan Khalid'in yorumlarda belirttiği gibi):
"({0.goals} goals, ${0.penalties})".format(self)
İzahı:
{}
varsayılan format ile sadece bir sonraki konumsal argüman anlamına gelir;{0}
0
varsayılan formatta indeksli argüman anlamına gelir ;{:d}
ondalık tamsayı formatına sahip bir sonraki konumsal bağımsız değişkendir;{0:d}
0
ondalık tamsayı formatına sahip indeksli bağımsız değişkendir .Bir argüman seçerken (konumsal argümanlar yerine adlandırılmış argümanlar kullanmak, alanlara erişmek vb.) Ve birçok format seçeneği (sayıyı doldurmak, binlik ayırıcı kullanmak, işareti göstermek veya göstermemek, vb.) Yapabileceğiniz başka birçok şey vardır. Diğer bazı örnekler:
"({goals} goals, ${penalties})".format(goals=2, penalties=4)
"({goals} goals, ${penalties})".format(**self.__dict__)
"first goal: {0.goal_list[0]}".format(self)
"second goal: {.goal_list[1]}".format(self)
"conversion rate: {:.2f}".format(self.goals / self.shots) # '0.20'
"conversion rate: {:.2%}".format(self.goals / self.shots) # '20.45%'
"conversion rate: {:.0%}".format(self.goals / self.shots) # '20%'
"self: {!s}".format(self) # 'Player: Bob'
"self: {!r}".format(self) # '<__main__.Player instance at 0x00BF7260>'
"games: {:>3}".format(player1.games) # 'games: 123'
"games: {:>3}".format(player2.games) # 'games: 4'
"games: {:0>3}".format(player2.games) # 'games: 004'
Not: Diğerlerinin de belirttiği gibi, yeni biçim öncekinin yerini almaz, her ikisi de hem Python 3'te hem de Python 2'nin yeni sürümlerinde mevcuttur. Bazıları bunun bir tercih meselesi olduğunu söyleyebilir, ancak daha yeni olan IMHO, eskisinden çok daha anlamlı ve her yeni kod yazarken kullanılmalıdır (tabii ki eski ortamları hedeflemediği sürece).
"({0.goals} goals, ${0.penalties})".format(self)
"conversion rate: {:.2%}".format(self.goals / self.shots)
? Benim için olduğu gibi iyi çalışıyor ... (Python 3.4) f
İçinde hiç olmadığını unutmayın, yüzdelik olarak biçimlendirmek istiyorum, bir kayan nokta sayısı olarak değil.
"{:.2f}%".format(float_num)
her ikisi için de iyi çalışıyor.
$
Eski biçimi sözdiziminde ne de yeni de ne, burada özel bir anlamı vardır, böylece değişmemiş, oluşturulan dizede bulunmalıdır.
Python 3.6 artık PEP 498 ile kısa metrajlı dize enterpolasyonunu destekliyor . Kullanım durumunuz için yeni sözdizimi basitçe:
f"({self.goals} goals, ${self.penalties})"
Bu, önceki .format
standarda benzer , ancak aşağıdakiler gibi şeyler kolayca yapılmasına izin verir :
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal('12.34567')
>>> f'result: {value:{width}.{precision}}'
'result: 12.35'
Bu satır Python 3'te olduğu gibi çalışır.
>>> sys.version
'3.2 (r32:88445, Oct 20 2012, 14:09:29) \n[GCC 4.5.2]'
>>> "(%d goals, $%d)" % (self.goals, self.penalties)
'(1 goals, $2)'
Bu yaklaşımı beğendim
my_hash = {}
my_hash["goals"] = 3 #to show number
my_hash["penalties"] = "5" #to show string
print("I scored %(goals)d goals and took %(penalties)s penalties" % my_hash)
Sırasıyla köşeli parantezlere eklenen d ve s'ye dikkat edin.
çıktı:
I scored 3 goals and took 5 penalties