Saya melakukan ini dengan Python 2:
"(%d goals, $%d)" % (self.goals, self.penalties)
Apa versi Python 3 ini?
Saya mencoba mencari contoh secara online tetapi saya terus mendapatkan versi Python 2.
Saya melakukan ini dengan Python 2:
"(%d goals, $%d)" % (self.goals, self.penalties)
Apa versi Python 3 ini?
Saya mencoba mencari contoh secara online tetapi saya terus mendapatkan versi Python 2.
Jawaban:
Berikut adalah dokumen tentang sintaks format "baru". Contohnya adalah:
"({:d} goals, ${:d})".format(self.goals, self.penalties)
Jika keduanya goalsdan penaltiesadalah bilangan bulat (format defaultnya ok), ini bisa disingkat menjadi:
"({} goals, ${})".format(self.goals, self.penalties)
Dan karena parameternya adalah bidang self, ada juga cara untuk melakukannya menggunakan satu argumen dua kali (seperti yang dicatat @Burhan Khalid di komentar):
"({0.goals} goals, ${0.penalties})".format(self)
Menjelaskan:
{} berarti hanya argumen posisi berikutnya, dengan format default;{0}Berarti argumen dengan indeks 0, dengan format default;{:d} adalah argumen posisi berikutnya, dengan format bilangan bulat desimal;{0:d}adalah argumen dengan indeks 0, dengan format bilangan bulat desimal.Ada banyak hal lain yang dapat Anda lakukan saat memilih argumen (menggunakan argumen bernama alih-alih posisi, mengakses bidang, dll) dan banyak opsi format juga (mengisi nomor, menggunakan ribuan pemisah, menunjukkan tanda atau tidak, dll). Beberapa contoh lain:
"({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'
Catatan: Seperti yang ditunjukkan orang lain, format baru tidak menggantikan yang sebelumnya, keduanya tersedia di Python 3 dan versi Python 2 yang lebih baru juga. Beberapa orang mungkin mengatakan itu masalah preferensi, tetapi IMHO yang lebih baru jauh lebih ekspresif daripada yang lebih lama, dan harus digunakan setiap kali menulis kode baru (kecuali itu menargetkan lingkungan yang lebih lama, tentu saja).
"({0.goals} goals, ${0.penalties})".format(self)
"conversion rate: {:.2%}".format(self.goals / self.shots)? Bekerja dengan baik untuk saya karena ... (Python 3.4) Perhatikan bahwa tidak ada fdi dalamnya, saya meminta untuk memformat sebagai persentase, bukan sebagai angka floating point.
"{:.2f}%".format(float_num)bekerja dengan baik untuk keduanya.
$tidak memiliki arti khusus di sini, baik dalam sintaks format lama maupun dalam yang baru, sehingga harus ada dalam string yang dihasilkan, tidak berubah.
Python 3.6 sekarang mendukung interpolasi string literal singkatan dengan PEP 498 . Untuk kasus penggunaan Anda, sintaks baru adalah:
f"({self.goals} goals, ${self.penalties})"
Ini mirip dengan .formatstandar sebelumnya , tetapi memungkinkan seseorang dengan mudah melakukan hal - hal seperti :
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal('12.34567')
>>> f'result: {value:{width}.{precision}}'
'result: 12.35'
Baris itu berfungsi sebagaimana adanya di Python 3.
>>> 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)'
Saya suka pendekatan ini
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)
Perhatikan d dan s yang ditambahkan ke masing-masing tanda kurung.
keluarannya adalah:
I scored 3 goals and took 5 penalties