Ingore cette question Je n'ai clairement pas bien expliqué du tout et aucune des réponses ne semblait être sur le sujet pour ce que j'avais à l'esprit.
Dans l'exemple présenté ci-dessous, j'essaie de faire une boucle plus concise là où elle finira par ressembler à Dans l'exemple indiqué, le code imprimera Cependant, l'idée est la boucle que le code indiqué ( l (n) code>,
l * n code> ou quelque chose de similaire. p>
" bonjour " code> 5 fois (ou tout ce que je l'ai défini pour être), puis exécutez le code dans le
avec code> boucle, qui n'est pas inattendu. p>
passe code> dans ce cas). Comment puis-je remplacer
Imprimer ("Bonjour") CODE> avec le code écrit dans l'instruction with? C'est possible? Je suppose que ce n'est pas ce que doit être utilisé un
avec code> de l'instruction code>, y a-t-il une alternative? P>
class loop:
def __init__(self, loops):
self.loops = loops
def __enter__(self):
pass
def __exit__(self, *args):
pass
with loop(5):
print("This will loop 5 times")
with loop(10):
print("This will loop 10 times")
3 Réponses :
Je ne pense pas que vous puissiez boucler via le code à l'intérieur avec le bloc code>.
La chose la plus proche serait de passer Lambda en tant que deuxième paramètre.
def my_printer():
print("hello")
for _ in range(5):
my_printer()
Est-il possible pour vous d'élaborer sur la réponse? Cela fournit simplement une solution mais n'adore pas vraiment l'utilisateur de comprendre pourquoi cela fonctionne.
Je refuserais n'importe quel code comme celui-ci que j'ai vu dans un examen de code.
@ Enthus3D Il est juste un code légèrement modifié fourni dans la question. De mon point de vue, c'est assez simple et n'a besoin d'aucune explication. Vous pensez que cela nécessite une explication, n'hésitez pas à modifier la réponse, Stackoverflow permet à cela et je pense même encourage même.
@cheppner Je voudrais également bloquer ce code dans l'examen (mais pas "rejeter" si cela signifie quelque chose de différent). Bien que je pense que la question était de savoir comment réussir la fonction comme objet de première classe dans code> code> dans le but d'apprendre.
Je n'irais pas si loin de modifier votre réponse pour cela, je ne le souligne que de l'indiquer, vous savez donc que les gens peuvent le trouver moins sympathiques si vous donnez un bloc de code sans explication, car il leur permet de rechercher les différences eux-mêmes et pourraient les confondre.
Je conviens que votre réponse est définitivement adéquate pour répondre à la question de l'Asker, et c'est du code propre, je pense que cela aurait pu être mieux si vous aviez une explication.
Non, la question était de savoir comment accéder au corps d'un avec le bloc code> du gestionnaire de contexte (que vous ne pouvez pas faire). C'est une solution de contournement, mais cela ne signifie pas qu'il faut écrire du code comme celui-ci.
@ Enthus3d j'ai mis à jour la réponse. Je viens de remarquer qu'il veut utiliser avec le corps code> en boucle. Je ne pense pas que Python permet d'appeler directement le corps.
@cheppner Yep. Le code est mauvais. Mais la question n'était pas d'évaluer la qualité du code. Je crois que c'est plus à des fins d'apprentissage de vous trouver ce que vous pouvez faire avec Python.
J'éviterais de créer une classe du tout si vous voulez juste une boucle concise.
N'utilisez pas de boucle. P>
LOOP DEF (N): pour _ dans la plage (n): Imprimer ("Bonjour") P>
boucle (5) p>
alors cela imprimera 5 fois "Bonjour". P>
Existe-t-il un moyen de le faire plus «de manière dynamique», par exemple un module que vous pouvez importer cela le permettra? Définir une fonction défaite le point de réduire la quantité de code écrit.
pour _ dans la plage (n):
Imprimer ("Bonjour")
@Doot votre avec l (n): code> n'augagerait que 8 caractères via
pour _ dans la plage (5) code>, ignorant le code que vous devriez écrire à définir i>
l code> en premier lieu. Python fournit déjà une façon de concise, évidente i> de faire ce que vous voulez.
Écouter Cheppner ^^^
J'ai mis à jour la question à mesure que les fonctions ne seraient pas bien meilleures qu'une boucle, comme le dit Chepner
Pourquoi pas
pour _ dans la plage (5): code>?
Remplacement
__ non zéro __ code> et faire
tandis que la boucle (5): code>