2017-10-26 2 views
-2

In Python dir werden alle im Namespace definierten Namen angezeigt. Ich habe überprüft und es hat gut funktioniert. Aber wenn ich dir(function_name) benutzte, zeigte es nicht die Variablen an, die ich innerhalb der Funktion schuf. Warum?Liste der Variablen vom lokalen Gültigkeitsbereich

Hier ist ein Codebeispiel:

>>> def printHello(greetings): 
...  inside_func=2 
... 
>>> dir() 
['__builtins__', '__doc__', '__name__', '__package__', 'printHello',] 
>>> dir(printHello) 
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name'] 
+0

Es wäre besser, ein Buch zu öffnen, als eine Frage zu stellen, so früh in Ihrem Leben dev ... – Bouramas

+0

Aus der Dokumentation von ['dir '] (https://docs.python.org/3/library/functions.html#dir):" 'dir ([object])' Gibt ohne Argumente die Liste der Namen im aktuellen lokalen Bereich zurück. Mit einem Argument versuchen Sie, eine Liste gültiger Attribute für dieses Objekt zurückzugeben. " – Kendas

+1

Verwenden Sie Code-Block, um Ihren Code anstelle von Screenshot anzuzeigen, werfen Sie einen Blick auf diese [Artikel] (https://stackoverflow.com/editing-help) –

Antwort

0

Wie, warum dir(youfunc) lokale Vars nicht auflistet, dann ist es ganz einfach, weil als dir(obj) Listen obj ‚s dokumentiert Attribute und lokalen Vars sind keine Attribute der Funktionsobjekt

Außerhalb der Funktion selbst, können Sie eine Auflistung einer Funktion des lokalen Vars Namen mit yourfunc.func_code.co_varnames erhalten (beachten Sie, dass Argumente lokale Variablen sind):

def foo(bar): 
    baaz = 42 
print(foo.func_code.co_varnames) 

aber Sie werden nicht offensichtlich in der Lage sein, den Zugriff auf die lokale vars Werte von außerhalb der Funktion, da diese Werte nur existieren, wenn die Funktion ausgeführt wird.

innerhalb der Funktion können Sie die lokalen Vars erhalten locals() mit:

def foo(bar): 
    baaz = 42 
    print(locals()) 
Verwandte Themen