Я не был уверен, под каким названием конкретно обдумывать этот вопрос, кодирование гольфа кажется уместным, хотя и немного неопределенным.
Я знаю кое-что в Python, но мне кажется, что их очень трудно «читать». На мой взгляд, понимание может дать то же самое, что и следующий код:
for i in range(10): if i == 9: print('i equals 9')
Этот код намного легче читать, чем то, как в настоящее время работают понимания, но я заметил, что у вас не может быть два ':' в одной строке ... это тоже подводит меня ...
мой вопрос:
Есть ли способ поместить следующий пример в ОДНУ СТРОКУ.
try:
if sam[0] != 'harry':
print('hello', sam)
except:
pass
Что-то вроде этого было бы здорово:
try: if sam[0] != 'harry': print('hellp', sam)
except:pass
Но снова я сталкиваюсь с противоречивым ':' Я также хотел бы знать, есть ли способ запустить try (или что-то в этом роде) без except, кажется совершенно бессмысленным, что мне нужно вставить except: pass in there. это потраченная впустую линия.
Спасибо за ваш вклад ... и вот смайлик : D
\n
s и используйте пробелы для отступов.Ответы:
К сожалению, то, что вы хотите, невозможно с Python (что делает Python почти бесполезным для однострочных программ командной строки). Даже явное использование круглых скобок не позволяет избежать синтаксического исключения. Вы можете обойтись последовательностью простых операторов, разделенных точкой с запятой:
for i in range(10): print "foo"; print "bar"
Но как только вы добавите конструкцию, которая вводит блок с отступом (например,
if
), вам понадобится разрыв строки. Также,for i in range(10): print "i equals 9" if i==9 else None
является законным и может приблизительно соответствовать тому, что вы хотите.
Что же касается
try ... except
вещей: Было бы совершенно бесполезно безexcept
.try
говорит: «Я хочу запустить этот код, но это может вызвать исключение». Если вас не волнует исключение, оставьтеtry
. Но как только вы его вставляете, вы говорите: «Я хочу обработать потенциальное исключение».pass
То говорит , что вы хотите , чтобы не справиться с этим специально. Но это означает, что ваш код будет продолжать работать, чего не было бы в противном случае.источник
try:
: Правила синтаксиса Python просто не позволят вам обойтись единственным предложением "try" без сопровождающего предложения "except". Что я делаю, так это оборачиваю try-except в собственную функцию и вызываю это вместо этого. Вродеif (checkint(s))...
иdef checkint(s): try: int(s)\nreturn True\nexcept: return False
.python -c "exec\"print 'A' \nfor i in 1,2,3: print i \""
Вы можете использовать встроенный оператор exec, например:
exec("try: \n \t if sam[0] != 'harry': \n \t\t print('hello', sam) \nexcept: pass")
Где
\n
символ новой строки и\t
используется как отступ (табуляция).Кроме того, вы должны подсчитать используемые пробелы, чтобы ваш отступ точно соответствовал.
Однако, как уже говорилось во всех других ответах, это, конечно, нужно использовать только тогда, когда вам действительно нужно поместить его в одну строку.
exec
- довольно опасный оператор (особенно при создании веб-приложения), поскольку он позволяет выполнять произвольный код Python.источник
exec("try: \n if sam[0] != 'harry': print('hello', sam) \nexcept: pass")
лучше :)Да, этому посту 8 лет, но если кто-то зайдет сюда и тоже ищет ответ: теперь вы можете просто использовать точки с запятой. Однако вы не можете использовать элементы if / elif / else для циклов / while и не можете определять функции. Основное использование этого будет при использовании импортированных модулей, где вам не нужно определять какие-либо функции или использовать какие-либо инструкции / циклы if / elif / else / for / while.
Вот пример, который берет исполнителя песни, название песни и ищет слова «гений»:
import bs4, requests; song = input('Input artist then song name\n'); print(bs4.BeautifulSoup(requests.get(f'https://genius.com/{song.replace(" ", "-")}-lyrics').text,'html.parser').select('.lyrics')[0].text.strip())
источник
Я рекомендую этого не делать ...
То, что вы описываете, не является пониманием.
PEP 8 Руководство по стилю для Python кодекс , который я действительно рекомендую, это сказать на составные операторы:
Вот пример понимания, чтобы различить:
>>> [i for i in xrange(10) if i == 9] [9]
источник
Я не поощряю это, но скажу, что вы работаете в командной строке, у вас нет ничего, кроме Python, и вам действительно нужен однострочник, вы можете сделать это:
python -c "$(echo -e "a='True'\nif a : print 1")"
Здесь мы делаем предварительную обработку
\n
перед оценкой кода Python.Это супер хаки! Не пишите такой код.
источник
может быть с "и" или "или"
после ложного нужно написать "или"
после истины нужно написать "и"
подобно
n=0 def returnsfalse(): global n n=n+1 print ("false %d" % (n)) return False def returnstrue(): global n n=n+1 print ("true %d" % (n)) return True n=0 returnsfalse() or returnsfalse() or returnsfalse() or returnstrue() and returnsfalse()
результат:
false 1 false 2 false 3 true 4 false 5
или может быть как
(returnsfalse() or true) and (returnstrue() or true) and ...
попал сюда, выполнив поиск в Google "как разместить несколько статусов в одной строке python", не отвечает на вопрос напрямую, может быть, это кому-то еще нужно.
источник
Для
python -c
ориентированного решения и при условии, что вы используете оболочку Bash, да, у вас может быть простой однострочный синтаксис, как в этом примере:Предположим, вы хотите сделать что-то подобное (очень похожее на ваш образец, включая
except: pass
инструкцию):python -c "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Это НЕ будет работать и приведет к этой ошибке:
File "<string>", line 1 from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n ^ SyntaxError: unexpected character after line continuation character `
Это связано с конкуренцией между интерпретацией
\n
управляющих последовательностей Bash и Python . Чтобы решить эту проблему, можно использовать$'string'
синтаксис Bash для принудительной\n
интерпретации Bash ПЕРЕД интерпретацией Python. Чтобы сделать пример более сложным, я добавил типичнуюend=..\n..
спецификацию Python в вызов Python print: в конце вы сможете получить ОБЕ\n
интерпретации от bash и Python, работающих вместе, каждая над своим фрагментом текста, вызывающим озабоченность. Итак, наконец, правильное решение выглядит так:python -c $'from __future__ import print_function\ntry:\n import numpy;\n print( numpy.get_include(), end="\\n" )\n print( "Hello" )\nexcept:pass\n' OUTPUT_VARIABLE __numpy_path
Это приводит к правильному чистому выводу без ошибок:
/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include Hello
Примечание: это должно работать и с
exec
ориентированными решениями, потому что проблема все та же (соревнование интерпретаторов Bash и Python).Примечание 2: можно было бы обойти проблему, заменив некоторые
\n
из них некоторыми,;
но это не будет работать в любое время (в зависимости от конструкций Python), в то время как мое решение позволяет всегда "однострочно" использовать любую часть классической многострочной программы Python.Примечание 3: конечно, при использовании одной строки нужно всегда заботиться о пробелах и отступах Python, потому что на самом деле мы здесь не строго «однострочны», НО делаем правильное смешанное управление
\n
escape-последовательностью между bash и Python . Вот как мы можем работать с любой частью классической многострочной программы Python. Пример решения также иллюстрирует это.источник
Вы смешиваете много вещей, поэтому сложно ответить на ваш вопрос. Короткий ответ: насколько я знаю, то, что вы хотите делать, просто невозможно в Python - не зря!
Более длинный ответ заключается в том, что вам следует привыкнуть к Python, если вы хотите разрабатывать на Python. Понимания читать несложно. Возможно, вы не привыкли их читать, но вам нужно привыкнуть к этому, если вы хотите стать разработчиком Python. Если есть язык, который лучше соответствует вашим потребностям, выберите его. Если вы выберете Python, будьте готовы решать проблемы питоническим способом. Конечно, вы можете сражаться против Python, но это будет не весело! ;-)
И если вы расскажете нам, в чем ваша настоящая проблема, вы даже можете получить питонический ответ. «Получение чего-либо в одну строку» для нас обычно не проблема программирования.
источник
Это реально возможно ;-)
# not pep8 compatible^ sam = ['Sam',] try: print('hello',sam) if sam[0] != 'harry' else rais except: pass
В python можно делать очень уродливые вещи, например:
def o(s):return''.join([chr(ord(n)+(13if'Z'<n<'n'or'N'>n else-13))if n.isalpha()else n for n in s])
которая является функцией шифрования rot13 / cesa в одну строку из 99 символов.
источник
Вот пример:
для i в диапазоне (80, 90): print (i, end = "") if (i! = 89) else print (i)
Выход: 80 81 82 83 84 85 86 87 88 89
источник