Dlaczego print
słowo kluczowe w python, a nie funkcja?Dlaczego print nie jest funkcją w python?
Odpowiedz
Ponieważ Guido zdecydował, że popełnił błąd. :)
Został poprawiony: spróbuj Python 3, który dedykuje section of its release notes do opisania zmiany funkcji.
Dla całego tła, zobacz PEP 3105 i kilka linków podanych w sekcji Referencje!
Nie miałem jeszcze majsterkowania z Pythonem 3. Czy słowo kluczowe drukowania nadal działa? – user538442
Nie. To teraz funkcja. W prostym przypadku "print" foo "' staje się 'print (" foo ")' –
Poprawione jak w "teraz funkcja" :) –
Obecnie jest to funkcja w Pythonie 3.
Wydaje się dziwne, że korekta zajęła ponad 10 lat. – user538442
@user: Niekoniecznie jest to kwestią czasu, a raczej zgodności, zarówno w przód, jak iw tył. –
@ user538442: Kompatybilność wsteczna to dziwka :( – delnan
Oświadczenie w Pythonie 2.x print
ma jakieś specjalnej składni, które nie byłyby dostępne dla zwykłych funkcji. Na przykład możesz użyć końcowego: ,
, aby wyłączyć wyjście końcowego nowego wiersza lub możesz użyć >>
, aby przekierować dane wyjściowe do pliku. Ale to wszystko nie było wystarczająco przekonujące, nawet dla samego Guido van Rossuma, aby zachować to oświadczenie - zmienił print
w funkcję w Pythonie 3.x.
Uhhh, teraz to zaczyna mieć sens – user538442
Więc dodatkowa funkcjonalność jest teraz stracona? Tak jak ciągnięcie, i >> – user538442
To wciąż tam jest, ale teraz używasz 'end =' i 'file =' parametry słowa kluczowego zamiast specjalnej składni – dan04
print
był oświadczenie w Pythonie ponieważ było stwierdzenie w ABC, główną inspiracją dla Pythona (chociaż to było nazywane WRITE
tam). To z kolei prawdopodobnie miało oświadczenie zamiast funkcji, ponieważ było językiem nauczania i jako takie inspirowane podstawowymi. Z drugiej strony, Python okazał się czymś więcej niż językiem nauczania (chociaż jest to również dobre).
Jednak obecnie print
jest funkcją. Tak, również w Pythonie 2 można wykonać:
from __future__ import print_function
i wszystko gotowe. Działa od Pythona 2.6.
odpowiedź, która czerpie z tego, co cenię o rachunku print
, ale niekoniecznie z oficjalnej historii Pythona ...
Python jest, do pewnego stopnia, język skryptowy. Obecnie istnieje wiele definicji "języka skryptowego", ale ten, którego tutaj użyję, to: język zaprojektowany do efektywnego wykorzystania krótkich lub interaktywnych programów. Takie języki zwykle dopuszczają programy jednoliniowe bez nadmiernego zestawu znaków; ułatwić wprowadzanie danych z klawiatury (na przykład unikając nadmiernej interpunkcji); i zapewniają wbudowaną składnię dla typowych zadań (wygoda z możliwym kosztem czystości). W przypadku Pythona drukowanie wartości jest bardzo powszechną czynnością, szczególnie w trybie interaktywnym. Wymaganie funkcji print
wydaje się tu niepotrzebnie niewygodne. Istnieje znacznie mniejsze ryzyko błędu dzięki specjalnej składni, która w odpowiedni sposób działa w 99% przypadków.
Przez ten argument 'input' również musi być instrukcją. – steffen
będę rzucać w myślach na to:
w Pythonie 2.x print
nie jest stwierdzenie przez pomyłkę, albo z powodu drukowania stdout
jest takie podstawowe rzeczy do zrobienia. Cała reszta jest tak przemyślana lub ma przynajmniej zrozumiałe powody, dla których błąd w tej kolejności wydaje się dziwny. Jeśli komunikacja z stdout
zostałaby uznana za tak podstawową, komunikowanie się z stdin
musiałoby być równie ważne, ale funkcja input()
.
Jeśli spojrzeć na list of reserved keywords i list of statements, które nie są wyrażeniami, wyraźnie widać, co jest inną wskazówką, że muszą być bardzo konkretne powody.
myślę print
miał być stwierdzenie, a nie wyrazem, aby uniknąć naruszenia bezpieczeństwa w input()
. Pamiętaj, że input()
w Python2 ocenia wszystko, co użytkownik wpisze w stdin
. Jeśli użytkownik wpisze na listę print a
i a
listę wszystkich haseł, będzie to katastrofalne.
Najwyraźniej zdolność input()
do oceny wyrażeń została uznana za ważniejszą niż print
, która jest normalną wbudowaną funkcją.
- 1. Dlaczego jQuery.parseJSON nie jest funkcją?
- 2. Dlaczego mapa (print, a_list) nie działa?
- 3. dlaczego otrzymuję TypeError: obj.addEventListener nie jest funkcją?
- 4. Dlaczego Firebug mówi toFixed() nie jest funkcją?
- 5. dlaczego funkcja createServer() nie jest funkcją?
- 6. Dlaczego funkcja .val() nie jest funkcją?
- 7. Nie jest funkcją?
- 8. querySelectorAll nie jest funkcją
- 9. table.row nie jest funkcją
- 10. pattern.test nie jest funkcją
- 11. Dlaczego is_lock_free jest funkcją członka?
- 12. .done nie jest funkcją
- 13. dlaczego mam this.http.get (...). Subskrybować nie jest funkcją w angular2
- 14. datepicker nie jest funkcją
- 15. indexOf nie jest funkcją
- 16. Webpack - $ nie jest funkcją
- 17. document.getElementByID nie jest funkcją
- 18. c.apply nie jest funkcją
- 19. data.map nie jest funkcją
- 20. getElementsByAttribute() nie jest funkcją
- 21. query.on nie jest funkcją
- 22. appendTo() nie jest funkcją?
- 23. getResponseHeader nie jest funkcją
- 24. pg.connect nie jest funkcją?
- 25. Dlaczego Python nie jest w pełni obiektowy?
- 26. Javascript: getFullYear() nie jest funkcją
- 27. JavaScript date.format nie jest funkcją
- 28. Print nie działa, gdy skompilowany z py2exe
- 29. Python - sprawdź, czy obiekt jest wbudowaną funkcją
- 30. $ („# slider_range”) suwak nie jest funkcją
patrz http://www.python.org/dev/peps/pep-3105/ – jfs
interesujące; nigdy nie uważał tego za problem, ale dobre pytanie. –
readln i writeln również zostały wbudowane w Turbo Pascal. Nigdy nie rozumiałem, dlaczego, i podobał mi się C lepiej, aby zamiast tego działały. – sashoalm