Les anciennes versions de Python ne permettraient pas une simple déclaration unique après for ...:
if ...:
ou bloc similaire déclarations liminaires.
Je vois que l'on peut avoir plusieurs instructions simples sur la même ligne que l'une de celles-ci. Cependant, il existe diverses combinaisons qui ne fonctionnent pas. Par exemple, nous pouvons:
for i in range(3): print "Here's i:"; print i
... mais, d'autre part, nous ne pouvons pas:
for i in range(3): if i % 2: print "That's odd!"
Nous pouvons:
x=10
while x > 0: print x; x-=1
... mais nous pouvons 't:
x=10; while x > 0: print x; x-=1
... et ainsi de suite.
Dans tous les cas, tous ces éléments sont considérés comme extrêmement NON-pythoniques. Si vous écrivez un code comme celui-ci, alors l'expérience de Pythonistas aura probablement une vision faible de vos compétences.
Il est marginalement acceptable de combiner plusieurs instructions sur une ligne dans certains cas. Par exemple:
x=0; y=1
... ou même:
if some_condition(): break
... pour de simples break
continue
et même return
déclarations ou assigments.
En particulier si l'on a besoin d'utiliser une série de elif
on pourrait utiliser quelque chose comme:
if keystroke == 'q': break
elif keystroke == 'c': action='continue'
elif keystroke == 'd': action='delete'
# ...
else: action='ask again'
... vous pourriez ne pas agacer trop vos collègues. (Cependant, les chaînes de elif
comme ce cri doivent être refactorisées dans une table de répartition ...un dictionnaire qui pourrait ressembler plus:
dispatch = {
'q': foo.break,
'c': foo.continue,
'd': foo.delete
}
# ...
while True:
key = SomeGetKey()
dispatch.get(key, foo.try_again)()
Vous ne savez pas ce que vous cherchez ... pouvez-vous expliquer un peu plus? –
Python ne possède-t-il pas ces trucs lambda étranges qui vous permettent de mettre beaucoup plus sur une ligne? Je ne vais pas les utiliser, bien sûr. Je préfère l'ancienne façon de faire les choses :-) – paxdiablo
Je n'ai pas encore regardé lambda. Chaque fois que je vois ce mot dans une question, je clique rapidement sur un signet! – Federer