Wie kann man neue Scopes in Python schaffen?

In vielen Sprachen (und Orten) gibt es eine schöne Praxis der Schaffung von lokalen Bereichen durch die Schaffung eines Blocks wie folgt.

void foo() { ... Do some stuff ... if(TRUE) { char a; int b; ... Do some more stuff ... } ... Do even more stuff ... } 

Wie kann ich dies in Python implementieren, ohne den unerwarteten Einzugsfehler zu bekommen und ohne irgendeine Art von True: Tricks zu benutzen

9 Solutions collect form web for “Wie kann man neue Scopes in Python schaffen?”

In Python ist Scoping von drei Arten: global, lokal und Klasse. Sie können spezialisierte Wörterbücher "scope" erstellen, um an exec / eval () zu übergeben. Darüber hinaus können Sie verschachtelte Bereiche verwenden (definieren eine Funktion in einem anderen). Ich fand diese genug in all meinem Code.

Wie Douglas Leeder bereits sagte, der Hauptgrund, es in anderen Sprachen zu benutzen, ist das Variable Scoping und das passiert nicht wirklich in Python. Darüber hinaus ist Python die lesbarste Sprache, die ich je benutzt habe. Es würde gegen das Korn der Lesbarkeit gehen, um so etwas wie wahre Tricks zu tun (was du sagst, du willst es vermeiden). In diesem Fall denke ich, dass die beste Wette ist, Ihren Code in mehrere Funktionen umzuwandeln oder einen einzigen Bereich zu verwenden. Ich denke, dass die verfügbaren Scopes in Python ausreichend sind, um jede Eventualität zu decken, so dass lokale Scoping nicht wirklich notwendig sein sollte.

Ich hoffe das hilft.

Warum willst du trotzdem neue Scopes in Python schaffen?

Der normale Grund, es in anderen Sprachen zu tun, ist ein variables Scoping, aber das passiert nicht in Python.

 if True: a = 10 print a 

Ich würde das als ein klares Zeichen sehen, dass es Zeit ist, eine neue Funktion zu schaffen und den Code zu umgestalten. Ich kann keinen Grund sehen, so einen neuen Bereich zu schaffen. Irgendein Grund im Sinn?

Wenn du nur Temp-Variablen erstellen willst und sie nach der Verwendung von Müll werden lassen kannst, kannst du sie benutzen

 del varname 

Wenn du sie nicht mehr willst.

Wenn es nur für Ästhetik, könnten Sie Kommentare oder zusätzliche Zeilenumbrüche, keine zusätzliche Einrückung, though.

Ein Bereich ist eine Textregion eines Python-Programms, in dem ein Namespace direkt zugänglich ist. "Direkt zugänglich" bedeutet hier, dass ein unqualifizierter Verweis auf einen Namen versucht, den Namen im Namensraum zu finden …

Bitte lesen Sie die Dokumentation und klären Sie Ihre Frage.

Btw, du brauchst nicht, if(TRUE){} in C, ein einfaches {} genügt.

aktualisieren

Diese Antwort ist falsch. with Anweisung beschränkt nicht den Umfang; Es erlaubt Ihnen nur, sich aufzuräumen, wenn Sie aus dem Geltungsbereich austreten (obwohl Sie das Objekt auslösen können, nachdem Sie nach dem Verlassen zugegriffen haben).


Je nach Fall können Sie with Aussage :

 with Cat() as cat, Cake() as cake: cat.eat(cake) 

ist äquivalent zu

 # scope begin cat = Cat() cake = Cake() cat.eat(cake) # scope end 
 def a(): def b(): pass b() 

Wenn ich nur eine zusätzliche Einrückung wünsche oder Debugging habe, werde ich es verwenden if True:

Variablen im Listenverständnis (Python 3+) und Generatoren sind lokal:

 >>> i = 0 >>> [i+1 for i in range(10)] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> i 0 

Aber warum genau brauchst du das?

Python hat genau zwei Bereiche, lokal und global. Variablen, die in einer Funktion verwendet werden, sind im lokalen Bereich, egal, welche Einrückungsstufe sie erstellt wurden. Das Aufrufen einer verschachtelten Funktion hat die Wirkung, die Sie suchen.

 def foo(): a = 1 def bar(): b = 2 print a, b #will print "1 2" bar() 

Wie immer auch immer, ich muss Sie fragen, warum Sie einen begrenzten Bereich innerhalb einer Funktion erstellen möchten.

  • Warum können Funktionen in Python-Druckvariablen im Umschließungsbereich funktionieren, können sie aber nicht in der Zuordnung verwenden?
  • Scoping in Python 'für' Schleifen
  • Zweifel über python variablen Bereich
  • Was bedeutet Umfang
  • Generierung von Funktionen innerhalb der Schleife mit Lambda-Ausdruck in Python
  • Warum ist der Ort zum Zeitpunkt der Kompilierung bestimmt?
  • "Lokale Variable referenziert vor Zuordnung" - nur Funktionen?
  • Mit einer Variablen in einem Versuch, Fang, endgültige Aussage, ohne es draußen zu erklären
  • UnboundLocalError bei der Manipulation von Variablen ergibt inkonsistentes Verhalten
  • Wie kann man Variablen eines anderen Bereichs ändern?
  • Kurze Beschreibung der Scoping Regeln?
  • Python ist die beste Programmiersprache der Welt.