Yanıtlar:
Sonuca ulaşmanın birkaç yolu vardır. Sadece sizin durumunuz için bir çözüm istiyorsanız, @Ant'ın bahsettiği gibi dize çarpmayı kullanın . Bu, yalnızca ifadelerinizin her biri aynı dizeyi yazdırırsa işe yarar . Herhangi bir uzunluktaki dizginin çarpımı için çalıştığını unutmayın (örneğin çalışır).print
'foo' * 20
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
Bunu genel olarak yapmak istiyorsanız, bir dizi oluşturun ve ardından bir kez yazdırın. Bu, dizi için biraz bellek tüketir, ancak yalnızca tek bir çağrı yapar print
. Kullanarak dize birleştirme +=
işleminin artık birleştirdiğiniz dizenin boyutunda doğrusal olduğunu ve bu nedenle hızlı olacağını unutmayın.
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
Veya sys.stdout kullanarak daha doğrudan yapabilirsiniz . write () , print
etrafındaki bir sarmalayıcıdır. Bu, herhangi bir biçimlendirme olmadan yalnızca verdiğiniz ham dizeyi yazacaktır. 20 a
s'nin sonunda bile satırsonu basılmadığına dikkat edin .
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
Python 3, print
ifadeyi bir parametre ayarlamanıza izin veren bir print () işlevine dönüştürür end
. 'Den içe aktararak> = 2.6'da kullanabilirsiniz __future__
. 3.x'i hiç kullanmayanlar için biraz kafa karıştırıcı olacağından, herhangi bir ciddi 2.x kodunda bundan kaçınırdım. Bununla birlikte, size 3.x'in getirdiği bazı iyiliklerin tadına bakmalıdır.
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
"".join(...)
Bunun yerine kullanın .
+=
Python'da kullanılan dizge birleştirme , tek bir karakterin birleştirilmesi için sabit zamanlı bir işlemdir.
Gönderen PEP 3105: print Fonksiyonu Olarak içinde Python 2.6 'daki Yenilikler Yeni belgede:
>>> from __future__ import print_function
>>> print('a', end='')
Açıkçası bu sadece python 3.0 veya üstü ile çalışır (veya from __future__ import print_function
başında 2.6+ ile ). print
İfadesi çıkarıldı ve olmuştur print()
Python 3.0 varsayılan olarak işlev.
print
İfadeler arasındaki stdout'a boş bir dize yazdırarak boşluğu bastırabilirsiniz .
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
Ancak, daha temiz bir çözüm, önce yazdırmak istediğiniz dizenin tamamını oluşturmak ve ardından tek bir print
ifadeyle çıktı almaktır.
sys.stdout.write()
bu durumda sadece kullanmak daha uygun. Bununla birlikte, stdout'a boş bir dizge yazmanın print
, benzer durumlarda yararlı olabilecek şekilde kullanılarak yazılan öğeler arasındaki boşluğu bastırdığını göstermek istedim .
Bir geri alma karakteri ( '\b'
) yazdırabilirsiniz :
for i in xrange(20):
print '\ba',
sonuç:
aaaaaaaaaaaaaaaaaaaa
Her seferinde bir tane görünmelerini istiyorsanız, bunu yapabilirsiniz:
import time
import sys
for i in range(20):
sys.stdout.write('a')
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.flush()
döngü her çalıştırıldığında karakteri yazmaya zorlamak için gereklidir.
Bir yan not olarak:
Baskı O (1), ancak bir dizi oluşturma ve ardından yazdırma O (n) 'dir, burada n, dizedeki toplam karakter sayısıdır. Yani evet, dizge oluşturmak "daha temiz" olsa da, bunu yapmanın en verimli yöntemi değil.
Bunu yapmamın yolu şu:
from sys import stdout
printf = stdout.write
Artık, verdiğiniz dizeleri, her seferinde yeni satır karakterini döndürmeden yazdıran bir "yazdırma işlevine" sahipsiniz.
printf("Hello,")
printf("World!")
Çıktı şöyle olacaktır: Merhaba, Dünya!
Bununla birlikte, tamsayıları, kayan sayıları veya diğer dize olmayan değerleri yazdırmak istiyorsanız, bunları str () işleviyle bir dizeye dönüştürmeniz gerekir.
printf(str(2) + " " + str(4))
Çıktı: 2 4
bu gerçekten basit
python 3+ sürümleri için yalnızca aşağıdaki kodları yazmanız gerekir
for i in range(20):
print('a',end='')
sadece döngüyü aşağıdaki kodlara çevirin, başka şeyler için endişelenmenize gerek yok
VAY!!!
Oldukça uzun zaman önce
Şimdi, python 3.x'te oldukça kolay olacak
kod:
for i in range(20):
print('a',end='') # here end variable will clarify what you want in
# end of the code
çıktı:
aaaaaaaaaaaaaaaaaaaa
Print () işlevi hakkında daha fazla bilgi
print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)
Burada :
value1,value2,value3
virgül kullanarak birden çok değer yazdırabilirsiniz
sep = '-'
3 değer '-' karakteriyle ayrılacaktır
sep = '@' veya sep = 'good' gibi dizge yerine herhangi bir karakter kullanabilirsiniz
end='\n'
varsayılan olarak yazdırma işlevi çıktının sonuna '\ n' karakterini koy
ancak son değişken değerini değiştirerek herhangi bir karakter veya dizeyi kullanabilirsiniz
end = '$' veya end = 'gibi.' veya end = 'Merhaba'
file=sys.stdout
bu varsayılan bir değerdir, sistem standart çıktısı
bu argümanı kullanarak aşağıdaki gibi bir çıktı dosyası akışı oluşturabilirsiniz:
print("I am a Programmer", file=open("output.txt", "w"))
Bu kodla adlı bir dosya oluşturur çýktý.txt çıktı nerede ben Programcı değilim saklanacaktır
flush = False
Bu, flush = True kullanan varsayılan bir değerdir , akışı zorla temizleyebilirsiniz
"".join("a" for i in xrange(20))
. (Bunun"a" * 20
basitleştirilmiş bir örnek olduğunu varsaydığım için yapmaktan çok daha esnektir ).