Ruby örneği:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Başarılı Python dizesi birleştirme bana görünüşte ayrıntılı.
Ruby örneği:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Başarılı Python dizesi birleştirme bana görünüşte ayrıntılı.
Yanıtlar:
Python 3.6, Ruby'nin dize enterpolasyonuna benzer değişmez dize enterpolasyonu ekleyecektir . Python'un (2016'nın sonunda yayınlanması planlanan) bu sürümünden başlayarak, ifadeleri "f-dizeleri" ne ekleyebileceksiniz, örn.
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
3.6'dan önce, buna en yakın olan
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? %(name)s." % locals())
%
Operatör için kullanılabilecek dize enterpolasyon Python. İlk işlenen enterpolasyon yapılacak dizedir, ikincisi ise "eşleme", alan adlarının enterpole edilecek değerlerle eşlenmesi de dahil olmak üzere farklı türlere sahip olabilir. Burada yerel değişkenlerin sözlüğünü kullandımlocals()
alan adını name
yerel bir değişken olarak değerine eşlemek için .
En .format()
son Python sürümlerinin yöntemini kullanan aynı kod şöyle görünecektir:
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
Ayrıca string.Template
sınıf var:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
%s
, bir dize ve %03d
baştaki sıfırlarla 3 basamağa kadar doldurulmuş bir sayı içindir. Sadece yazılabilirdi print "%s has %03d" % ("Python", 2)
. Örnek daha sonra parantez içine bir eşleme anahtarı koymaktan yararlanır; bundan sonra %
yer tutuculara dizedeki sıralarına güvenmek yerine anlamlı adlar vermenin bir yolu vardır. Daha sonra anahtar adlarını değerleriyle eşleştiren bir sözlük iletirsiniz. Bu yüzden Sven, locals()
tüm yerel değişkenlerinizi içeren bir diksiyon döndüren işlevi kullanıyor, böylece name
ad değerine
s
dönüşüm türü olarak kullanabileceğinizi unutmayın - Python hemen hemen her şeyi bir dizeye dönüştürebilir. Ancak elbette diğer dönüşüm türlerinin özel biçimlendirme özelliklerini kaybedersiniz.
Python 2.6.X sürümünden bu yana kullanmak isteyebilirsiniz:
"my {0} string: {1}".format("cool", "Hello there!")
%
dize enterpolasyon için operatör olduğu değil Python 3.x kaldırılmış docs.python.org/dev/py3k/whatsnew/… 3.1'den%
başlayarak kullanımdan kaldırılma planını açıkladı , ancak bu asla olmadı.
{}
ortadan kaldırılabilir.
Python'da dize enterpolasyonunu sağlayan interpy paketini geliştirdim .
Sadece üzerinden yükleyin pip install interpy
. Ve sonra, satırı ekleyin# coding: interpy
dosyalarınızın başına ekleyin!
Misal:
#!/usr/bin/env python
# coding: interpy
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."
Python'un dize enterpolasyonu C'nin printf () işlevine benzer
Eğer denersen:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
Etiketi değişkenle %s
değiştirilir name
. Yazdırma işlevi etiketlerine bir göz atmalısınız: http://docs.python.org/library/functions.html
print "First is %s, second is %s" % (var1, var2)
.
Dize enterpolasyonu, PEP 498'de belirtildiği gibi Python 3.6'ya dahil edilecektir . Bunu yapabileceksiniz:
name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')
Sünger Bob'dan nefret ettiğimi unutmayın, bu yüzden bunu yazmak biraz acı vericiydi. :)
Buna da sahip olabilirsiniz
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n{name}.".format(name=name)
#
yazdırılmayı amaçladığına inanmıyorum . Sadece Ruby sözdizimini kullanıyorlar.
#
karakterin basılacağını düşündüm .
import inspect
def s(template, **kwargs):
"Usage: s(string, **locals())"
if not kwargs:
frame = inspect.currentframe()
try:
kwargs = frame.f_back.f_locals
finally:
del frame
if not kwargs:
kwargs = globals()
return template.format(**kwargs)
Kullanımı:
a = 123
s('{a}', locals()) # print '123'
s('{a}') # it is equal to the above statement: print '123'
s('{b}') # raise an KeyError: b variable not found
Not: performans bir sorun olabilir. Bu, üretim günlükleri için değil, yerel komut dosyaları için kullanışlıdır.
Yinelendi:
Eski Python (2.4'te test edildi) için en iyi çözüm yolu gösteriyor. Bunu yapabilirsiniz:
import string
def try_interp():
d = 1
f = 1.1
s = "s"
print string.Template("d: $d f: $f s: $s").substitute(**locals())
try_interp()
Ve sen al
d: 1 f: 1.1 s: s
Python 3.6 ve daha yeni sürümler, f-dizeleri kullanarak gerçek dize enterpolasyonuna sahiptir :
name='world'
print(f"Hello {name}!")
name
dizede yatan yerel bir değişken ve Python'da bunları kullanmak istiyorsanız, yerel değişkenlerin sözlüğünü açıkça dize biçimlendiricisine iletmeniz gerekiyor.