Python dizesi biçimlendirmesinde% s ve% d arasındaki fark nedir?


Yanıtlar:


185

Dizeleri biçimlendirmek için kullanılırlar. %sbir dize %diçin yer tutucu, bir sayı için yer tutucu görevi görür. İlişkili değerleri %operatör kullanılarak bir demet aracılığıyla iletilir .

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

yazdıracaktır marcog 42. Adın bir dize (% s) ve sayı bir tamsayı (ondalık için% d) olduğunu unutmayın.

Ayrıntılar için bkz. Https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting .

Python 3'te örnek şöyle olacaktır:

print('%s %d' % (name, number))

2
Google Chrome'da: Ayarlar >> Arama >> Arama motorlarını yönet ... %sarama motoru yapılandırmalarında nasıl kullanıldığına dikkat edin . Chrome %s, adres çubuğuna girilen anahtar kelimeleri değiştirmek için kullanır . Python %sbenzer şekilde kullanır . Gelen operatörü saklanan metin dizesi ile değiştirilecektir değişken. Yuvarlak parantezler Python 3'te bir hata mesajını önler.print('description: %s' % descrip)%sdescrip
— noobninja

bu% s,% d, vb. ne diyorsunuz?
— Chaine

1
@Chaine, Yer Tutucular olarak adlandırılır, değiştirilebilir değişkenlerdir
— Leo

@Leo Teşekkürler!
— Chaine

37

dan piton 3 doc

%d ondalık tam sayı içindir

%s genel dize veya nesne içindir ve nesne durumunda dize dönüştürülür

Aşağıdaki kodu düşünün

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

dışarı koymak olacak

giacomo 4,3 4 4,300000 4,3

gördüğünüz gibi %dtamsayı kısalır, %sbiçimlendirmeyi sürdürür, %fkayan nokta olarak yazdırır ve %ggenel sayı için kullanılır

belli ki

print('%d' % (name))

bir istisna oluşturur; dizeyi sayıya dönüştüremezsiniz


Bu daha fazla oy istiyor. Bunun %syerine bir sayı için kullanılırsa ne olacağını açıklar .
— Vikas Prasad

1
Her ikisi de tamsayıya dönüştürülecekse,% d ile% i arasındaki fark nedir? % D,% i ve% f ile nasıl karşılaştırılır?
— srini

34

%s , biçimlendirilmiş bir dizeye enjekte etmek istediğiniz dize değerleri için yer tutucu olarak kullanılır.

%d sayısal veya ondalık değerler için yer tutucu olarak kullanılır.

Örneğin (python 3 için)

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

Çıktı

Joe is 42 years old

6
Sorunu gerçekten açıklamıyor mu? Sorunu açıklamıyorum , soruya kısa bir cevap veriyorum . Soru özellikle% s ve% d'nin ne için olduğunu sordu.
— Soviut

2
% i ve% d arasındaki farkı biliyor musunuz? python% i'yi destekliyor mu?
— cryanbhu

11

Bunlar yer tutuculardır:

Örneğin: 'Hi %s I have %d donuts' %('Alice', 42)

Bu kod satırı% s yerine Alice (str) ve% d yerine 42 yazacaktır.

Çıktı: 'Hi Alice I have 42 donuts'

Bu çoğu zaman "+" ile gerçekleştirilebilir. Sorunuzu daha iyi anlamak için {} / .format () öğesini de kontrol etmek isteyebilirsiniz. İşte bir örnek: Python dizesi biçimlendirmesi:% vs. .format

Ayrıca burada bir google python öğretici video @ 40 'bakın, bazı açıklamalar var https://www.youtube.com/watch?v=tKTZoB2Vjuk


10

%dVe %s"komutları" biçimlendirme dize biçim dizeleri için kullanılır. %dSayılar içindir ve %sdizeleri içindir.

Örnek olarak:

print("%s" % "hi")

ve

print("%d" % 34.6)

Birden çok argüman iletmek için:

print("%s %s %s%d" % ("hi", "there", "user", 123456)) dönecek hi there user123456


9

Bunların hepsi bilgilendirici cevaplar, ancak hiçbiri %sve arasındaki farkın merkezinde yer almıyor %d.

%sbiçimlendiriciye str()argümandaki işlevi çağırmasını söyler ve tanım gereği bir dizeye zorladığımız için %saslında sadece performans gösterir str(arg).

%dÖte yandan, çağırmadan int()önce argüman çağırıyor str(), gibi str(int(arg)), Bu intzorlama yanı sıra strzorlama neden olacaktır .

Örneğin, onaltılık bir değeri ondalığa çevirebilirim,

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

veya bir şamandırayı kısaltabilirsiniz.

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

Ancak argüman bir sayı değilse, işlem bir istisna oluşturacaktır.

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

Yani niyet sadece çağrısına ise str(arg), o zaman %syeterlidir, ancak fazladan (şamandıra ondalık basamak biçimlendirmek gibi) biçimlendirme veya başka zorlama gerekirse, daha sonra diğer biçim sembolleri ihtiyaç vardır.

İle f-stringEğer biçimlendirici out ayrılırken gösterimde, varsayılan 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'

Aynı şey string.format; varsayılan değer str.

>>> a = 1
>>> '{}'.format(a)
'1'
>>> '{!s}'.format(a)
'1'
>>> '{:d}'.format(a)
'1'

8

%dve %syer tutucularsa, değiştirilebilir bir değişken olarak çalışırlar. Örneğin, 2 değişken oluşturursanız

variable_one = "Stackoverflow"
variable_two = 45

değişkenlerin bir demetini kullanarak bu değişkenleri dizedeki bir cümleye atayabilirsiniz.

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

Not %sString ve çalışır %dsayısal veya ondalık değişkenleri için işin.

yazdırırsanız variable_3şöyle görünür

print(variable_3 % (variable_one, variable_two))

StackOverflow'da bir cevap arıyordum ve soruma 45'ten fazla cevap buldum.


5

Bunlar format belirleyicileridir. Bunlar, Python ifadelerinizin değerini, belirli bir biçim uygulanmış olarak dizelere dahil etmek istediğinizde kullanılır.

Nispeten detaylı bir tanıtım için Python'a Dalış bölümüne bakınız .



2

O zaman% s veya% d kullanmak istemiyorsanız ..

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

Çıktı:

my name is marcog and my name is 42

2
Bu cevabın soru ile ne ilgisi var? Sorgulayıcı kullanımı hakkında soruyordu %sve %d.
— Mark Dickinson

BTW, gösterdiğiniz kod Python 3.5.1'de geçersiz: printPython 3'te bir deyim değil bir işlevdir.
— Mark Dickinson

Gönderiyi düzenledim ... lütfen bakın. Aslında, alternatif olarak yayınladım ... bazıları% d veya% s kullanmaktan kaçınabilirse. Ve hata tespiti için teşekkürler, .. Ben kodu düzenledim.
— Sujatha

3
Düzenlemeler için teşekkürler. Ne yazık ki, bu hala sorunun cevabı değil.
— Mark Dickinson

2

% s, dize için yer tutmak için kullanılır% d, sayı için yer tutmak için kullanılır

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))

Program çıktısı

bu video bu ipucu hakkında derinlere gidiyor https://www.youtube.com/watch?v=4zN5YsuiqMA


Stack Overflow'a hoş geldiniz! Cevabınız diğer 12 arasındaki fark nedir?
— Vasil Velichkov

neredeyse bu biçim aynı çalışır, ancak tüm istediğim bir anlayış artırmak için daha fazla örnek vermektir
— Noel Moses Mwadende

Bu harika! Program çıktısını görüntü olarak değil metin olarak ekleyerek yanıtınızı geliştirebilirsiniz.
— Vasil Velichkov

ilginiz için teşekkürler, bazı değişiklikler yapacağım, rica ederim
— Noel Moses Mwadende

1

hangi ...
python3.6 ile geliyor f-stringsbiçimlendirme şeyleri çok daha kolay hale getirir!
şimdi python sürümünüz 3.6'dan büyükse, dizelerinizi şu mevcut yöntemlerle biçimlendirebilirsiniz:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.