2010-12-10 13 views
10

Dlaczego print słowo kluczowe w python, a nie funkcja?Dlaczego print nie jest funkcją w python?

+2

patrz http://www.python.org/dev/peps/pep-3105/ – jfs

+0

interesujące; nigdy nie uważał tego za problem, ale dobre pytanie. –

+0

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

Odpowiedz

12

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!

+0

Nie miałem jeszcze majsterkowania z Pythonem 3. Czy słowo kluczowe drukowania nadal działa? – user538442

+2

Nie. To teraz funkcja. W prostym przypadku "print" foo "' staje się 'print (" foo ")' –

+0

Poprawione jak w "teraz funkcja" :) –

2

Obecnie jest to funkcja w Pythonie 3.

+0

Wydaje się dziwne, że korekta zajęła ponad 10 lat. – user538442

+1

@user: Niekoniecznie jest to kwestią czasu, a raczej zgodności, zarówno w przód, jak iw tył. –

+4

@ user538442: Kompatybilność wsteczna to dziwka :( – delnan

1

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.

+0

Uhhh, teraz to zaczyna mieć sens – user538442

+0

Więc dodatkowa funkcjonalność jest teraz stracona? Tak jak ciągnięcie, i >> – user538442

+5

To wciąż tam jest, ale teraz używasz 'end =' i 'file =' parametry słowa kluczowego zamiast specjalnej składni – dan04

8

printbył 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 printjest funkcją. Tak, również w Pythonie 2 można wykonać:

from __future__ import print_function 

i wszystko gotowe. Działa od Pythona 2.6.

1

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.

+0

Przez ten argument 'input' również musi być instrukcją. – steffen

0

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ę printmiał 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ą.