Eu não tinha certeza de qual título refletir exatamente sobre essa questão, a codificação do golfe parece apropriada se for um pouco inespecífica.
Conheço um pouco de compreensão em python, mas elas parecem muito difíceis de 'ler'. Do meu ponto de vista, uma compreensão pode realizar o mesmo que o código a seguir:
for i in range(10): if i == 9: print('i equals 9')
Esse código é muito mais fácil de ler do que como as compreensões atualmente funcionam, mas notei que você não pode ter dois ':' em uma linha ... isso também me traz ...
minha pergunta:
Existe alguma maneira de obter o exemplo a seguir em ONE LINE.
try:
if sam[0] != 'harry':
print('hello', sam)
except:
pass
Algo assim seria ótimo:
try: if sam[0] != 'harry': print('hellp', sam)
except:pass
Mas, novamente, encontro o ':' conflitante: eu também adoraria saber se existe uma maneira de executar o try (ou algo parecido) sem, exceto, parece totalmente inútil o que eu preciso colocar, exceto: passe lá. é uma linha desperdiçada.
Obrigado pela sua contribuição ... e aqui tem um smiley : D
\n
usar espaços para recuos.Respostas:
Infelizmente, o que você deseja não é possível com o Python (o que torna o Python praticamente inútil para programas de uma linha de comando). Mesmo o uso explícito de parênteses não evita a exceção de sintaxe. Você pode se safar com uma sequência de instruções simples, separadas por ponto e vírgula:
Mas assim que você adiciona uma construção que introduz um bloco recuado (como
if
), você precisa da quebra de linha. Além disso,é legal e pode se aproximar do que você deseja.
Quanto à
try ... except
coisa: seria totalmente inútil sem oexcept
.try
diz "Quero executar esse código, mas pode gerar uma exceção". Se você não se importa com a exceção, deixe de lado otry
. Mas assim que você o coloca, você está dizendo "Quero lidar com uma possível exceção". Opass
então diz que você deseja não lidar com isso especificamente. Mas isso significa que seu código continuará sendo executado, o que não aconteceria de outra forma.fonte
try:
: As regras de sintaxe do Python simplesmente não permitem que você se safe de uma única cláusula "try" sem a devida cláusula "exceto". O que eu faço é agrupar a tentativa, exceto na própria função, e chamo isso. Comoif (checkint(s))...
edef checkint(s): try: int(s)\nreturn True\nexcept: return False
.python -c "exec\"print 'A' \nfor i in 1,2,3: print i \""
Você pode usar a instrução exec incorporada, por exemplo:
Onde
\n
é uma nova linha e\t
é usada como recuo (uma guia).Além disso, você deve contar os espaços que usa, para que seu recuo corresponda exatamente.
No entanto, como todas as outras respostas já disseram, é claro que isso só deve ser usado quando você realmente precisa colocá-lo em uma linha.
exec
é uma afirmação bastante perigosa (especialmente ao criar um aplicativo da web), pois permite a execução de código Python arbitrário.fonte
exec("try: \n if sam[0] != 'harry': print('hello', sam) \nexcept: pass")
mais agradável :)Eu recomendo não fazer isso ...
O que você está descrevendo não é uma compreensão.
Guia de Estilo PEP 8 para código Python , que eu não recomendo, tem a dizer sobre as demonstrações compostos:
Aqui está uma amostra de compreensão para fazer a distinção:
fonte
Sim, este post tem 8 anos, mas no caso de alguém aparecer aqui também procurando uma resposta: agora você pode usar ponto e vírgula. No entanto, você não pode usar staments if / elif / else, loops for / while e não pode definir funções. O principal uso disso seria ao usar módulos importados, nos quais você não precisa definir nenhuma função ou usar qualquer instrução if / elif / else / for / while / loops.
Aqui está um exemplo que pega o artista de uma música, o nome da música e procura o gênio pela letra:
fonte
Eu não incentivo isso, mas digamos que você esteja na linha de comando, você não tem nada além de Python e você realmente precisa de uma linha, você pode fazer isso:
O que estamos fazendo aqui é pré-processamento
\n
antes de avaliar o código Python.Isso é super hacky! Não escreva código como este.
fonte
talvez com "e" ou "ou"
após falsa necessidade de escrever "ou"
depois da verdadeira necessidade de escrever "e"
gostar
resultado:
ou talvez como
cheguei aqui pesquisando no google "como colocar várias declarações em uma linha python", não responde a pergunta diretamente, talvez alguém precise disso.
fonte
Para uma
python -c
solução orientada, e desde que você use o shell Bash, sim, você pode ter uma sintaxe simples de uma linha, como neste exemplo:Suponha que você gostaria de fazer algo assim (muito semelhante à sua amostra, incluindo
except: pass
instruções):Isso NÃO funcionará e produzirá este erro:
Isso ocorre porque a competição entre Bash e Python Interpretação de
\n
seqüências de escape. Para resolver o problema, pode-se usar a$'string'
sintaxe do Bash para forçar a\n
interpretação do Bash ANTES da interpretação do Python. Para tornar o exemplo mais desafiador, adicionei umaend=..\n..
especificação típica do Python na chamada de impressão do Python: no final, você poderá obter as duas\n
interpretações do bash e do Python trabalhando juntos, cada um no seu texto de preocupação. Então, finalmente, a solução adequada é assim:Isso leva à saída limpa adequada sem erros:
Nota: isso deve funcionar bem com
exec
soluções orientadas, porque o problema ainda é o mesmo (competição de intérpretes Bash e Python).Nota 2: é possível solucionar o problema substituindo alguns
\n
por alguns,;
mas ele não funcionará a qualquer momento (dependendo das construções do Python), enquanto minha solução permite sempre "uma linha" em qualquer parte do programa clássico de várias linhas do Python.Nota 3: é claro que, quando for alinhado, sempre é necessário cuidar dos espaços e do recuo do Python, porque na verdade não estamos estritamente "alinhados" aqui, MAS realizando um gerenciamento misto adequado da
\n
sequência de escape entre o bash e o Python . É assim que podemos lidar com qualquer parte do clássico programa Python multilinhas. A amostra da solução ilustra isso também.fonte
Você está misturando muitas coisas, o que dificulta a resposta à sua pergunta. A resposta curta é: até onde eu sei, o que você quer fazer não é possível em Python - por um bom motivo!
A resposta mais longa é que você deve se sentir mais confortável com o Python, se quiser desenvolver em Python. Compreensões não são difíceis de ler. Você pode não estar acostumado a lê-los, mas precisa se acostumar com isso, se quiser ser um desenvolvedor de Python. Se houver um idioma que atenda melhor às suas necessidades, escolha aquele. Se você escolher Python, esteja preparado para resolver problemas de maneira pitônica. Claro que você é livre para lutar contra o Python, mas não será divertido! ;-)
E se você nos disser qual é o seu verdadeiro problema, poderá até obter uma resposta pitônica. "Colocar algo em uma linha" geralmente não é um problema de programação.
fonte
É realmente possível ;-)
Você pode fazer coisas muito feias em python como:
que é função para criptografia rot13 / cesa em uma linha com 99 caracteres.
fonte
Aqui está um exemplo:
para i no intervalo (80, 90): print (i, end = "") if (i! = 89) else print (i)
Saída: 80 81 82 83 84 85 86 87 88 89
fonte