Python >> Tutoriel Python >  >> Python Tag >> exec()

Comment exécuter plusieurs lignes dans une seule ligne Python à partir de la ligne de commande ?

Résumé  :Pour créer une ligne Python à partir de n'importe quel script Python multiligne, remplacez les nouvelles lignes par un caractère de nouvelle ligne '\n' et passez le résultat dans le exec(...) fonction. Vous pouvez exécuter ce script depuis l'extérieur (ligne de commande, shell, terminal) en utilisant la commande python -c "exec(...)" .

Problème :étant donné un script de code multiligne en Python. Comment exécuter ce script multi-lignes dans une seule ligne de code Python ? Comment le faire depuis la ligne de commande ?

Exemple :Supposons que vous ayez la boucle for suivante avec une instruction if imbriquée dans le corps de la boucle for. Vous voulez exécuter ceci en une seule ligne depuis votre ligne de commande ?

x = 10
for i in range(5):
    if x%2 == 0:
        print(i)
    else:
        print(x)
    x = x - 1

'''
0
9
2
7
4
'''

Le code affiche cinq nombres sur le shell. Il n'imprime que les valeurs impaires de x . Si x prend une valeur paire, il imprime la variable de boucle i .

Jetons un coup d'œil aux trois méthodes pour résoudre ce problème !

Méthode 1 :exec()

Vous pouvez écrire n'importe quel code source dans une chaîne et exécuter la chaîne en utilisant le exec() intégré fonction en Python. C'est peu connu, mais les pirates l'utilisent souvent pour regrouper du code malveillant sur une seule ligne apparemment inoffensive.

Si vous avez du code qui s'étend sur plusieurs lignes, vous pouvez le regrouper dans une chaîne d'une seule ligne en utilisant le caractère de saut de ligne '\n' dans votre chaîne :

# Method 1
exec('x = 10\nfor i in range(5):\n    if x%2 ==0: print(i)\n    else: print(x)\n    x = x-1')

Cet extrait de code à une ligne est sémantiquement équivalent à la boucle for imbriquée ci-dessus qui nécessite sept lignes de code ! Le résultat est le même :

'''
0
9
2
7
4
'''

Exercice :Supprimez la branche else de ce code. Quelle est la sortie ? Exécutez le code pour vérifier si vous aviez raison !

Méthode 2 :depuis la ligne de commande | python -c + exec()

Bien entendu, vous pouvez également exécuter ce code à partir de votre ligne de commande ou de votre shell Win/Linux/Mac.

Assurez-vous simplement d'utiliser le python -c préfixe, puis emballez le multiligne sur une seule ligne dans une valeur de chaîne qui est transmise en tant qu'argument au python programme.

Voici à quoi cela ressemble dans mon powershell Win 10 :

PS C:\Users\xcent> python -c "exec('x = 10\nfor i in range(5):\n    if x%2 ==0: print(i)\n    else: print(x)\n    x = x-1')"
0
9
2
7
4

Méthode 3 :Utiliser l'opérateur ternaire pour unifier le code

Bien sûr, vous pouvez également créer votre propre one-liner sémantiquement équivalent en utilisant un peu de créativité et des compétences Python One-Liner (par exemple, acquises en lisant mon livre "Python One-Liners" de NoStarch) !

Dans ce code, vous utilisez l'opérateur ternaire :

# Method 3
for i in range(5): print(10-i) if i%2 else print(i)

Vous pouvez facilement vous convaincre que le code fait la même chose en une seule ligne !

Livre Python One-Liners :maîtrisez d'abord la ligne unique !

Les programmeurs Python amélioreront leurs compétences en informatique avec ces lignes utiles.

Python One-Liners vous apprendra à lire et à écrire des « lignes simples » :des déclarations concises de fonctionnalités utiles regroupées dans une seule ligne de code. Vous apprendrez à décompresser et à comprendre systématiquement n'importe quelle ligne de code Python, et à écrire du Python éloquent et puissamment compressé comme un expert.

Les cinq chapitres du livre couvrent (1) les trucs et astuces, (2) les expressions régulières, (3) l'apprentissage automatique, (4) les principaux sujets de science des données et (5) les algorithmes utiles.

Des explications détaillées des one-liners introduisent les concepts clés de l'informatique etdéveloppez vos compétences en matière de codage et d'analyse . Vous découvrirez les fonctionnalités Python avancées telles que la compréhension de liste , tranchage , fonctions lambda , expressions régulières , carte et réduire fonctions et affectations de tranches .

Vous apprendrez également à :

  • Exploiter les structures de données pour résoudre des problèmes réels , comme utiliser l'indexation booléenne pour trouver des villes avec une pollution supérieure à la moyenne
  • Utiliser les bases de NumPy comme tableau , forme , axe , tapez , diffusion , indexation avancée , tranchage , tri , recherche , agrégation , et statistiques
  • Calculer des statistiques de base de tableaux de données multidimensionnels et les algorithmes K-Means pour l'apprentissage non supervisé
  • Créer davantage d'expressions régulières avancées en utilisant le regroupement et groupes nommés , anticipations négatives , caractères échappés , espaces blancs, jeux de caractères (et jeux de caractères négatifs ) et opérateurs gourmands/non gourmands
  • Comprendre un large éventail de sujets informatiques , y compris les anagrammes , palindromes , surensembles , permutations , factorielles , nombres premiers , Fibonacci chiffres, obscurcissement , recherche , et tri algorithmique

À la fin du livre, vous saurez comment écrire Python dans sa forme la plus raffinée , et créez de belles pièces concises d'"art Python" en une seule ligne.

Obtenez vos Python One-Liners sur Amazon !!

Humour de programmeur

Question: How did the programmer die in the shower? ☠️

Answer: They read the shampoo bottle instructions:
Lather. Rinse. Repeat.