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.