2010-08-22 27 views

cevap

4

şimdi bunu yapıyoruz şekilde yapmak pythonic yoldur. locals sözlüğünü de kullanabilirsiniz. böylece gibi: Şimdi

>>> fruit = 'Pear' 
>>> print("Hey, {fruit}".format(**locals())) 
Hey, Pear 

çok pythonic görünmüyor, ancak aynı sen PHP biçimlendirme sahip etkileyen ulaşmanın tek yolu bu. Sadece yaptığınız gibi davranırım.

+2

Evet, siz * yapabilirsiniz * - ama siz bu sıradayken, "yeni" dize biçimlendirmesine nasıl geçilir? '%' -formatting bir gün kaldırılacak ... – delnan

+0

Bu şekilde yapıyorum daha da kötü görünüyor – Aillyn

+2

'Yerliler()' kullanmak için son derece kötü bir stil, bunu asla. Dize yerine koymak istediğiniz gerçek değerleri geçirin. – Allen

1

şey çalışmalıdır:

"%(fruit)s" % locals() 
11

PHP davranışa yakın olarak elde edilebilecek olan ve hala Python zen muhafaza geçerli:

print "Hey", fruit, "!" 

baskı her virgül de boşluklar ekler.

daha yaygın Python deyim geçerli: NamespaceFormatter örnekten

print "Hey %(crowd)s! Would you like some %(fruit)s?" % { 'crowd': 'World', 'fruit': 'Pear' } 
1

hafif adaptasyon: Eğer argümanları tonlarca ve onlara isim istiyorsanız

print "Hey %s!" % fruit 

, bir dicti kullanabilirsiniz PEP-3101 yılında:

import string 

class NamespaceFormatter(string.Formatter): 
    def __init__(self, namespace={}): 
     super(NamespaceFormatter, self).__init__() 
     self.namespace = namespace 

    def get_value(self, key, args, kwds): 
     if isinstance(key, str): 
      try: 
       # Check explicitly passed arguments first 
       return kwds[key] 
      except KeyError: 
       return self.namespace[key] 
     else: 
      super(NamespaceFormatter, self).get_value(key, args, kwds) 

fmt = NamespaceFormatter(globals()) 
fruit = 'Pear' 

print fmt.format('Hey, {fruit}!') 

için:

-1

Yapmayın. Bu unpythonic. Örneğin, uygulamanıza çeviri eklediğinizde, tüm çeviri dosyalarını kendiniz kontrol etmedikçe hangi değişkenlerin kullanıldığını daha uzun süre kontrol edemezsiniz. Örneğin, bir yerel değişkeni değiştirirseniz, çevrilmiş tüm dizelerde de değiştirmeniz gerekecektir.

İlgili konular