Frohes neues Jahr. Zu Beginn des neuen Jahres habe ich Ihnen, Lehrer, etwas zu sagen.
Heben Sie im Python-Code Ihre Hand, wenn Sie den Code unter if \ _ \ _ name \ _ \ _ == '\ _ \ _ main \ _ \ _' schreiben.
So schreibt jemand Code unter if \ _ \ _ name \ _ \ _ == '\ _ \ _ main \ _ \ _'.
#! usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function, absolute_import
import sys
def say_args(kind, data_list):
print("kind:", kind, " data:", data_list)
if __name__ == '__main__':
args = sys.argv[1:]
assert args
kind = args[0].lower()
data_list = [x.lower() for x in args[1:]]
say_args(kind, data_list)
Leute, die solchen Code schreiben, Lehrer, werden nicht böse, also heben Sie Ihre Hand.
Haben Sie bemerkt, dass ein solcher Code ** den globalen Bereichsnamensraum ** verschmutzt **? Wenn Sie sich dessen bewusst sind und es vor dem Schreiben verstehen, können Sie Ihre Hand fallen lassen.
Ja, wenn \ _ \ _ name \ _ \ _ == '\ _ \ _ main \ _ \ _'Below der globale Bereich ist. Die dort definierten Variablen sind ** alle globalen Variablen **.
Im obigen Code werden `args```,`
kind, `` data_list
, die lokale Variablen sein sollen, zu globalen Variablen.
Daher führt das Schreiben des folgenden Codes nicht zu einem Fehler.
def say_args(kind, data_list):
print("kind:", kind, " data:", data_list)
#Es wird auf die globale Variable args verwiesen, was bei Verweisen auf undefinierte Argumente nicht zu einem Fehler führt
print("args: ", args)
Dies ist eine Quelle für lästige Fehler, kein Fehler bei direkter Ausführung, sondern ein Namensfehler beim Aufruf als Modul.
** Entlassen Sie also nicht die Sprachspezifikationen des Python-Lehrers. ** ** **
Dr. PyCharm ist ebenfalls wütend über diese Angelegenheit und sagt: "Shadows name'kind 'bilden den äußeren Bereich".
Wenn Sie Code unter if \ _ \ _ name \ _ \ _ == '\ _ \ _ main \ _ \ _' schreiben möchten, schließen Sie ihn in eine Funktion ein.
#! usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function, absolute_import
import sys
def main(args):
assert args
kind = args[0].lower()
data_list = [x.lower() for x in args[1:]]
say_args(kind, data_list)
def say_args(kind, data_list):
print("kind:", kind, " data:", data_list)
if __name__ == '__main__':
main(sys.argv[1:])
Der globale Bereichsnamensraum wird nicht durch das Umschließen der Hauptfunktion verschmutzt. Wenn Sie es in die Hauptfunktion einschließen, können Sie den Hauptprozess zu Beginn schreiben, wodurch die Sichtbarkeit des Codes verbessert wird.
Wenn Sie Python noch nicht kennen, können Sie es sicher in eine Funktion einbinden.
Wenn Sie sich wegen anderer Dinge Sorgen machen, verwenden Sie bitte Herrn PyCharm, der wie eine kleine Schwiegermutter ist, aber auf die schlechten Punkte des Take-Home-Codes hinweist. ~~ pyflask Sensei ~~ pyflakes Sensei und pylint Sensei sind in Ordnung, aber pylint Sensei ist strenger. (1/1 Korrektur: Es gibt keinen Pyflask-Lehrer, es war ein Fehler des Pyflakes-Lehrers)
Das ist alles, was der Lehrer sagen wollte.
Wenn Sie es dann als Modul verwenden möchten, können Sie eine nutzlose Hauptfunktion erstellen, wenn Sie sie in die Hauptfunktion einschließen.
[[Zusatzvorlesung] Wenn \ _ \ _ name \ _ \ _ == '\ _ \ _ main \ _ \ _', heben Sie bitte Ihre Hand](http://qiita.com/pashango2/ items / 3834221353e4d25e0d69)
Wir werden es als Antwort auf Herrn Knoguchis Kommentar korrigieren. Wenn Sie Korrekturen im Artikel vornehmen, ist es schwierig, den Artikel zu lesen, sodass er an das Ende des Satzes verschoben wurde.
** [Satz vor Korrektur] **
Im obigen Code ist `args```,`
kind, `` data_list
, die als lokale Variable gedacht ist, ~~ sogar die temporäre Variable `` `x``` ~~ global Es wird eine Variable.
def say_args(kind, data_list):
print("kind:", kind, " data:", data_list)
#Es wird auf eine globale Variable x verwiesen, die beim Verweisen auf ein undefiniertes x nicht zu einem Fehler führt
print("x: ", x)
`` `x```, das in der Einschlussnotation verwendet wird, ist keine globale Variable, sondern führt zu einem Fehler.
Es scheint jedoch keinen Fehler zu verursachen, wenn PyCharm ausgeführt wird, da PyCharm globale Frames für die Geschwindigkeit wiederverwendet. Es ist eine Lektion, dass es beim Überprüfen der Ergebnisse nicht nur darum geht, auf PyCharm zu laufen.
Ich möchte Herrn Knoguchi noch einmal danken. "Das Leck der Variablen zur Vervollständigung der Liste ist ein Problem beim erneuten Binden" im Kommentar ist einer der süchtig machenden Punkte in der Einschlussnotation. Lesen Sie daher auch den Kommentar.
Recommended Posts