Nie byłem pewien, pod jakim tytułem dokładnie rozważać to pytanie, kodowanie golfa wydaje się odpowiednie, choć trochę nieokreślone.
Znam trochę rozumień w Pythonie, ale wydają się bardzo trudne do „odczytania”. Tak jak ja to widzę, zrozumienie może osiągnąć to samo, co następujący kod:
for i in range(10): if i == 9: print('i equals 9')
Ten kod jest dużo łatwiejszy do odczytania niż obecne rozumienia, ale zauważyłem, że nie możesz mieć dwóch znaków ``: '' w jednym wierszu ... to też mnie prowadzi ...
moje pytanie:
Czy jest jakiś sposób, żebym mógł umieścić następujący przykład w JEDNEJ LINII.
try:
if sam[0] != 'harry':
print('hello', sam)
except:
pass
Coś takiego byłoby świetne:
try: if sam[0] != 'harry': print('hellp', sam)
except:pass
Ale znowu napotykam sprzeczne ``: '' Chciałbym również wiedzieć, czy istnieje sposób na uruchomienie try (lub coś podobnego) bez wyjątku, wydaje się całkowicie bezcelowe, że muszę wstawić wyjątkiem: podaj tam. to zmarnowana linia.
Dziękuję za wkład ... i uśmiechnij się : D
\n
si spacji dla wcięć.Odpowiedzi:
Niestety, to, czego chcesz, nie jest możliwe w Pythonie (co sprawia, że Python jest prawie bezużyteczny dla programów jednowierszowych wiersza poleceń). Nawet jawne użycie nawiasów nie pozwala uniknąć wyjątku składni. Możesz uciec z sekwencją prostych instrukcji oddzielonych średnikiem:
Ale gdy tylko dodasz konstrukcję, która wprowadza wcięty blok (jak
if
), potrzebujesz znaku końca wiersza. Również,jest legalne i może przybliżać to, czego chcesz.
Jeśli chodzi o
try ... except
rzeczy: Byłoby całkowicie bezużyteczne bezexcept
.try
mówi „Chcę uruchomić ten kod, ale może zgłosić wyjątek”. Jeśli nie obchodzi Cię wyjątek, zostaw rozszerzenietry
. Ale gdy tylko to umieścisz, mówisz „Chcę poradzić sobie z potencjalnym wyjątkiem”.pass
Następnie mówi, że nie chce obsługiwać go specjalnie. Ale to oznacza, że twój kod będzie nadal działał, czego inaczej by nie zrobił.źródło
try:
: Reguły składni Pythona po prostu nie pozwolą ci uciec z pojedynczą klauzulą „try” bez towarzyszącej jej klauzuli „oprócz”. To, co robię, to zawijanie try-behind we własnej funkcji i wywołanie tego zamiast tego. Polubif (checkint(s))...
idef checkint(s): try: int(s)\nreturn True\nexcept: return False
.python -c "exec\"print 'A' \nfor i in 1,2,3: print i \""
Możesz użyć wbudowanej instrukcji exec, np .:
Gdzie
\n
jest znakiem nowej linii i\t
jest używany jako wcięcie (tabulator).Należy również policzyć używane spacje, aby wcięcie było dokładnie dopasowane.
Jednak, jak już powiedziały wszystkie inne odpowiedzi, można tego oczywiście używać tylko wtedy, gdy naprawdę musisz umieścić to w jednej linii.
exec
jest dość niebezpieczną instrukcją (szczególnie podczas budowania aplikacji internetowej), ponieważ umożliwia wykonanie dowolnego kodu Pythona.źródło
exec("try: \n if sam[0] != 'harry': print('hello', sam) \nexcept: pass")
ładniej :)Tak, ten post ma 8 lat, ale na wypadek, gdyby ktoś tu przyszedł i szukał odpowiedzi: możesz teraz użyć tylko średników. Jednak nie możesz używać if / elif / else staments, pętli for / while i nie możesz definiować funkcji. Głównym zastosowaniem tego byłoby używanie zaimportowanych modułów, w których nie trzeba definiować żadnych funkcji ani używać żadnych instrukcji / pętli if / elif / else / for / while.
Oto przykład, który bierze artystę utworu, nazwę utworu i wyszukuje genialne słowa:
źródło
Nie polecam tego robić ...
To, co opisujesz, nie jest zrozumieniem.
PEP 8 Style Przewodnik dla kodu Pythona , który ja nie polecam, ma do powiedzenia na temat oświadczeń złożonych:
Oto przykładowe rozumienie, aby dokonać rozróżnienia:
źródło
Nie zachęcam do tego, ale mówię, że jesteś w wierszu poleceń, nie masz nic oprócz Pythona i naprawdę potrzebujesz jednowierszowego kodu, możesz to zrobić:
To, co tutaj robimy, to wstępne przetwarzanie
\n
przed oceną kodu Pythona.To super hacky! Nie pisz takiego kodu.
źródło
może z „i” lub „lub”
po fałszywej potrzebie napisania „lub”
po prawdziwej potrzebie napisania „i”
lubić
wynik:
a może jak
dostałem się tutaj, wyszukując w google "jak umieścić wiele zdań w jednym wierszu pythona", nie odpowiadając bezpośrednio na pytanie, może ktoś inny tego potrzebuje.
źródło
Aby uzyskać
python -c
zorientowane rozwiązanie i pod warunkiem, że używasz powłoki Bash, tak, możesz mieć prostą jednowierszową składnię, jak w tym przykładzie:Załóżmy, że chcesz zrobić coś takiego (bardzo podobnego do twojej próbki, łącznie z
except: pass
instrukcją):To NIE zadziała i spowoduje ten błąd:
Dzieje się tak, ponieważ konkurencja między Bash i Python Interpretation of
\n
escape sequences. Aby rozwiązać problem, można użyć$'string'
składni Bash, aby wymusić\n
interpretację Bash PRZED Pythonem. Aby uczynić ten przykład bardziej wymagającym, dodałem typowąend=..\n..
specyfikację Pythona w wywołaniu Python print: na końcu będziesz w stanie uzyskać OBIE\n
interpretacje z bash i Python pracujących razem, każdą z odpowiednim fragmentem tekstu. Żeby ostatecznie właściwe rozwiązanie wyglądało tak:Prowadzi to do prawidłowego, czystego wyniku bez błędów:
Uwaga: powinno to działać również w przypadku
exec
zorientowanych rozwiązań, ponieważ problem jest nadal ten sam (konkurs tłumaczy Bash i Python).Uwaga 2: można by obejść ten problem, zastępując niektóre
\n
innymi,;
ale to nie zadziała w żadnym momencie (w zależności od konstrukcji Pythona), podczas gdy moje rozwiązanie pozwala zawsze na "jednowierszowe" dowolne fragmenty klasycznego wielowierszowego programu w Pythonie.Uwaga 3: oczywiście, gdy jest to jedna linijka, zawsze należy zadbać o spacje i wcięcia w Pythonie, ponieważ w rzeczywistości nie jesteśmy tutaj ściśle "jednowierszowi", ALE robimy właściwe mieszane zarządzanie
\n
sekwencją ucieczki między bashem i Pythonem . W ten sposób możemy sobie poradzić z każdym fragmentem klasycznego wielowierszowego programu w Pythonie. Przykład rozwiązania również to ilustruje.źródło
Mieszasz wiele rzeczy, co utrudnia odpowiedź na twoje pytanie. Krótka odpowiedź brzmi: O ile wiem, to, co chcesz zrobić, jest po prostu niemożliwe w Pythonie - nie bez powodu!
Dłuższą odpowiedzią jest to, że jeśli chcesz rozwijać się w Pythonie, powinieneś czuć się bardziej komfortowo z Pythonem. Rozumienie nie jest trudne do odczytania. Możesz nie być przyzwyczajony do ich czytania, ale musisz się do tego przyzwyczaić, jeśli chcesz zostać programistą Pythona. Jeśli istnieje język, który lepiej odpowiada Twoim potrzebom, wybierz ten. Jeśli wybierzesz Pythona, bądź przygotowany na rozwiązywanie problemów w Python sposób. Oczywiście możesz walczyć z Pythonem, ale to nie będzie zabawne! ;-)
A jeśli powiesz nam, jaki jest twój prawdziwy problem, możesz nawet uzyskać odpowiedź w języku Python. „Uzyskanie czegoś w jednej linii” zwykle nie jest problemem programistycznym.
źródło
To możliwe ;-)
W Pythonie możesz robić bardzo brzydkie rzeczy, takie jak:
która jest funkcją dla szyfrowania rot13 / cesa w jednej linii z 99 znakami.
źródło
Oto przykład:
for i in range (80, 90): print (i, end = "") if (i! = 89) else print (i)
Wyjście: 80 81 82 83 84 85 86 87 88 89
źródło