Odpowiedzi:
Istnieje wiele sposobów osiągnięcia wyniku. Jeśli szukasz tylko rozwiązania dla swojego przypadku, użyj mnożenia ciągów, jak wspomina @Ant . To zadziała tylko wtedy, gdy każda z twoich printinstrukcji wypisze ten sam ciąg. Zauważ, że działa on dla mnożenia dowolnego łańcucha długości (np. 'foo' * 20Działa).
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
Jeśli chcesz to zrobić ogólnie, utwórz ciąg, a następnie wydrukuj go raz. Zuży to trochę pamięci dla ciągu, ale wykona tylko jedno wywołanie print. Zauważ, że użycie konkatenacji ciągów +=jest teraz liniowe względem rozmiaru łańcucha, który łączysz, więc będzie to szybkie.
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
Lub możesz to zrobić bardziej bezpośrednio, używając sys.stdout . write () , który printjest opakowaniem wokół. Spowoduje to zapisanie tylko nieprzetworzonego ciągu, który mu podasz, bez żadnego formatowania. Zauważ, że żadna nowa linia nie jest drukowana nawet pod koniec 20 asekund.
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
Python 3 zmienia printinstrukcję w funkcję print () , która umożliwia ustawienie endparametru. Możesz go użyć w> = 2.6, importując z __future__. Unikałbym tego jednak w każdym poważnym kodzie 2.x, ponieważ będzie to trochę mylące dla tych, którzy nigdy nie używali 3.x. Powinien jednak dać ci przedsmak dobrodziejstw, jakie niesie ze sobą 3.x.
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
"".join(...)zamiast tego.
+=w Pythonie jest operacją trwającą w czasie dla konkatenacji pojedynczego znaku.
Z PEP 3105: drukuj jako funkcję w dokumencie What's New in Python 2.6 :
>>> from __future__ import print_function
>>> print('a', end='')
Oczywiście działa to tylko z Pythonem 3.0 lub nowszym (lub 2.6+ z literą from __future__ import print_functionna początku). printOświadczenie zostało usunięte i stał się print()funkcja domyślnie w Pythonie 3.0.
Można pominąć spację, wypisując pusty ciąg na standardowe wyjście między printinstrukcjami.
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
Jednak czystszym rozwiązaniem jest najpierw zbudowanie całego ciągu, który chcesz wydrukować, a następnie wyprowadzenie go za pomocą pojedynczej printinstrukcji.
sys.stdout.write()w tym przypadku używanie samego tylko jest wygodniejsze. Chciałem jednak pokazać, że zapisanie pustego ciągu na standardowe wyjście pomija odstępy między elementami napisanymi przy użyciu print, co może być przydatne w podobnych sytuacjach.
Możesz wydrukować znak backspace ( '\b'):
for i in xrange(20):
print '\ba',
wynik:
aaaaaaaaaaaaaaaaaaaa
Jeśli chcesz, aby pojawiały się pojedynczo, możesz to zrobić:
import time
import sys
for i in range(20):
sys.stdout.write('a')
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.flush() jest konieczne, aby wymusić zapis znaku przy każdym uruchomieniu pętli.
Na marginesie:
Drukowanie to O (1), ale budowanie ciągu, a następnie drukowanie to O (n), gdzie n to całkowita liczba znaków w ciągu. Więc tak, chociaż budowanie łańcucha jest „czystsze”, nie jest to najbardziej wydajna metoda zrobienia tego.
Sposób, w jaki bym to zrobił, jest następujący:
from sys import stdout
printf = stdout.write
Teraz masz „funkcję drukowania”, która wypisuje dowolny podany przez Ciebie ciąg bez zwracania za każdym razem znaku nowego wiersza.
printf("Hello,")
printf("World!")
Wynik będzie wyglądał następująco: Hello, World!
Jeśli jednak chcesz wydrukować liczby całkowite, zmiennoprzecinkowe lub inne wartości niebędące ciągami, musisz przekonwertować je na ciąg za pomocą funkcji str ().
printf(str(2) + " " + str(4))
Wynik będzie następujący: 2 4
to jest naprawdę proste
dla wersji Pythona 3+ wystarczy napisać następujące kody
for i in range(20):
print('a',end='')
po prostu przekonwertuj pętlę na następujące kody, nie musisz się martwić o inne rzeczy
ŁAŁ!!!
To było całkiem dawno temu
Teraz w Pythonie 3.x będzie to całkiem proste
kod:
for i in range(20):
print('a',end='') # here end variable will clarify what you want in
# end of the code
wynik:
aaaaaaaaaaaaaaaaaaaa
Więcej o funkcji print ()
print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)
Tutaj :
value1,value2,value3
można drukować wiele wartości za pomocą przecinków
sep = '-'
Trzy wartości zostaną oddzielone znakiem „-”
możesz użyć dowolnego znaku zamiast tego nawet łańcucha, takiego jak sep = '@' lub sep = 'good'
end='\n'
domyślnie funkcja drukowania umieszcza znak '\ n' na końcu wyjścia
ale możesz użyć dowolnego znaku lub ciągu, zmieniając wartość end variale
jak end = '$' lub end = '.' or end = 'Hello'
file=sys.stdout
jest to wartość domyślna, standardowe wyjście systemu
używając tego argumentu możesz utworzyć strumień pliku wyjściowego, taki jak
print("I am a Programmer", file=open("output.txt", "w"))
za pomocą tego kodu utworzysz plik o nazwie output.txt, w którym będą przechowywane dane wyjściowe Jestem programistą
flush = False
Jest to wartość domyślna przy użyciu flush = True , możesz wymusić opróżnienie strumienia
"".join("a" for i in xrange(20)). (Jest to znacznie bardziej elastyczne niż zwykłe robienie tego"a" * 20, ponieważ zakładam, że jest to uproszczony przykład).