Apa perbedaan antara% s dan% d dalam pemformatan string Python?

144

Saya tidak mengerti apa %sdan apa yang %ddilakukan dan bagaimana mereka bekerja.

karlzt
sumber

Jawaban:

194

Mereka digunakan untuk memformat string. %sbertindak sebagai tempat penampung untuk string sementara %dbertindak sebagai tempat penampung untuk angka. Nilai terkaitnya diteruskan melalui tupel menggunakan %operator.

name = 'marcog'
number = 42
print '%s %d' % (name, number)

akan mencetak marcog 42. Perhatikan bahwa nama adalah string (% s) dan angka adalah integer (% d untuk desimal).

Lihat https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting untuk detailnya.

Dalam Python 3 contohnya adalah:

print('%s %d' % (name, number))
moinudin
sumber
2
Di Google Chrome: Pengaturan >> Pencarian >> Kelola mesin pencari ... perhatikan bagaimana %sdigunakan dengan konfigurasi mesin pencari. Chrome menggunakan %suntuk mengganti kata kunci yang dimasukkan di bilah alamat. Python menggunakan %scara yang serupa. Dalam print('description: %s' % descrip)satu %soperator yang akan digantikan oleh string teks yang disimpan dalam descripvariabel. Kawat gigi bulat mencegah pesan kesalahan di Python 3.
noobninja
apa yang kamu sebut% s,% d, dll?
Chaine
1
@Chaine mereka disebut Placeholder, mereka adalah variabel yang dapat diganti
Leo
@Leo Terima kasih!
Chaine
40

dari python 3 doc

%d adalah untuk bilangan bulat desimal

%s adalah untuk string atau objek umum dan dalam kasus objek, itu akan diubah menjadi string

Perhatikan kode berikut

name ='giacomo'
number = 4.3
print('%s %s %d %f %g' % (name, number, number, number, number))

keluarannya akan

giacomo 4.3 4 4.300000 4.3

seperti yang Anda lihat %dakan dipotong menjadi integer, %sakan mempertahankan format, %fakan mencetak sebagai float dan %gdigunakan untuk nomor umum

jelas

print('%d' % (name))

akan menghasilkan pengecualian; Anda tidak dapat mengubah string menjadi angka

venergiac
sumber
Ini memperkirakan lebih banyak suara positif. Ini menjelaskan apa yang akan terjadi jika %sdigunakan untuk angka sebagai gantinya.
Vikas Prasad
1
Apa perbedaan antara% d dan% i, jika keduanya akan diubah menjadi integer? Bagaimana% d dibandingkan dengan% i dan% f?
srini
36

%s digunakan sebagai tempat penampung untuk nilai string yang ingin Anda masukkan ke dalam string yang diformat.

%d digunakan sebagai tempat penampung untuk nilai numerik atau desimal.

Misalnya (untuk python 3)

print ('%s is %d years old' % ('Joe', 42))

Akan menghasilkan

Joe is 42 years old
Soviut
sumber
6
Tidak benar-benar menjelaskan masalahnya? Saya tidak menjelaskan masalahnya, saya memberikan jawaban singkat untuk pertanyaan itu. Pertanyaan secara spesifik menanyakan untuk apa% s dan% d.
Soviut
2
tahukah kamu perbedaan antara% i dan% d? apakah python mendukung% i?
cryanbhu
11

Ini adalah placeholder:

Sebagai contoh: 'Hi %s I have %d donuts' %('Alice', 42)

Baris kode ini akan mengganti% s dengan Alice (str) dan% d dengan 42.

Keluaran: 'Hi Alice I have 42 donuts'

Hal ini dapat dicapai dengan "+" di sebagian besar waktu. Untuk mendapatkan pemahaman yang lebih mendalam tentang pertanyaan Anda, Anda mungkin ingin memeriksa {} / .format () juga. Berikut ini salah satu contohnya: Pemformatan string Python:% vs. .format

juga lihat di sini video tutorial google python @ 40 ', ada beberapa penjelasannya https://www.youtube.com/watch?v=tKTZoB2Vjuk

kevin
sumber
11

Ini semua adalah jawaban yang informatif, tetapi tidak ada yang cukup memahami inti dari perbedaan antara %sdan %d.

%smemberitahu pemformat untuk memanggil str()fungsi pada argumen dan karena kita memaksa ke string menurut definisi, %spada dasarnya hanya melakukan str(arg).

%ddi sisi lain, menyerukan int()argumen sebelum memanggil str(), seperti str(int(arg)), Ini akan menyebabkan intpaksaan serta strpaksaan.

Misalnya, saya dapat mengubah nilai hex menjadi desimal,

>>> '%d' % 0x15
'21'

atau potong pelampung.

>>> '%d' % 34.5
'34'

Tapi operasi tersebut akan memunculkan pengecualian jika argumennya bukan angka.

>>> '%d' % 'thirteen'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

Jadi, jika tujuannya hanya untuk memanggil str(arg), maka %ssudah cukup, tetapi jika Anda membutuhkan pemformatan tambahan (seperti memformat tempat desimal mengambang) atau paksaan lainnya, maka diperlukan simbol format lainnya.

Dengan f-stringnotasi, saat Anda membiarkan pemformat keluar, defaultnya adalah str.

>>> a = 1
>>> f'{a}'
'1'
>>> f'{a:d}'
'1'
>>> a = '1'
>>> f'{a:d}'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Unknown format code 'd' for object of type 'str'

Hal yang sama berlaku dengan string.format; defaultnya adalah str.

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'
Wyrmwood
sumber
1
Ini harus menjadi jawaban yang diterima. Itu satu-satunya yang benar-benar menjelaskan perbedaannya.
Antimony
Mengingat saya terlambat menjawab 9 tahun, itu bisa dimengerti. Tapi, saya tidak puas dengan jawabannya jadi saya menambahkan satu.
Wyrmwood
10

The %ddan %stali format "perintah" digunakan untuk string format. Ini %duntuk angka, dan %suntuk string.

Sebagai contoh:

print("%s" % "hi")

dan

print("%d" % 34.6)

Meneruskan beberapa argumen:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) akan kembali hi there user123456

Sam Bernstein
sumber
8

%ddan %smerupakan placeholder, mereka bekerja sebagai variabel yang dapat diganti. Misalnya, jika Anda membuat 2 variabel

variable_one = "Stackoverflow"
variable_two = 45

Anda dapat menetapkan variabel tersebut ke kalimat dalam string menggunakan tupel variabel.

variable_3 = "I was searching for an answer in %s and found more than %d answers to my question"

Perhatikan bahwa %sberfungsi untuk String dan %dberfungsi untuk variabel numerik atau desimal.

jika dicetak variable_3maka akan terlihat seperti ini

print(variable_3 % (variable_one, variable_two))

Saya sedang mencari jawaban di StackOverflow dan menemukan lebih dari 45 jawaban atas pertanyaan saya.

Leo
sumber
5

Mereka adalah penentu format. Mereka digunakan ketika Anda ingin memasukkan nilai ekspresi Python Anda ke dalam string, dengan format tertentu diberlakukan.

Lihat Menyelam ke Python untuk pengenalan yang relatif mendetail.

Lucas Jones
sumber
4

Sesuai standar terbaru, begitulah seharusnya dilakukan.

print("My name is {!s} and my number is{:d}".format("Agnel Vishal",100))

Lakukan pengecekan python3.6 docs dan sample program

Agnel Vishal
sumber
2

Jika Anda ingin menghindari% s atau% d maka ..

name = 'marcog'
number = 42
print ('my name is',name,'and my age is:', number)

Keluaran:

my name is marcog and my name is 42
Sujatha
sumber
2
Apa hubungan jawaban ini dengan pertanyaan itu? Penanya menanyakan tentang penggunaan %sdan %d.
Mark Dickinson
BTW, kode yang Anda tunjukkan tidak valid di Python 3.5.1: printadalah fungsi di Python 3, bukan pernyataan.
Mark Dickinson
Saya telah mengedit postingan ... silakan lihat. Sebenarnya, saya mempostingnya sebagai alternatif .. jika seseorang mungkin menghindari penggunaan% d atau% s. Dan terima kasih atas deteksi kesalahannya, .. Saya telah mengedit kodenya.
Sujatha
3
Terima kasih atas pengeditannya. Sayangnya, ini masih belum menjawab pertanyaan tersebut.
Mark Dickinson
2

% s digunakan untuk menampung spasi untuk string% d digunakan untuk menampung spasi untuk angka

name = "Moses";
age = 23
print("My name is %s am CEO at MoTech Computers " %name)
print("Current am %d years old" %age)
print("So Am %s and am %d years old" %(name,age))

Keluaran program

video ini membahas lebih dalam tentang tip itu https://www.youtube.com/watch?v=4zN5YsuiqMA

Noel Moses Mwadende
sumber
Selamat datang di Stack Overflow! Bagaimana jawaban Anda berbeda dengan 12 lainnya?
Vasil Velichkov
hampir semua format itu bekerja sama tetapi yang saya inginkan hanyalah memberikan lebih banyak contoh untuk meningkatkan pemahaman
Noel Moses Mwadende
Itu hebat! Anda dapat meningkatkan jawaban Anda dengan menambahkan keluaran program sebagai teks dan bukan sebagai gambar.
Vasil Velichkov
terima kasih atas perhatian Anda, saya akan membuat beberapa perubahan, sama-sama
Noel Moses Mwadende
1

ngomong-ngomong ...
python3.6 hadir dengan f-stringsyang membuat segalanya lebih mudah dalam pemformatan!
sekarang jika versi python Anda lebih besar dari 3.6 Anda dapat memformat string Anda dengan metode yang tersedia ini:

name = "python"

print ("i code with %s" %name)          # with help of older method
print ("i code with {0}".format(name))  # with help of format
print (f"i code with {name}")           # with help of f-strings
a_m_dev
sumber
1

Berikut adalah contoh dasar untuk mendemonstrasikan pemformatan string Python dan cara baru untuk melakukannya.

my_word = 'epic'
my_number = 1

print('The %s number is %d.' % (my_word, my_number))  # traditional substitution with % operator

// Angka epiknya adalah 1.

print(f'The {my_word} number is {my_number}.')  # newer format string style

// Angka epiknya adalah 1.

Keduanya memiliki cetakan yang sama.

Kushal Atreya
sumber