En python, existe-t-il une différence entre, par exemple:
if text == 'sometext':
print(text)
if text == 'nottext':
print("notanytext")
et
if text == 'sometext':
print(text)
Elif text == 'nottext':
print("notanytext")
Je me demandais simplement si plusieurs if
s pouvaient causer des problèmes indésirables et s’il serait préférable d’utiliser Elif
s.
Plusieurs si signifie que votre code irait vérifier toutes les conditions de si, comme dans le cas d'Elif, si une condition satisfait, elle ne vérifierait pas d'autres conditions.
Un autre moyen simple de voir la différence entre l'utilisation de if et Elif est cet exemple ici:
def analyzeAge( age ):
if age < 21:
print "You are a child"
if age >= 21: #Greater than or equal to
print "You are an adult"
else: #Handle all cases were 'age' is negative
print "The age must be a positive integer!"
analyzeAge( 18 ) #Calling the function
>You are a child
>The age must be a positive integer!
Vous pouvez voir ici que lorsque 18 est utilisé comme entrée, la réponse est (étonnamment) 2 phrases. C'est faux. Ce ne devrait être que la première phrase.
C'est parce que les deux sont en cours d'évaluation. L'ordinateur les voit comme deux déclarations distinctes:
Le Elif résout ce problème et fait en sorte que les deux déclarations if «restent ensemble»:
def analyzeAge( age ):
if age < 21:
print "You are a child"
Elif age > 21:
print "You are an adult"
else: #Handle all cases were 'age' is negative
print "The age must be a positive integer!"
analyzeAge( 18 ) #Calling the function
>You are a child
def multipleif(text):
if text == 'sometext':
print(text)
if text == 'nottext':
print("notanytext")
def eliftest(text):
if text == 'sometext':
print(text)
Elif text == 'nottext':
print("notanytext")
text = "sometext"
timeit multipleif(text)
100000 loops, best of 3: 5.22 us per loop
timeit eliftest(text)
100000 loops, best of 3: 5.13 us per loop
Vous pouvez voir que Elif est légèrement plus rapide. Ce serait plus évident s'il y avait plus de ifs et plus d'élifs.
Voici une autre façon de penser à cela:
Disons que vous avez deux conditions spécifiques qu'une structure fourre-tout si/autre ne suffira pas:
Exemple:
J'ai un tableau de 3 X 3 tic-tac-toe et je veux imprimer les coordonnées des deux diagonales et non le reste des carrés.
Je décide d'utiliser et si/Elif structure à la place ...
for row in range(3):
for col in range(3):
if row == col:
print('diagonal1', '(%s, %s)' % (i, j))
Elif col == 2 - row:
print('\t' * 6 + 'diagonal2', '(%s, %s)' % (i, j))
La sortie est:
diagonal1 (0, 0)
diagonal2 (0, 2)
diagonal1 (1, 1)
diagonal2 (2, 0)
diagonal1 (2, 2)
Mais attendez! Je voulais inclure les trois coordonnées de la diagonale2 car (1, 1) fait également partie de la diagonale 2.
"Elif" a provoqué une dépendance avec le "si", de sorte que si le "si" d'origine était satisfait, "Elif" ne sera pas initié, même si la logique "Elif" remplissait également la condition.
Modifions le second "Elif" en "if" à la place.
for row in range(3):
for col in range(3):
if row == col:
print('diagonal1', '(%s, %s)' % (i, j))
if col == 2 - row:
print('\t' * 6 + 'diagonal2', '(%s, %s)' % (i, j))
Je reçois maintenant le résultat souhaité car les deux instructions «if» s’excluent mutuellement.
diagonal1 (0, 0)
diagonal2 (0, 2)
diagonal1 (1, 1)
diagonal2 (1, 1)
diagonal2 (2, 0)
diagonal1 (2, 2)
En fin de compte, le type ou le résultat que vous souhaitez obtenir déterminera le type de relation/structure conditionnelle que vous codez.
Dans votre exemple ci-dessus, il y a des différences, car votre deuxième code a mis en retrait le Elif, il se trouverait en réalité dans le bloc if et est syntaxiquement et logiquement incorrect dans cet exemple. .
Python utilise des indentations de ligne pour définir des blocs de code (la plupart des langages similaires à C utilisent {} pour entourer un bloc de code, mais python utilise des indentations de ligne). Par conséquent, lorsque vous codez, vous devez sérieusement considérer les indentions.
votre échantillon 1:
if text == 'sometext':
print(text)
Elif text == 'nottext':
print("notanytext")
les deux if et Elif sont indentés de la même manière, ils sont donc liés à la même logique. votre deuxième exemple:
if text == 'sometext':
print(text)
Elif text == 'nottext':
print("notanytext")
Elif est indenté de plus de if, avant qu'un autre bloc ne l'enveloppe, il est donc considéré à l'intérieur du bloc si. et comme à l'intérieur du if il n'y a pas d'autre if imbriqué, le Elif est considéré comme une erreur de syntaxe par Python interprète.
Elif
est juste une manière élégante d'exprimer else: if
,
Plusieurs if exécutent plusieurs branches après le test, alors que les elifs sont mutuellement exclusifs, exécutent une branche après le test.
Prenons les exemples de user2333594
def analyzeAge( age ):
if age < 21:
print "You are a child"
Elif age > 21:
print "You are an adult"
else: #Handle all cases were 'age' is negative
print "The age must be a positive integer!"
pourrait être reformulé comme suit:
def analyzeAge( age ):
if age < 21:
print "You are a child"
else:
if age > 21:
print "You are an adult"
else: #Handle all cases were 'age' is negative
print "The age must be a positive integer!"
L'autre exemple pourrait être:
def analyzeAge( age ):
if age < 21:
print "You are a child"
else: pass #the if end
if age > 21:
print "You are an adult"
else: #Handle all cases were 'age' is negative
print "The age must be a positive integer!"
Voici comment je décompose les instructions de flux de contrôle:
# if: unaffected by preceding control statements
def if_example():
if True:
print('hey')
if True:
print('hi') # will execute *even* if previous statements execute
imprimera hey
et hi
# Elif: affected by preceding control statements
def Elif_example():
if False:
print('hey')
Elif True:
print('hi') # will execute *only* if previous statement *do not*
affichera hi
seulement car l'instruction précédente évaluée à False
# else: affected by preceding control statements
def else_example():
if False:
print('hey')
Elif False:
print('hi')
else:
print('hello') # will execute *only* if *all* previous statements *do not*
va imprimer hello
parce que toutes les instructions précédentes n'ont pas été exécutées
Lorsque vous utilisez plusieurs variables if
, votre code retourne dans chaque instruction if
pour vérifier si l'expression convient à votre condition . .Mais l'utilisation de Elif
met fin au processus lorsque l'expression convient à l'un de vos problèmes.