2016-12-02 2 views
4
def func(): 
    something 

d = { 'func': func } 
d['func']() # callable 

d2 = { 'type': { 'func': func } } 
d2['type']['func']() # not callable 

d3 = { 'type': { 'func': func() } } 
d3['type']['func']() # callable 

Was ist unterschiedlich zwischen d und d2?Python verwenden Funktion in Multi-Dimension-Wörterbuch

Warum d3 ist aufrufbar und d2 ist nicht aufrufbar?

dieser Code ausführbar ist aber pycham Highlight d2'func ‚und sagt:‘ dict Objekt nicht aufrufbar ist

+2

Sowohl 'd2 ['func']' und 'd3 ['func']' sollten Fehler werfen. Sie greifen nicht vorhandene Schlüssel ('func'). Du meinst 'd2 ['type'] ['func']' und 'd3 ['type'] ['func']'? – Abdou

+0

Ihre letzten beiden Beispiele sollten nicht funktionieren. '" func "' ist kein direkter Schlüssel von 'dict()' –

+0

Entschuldigung, ich habe gerade aktualisiert. –

Antwort

0

eine Funktion in Python definieren wird es aufrufbar machen. Was es nach der Fertigstellung tut, ist nur relevant, wenn Sie es tatsächlich aufrufen (mit dem() -Operator). Ohne Definition einer return-Anweisung gibt die Funktion None zurück. Wie hier beschrieben: Python -- return, return None, and no return at all.

Wenn Sie die mitgelieferten Befehle ausführen, geht es in die Luft, sobald Sie versuchen, die Funktion func aufzurufen, da etwas nicht definiert ist. Ich befürchte, dass pycharm einige ungültige Hervorhebungen macht. d und d2 sind aufrufbar, d3 jedoch nicht. Da Sie beim Zuweisen von d3 func aufrufen, ist es hier fehlerhaft und d3 existiert nicht.

Python 2.7.12 (default, Oct 10 2016, 12:50:22) 
[GCC 5.4.0] on cygwin 
Type "help", "copyright", "credits" or "license" for more information. 
dlopen("/usr/lib/python2.7/lib-dynload/readline.dll", 2); 
import readline # dynamically loaded from /usr/lib/python2.7/lib-dynload/readline.dll 
>>> 
>>> def func(): 
...  something 
... 
>>> d = { 'func': func } 
>>> d['func']() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in func 
NameError: global name 'something' is not defined 
>>> 
>>> d2 = { 'type': { 'func': func } } 
>>> d2['type']['func']() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in func 
NameError: global name 'something' is not defined 
>>> 
>>> d3 = { 'type': { 'func': func() } } 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in func 
NameError: global name 'something' is not defined 
>>> d3['type']['func']() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'd3' is not defined 
Verwandte Themen