dict parameter mit list member verschwindet einfach

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
anonym44

Hallo Cracks,

ich habe folgendes Problem:

def func_print(p):
print p

def func(p):
func_print(p)

###
para1 = dict('id' : 1)
func(para1)
Ausgabe:
{'id' : 1}
funktioniert einwandfrei.



folgender QC aber nicht:

def func_print(p):
print p

def func(p):
func_print(p)


###
para1 = dict('id' : [1, 2])
func(para1)
Ausgabe:
None
:K
Zuletzt geändert von anonym44 am Montag 9. Mai 2016, 08:19, insgesamt 3-mal geändert.
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Amerika_befreie_uns hat geschrieben:

Code: Alles auswählen

para1 = dict('id' : 1) 
def func(para1):
    print para1 #('id' : 1)
funktioniert einwandfrei.
In welcher Programmiersprache? Schon die erste Zeile sollte dir in Python einen Syntax Error liefern.
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Vielleicht hat er ja eine Funktion Namens dict geschrieben, welche ohne return Wert arbeitet.
Dann wäre alles Korrekt.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein, waere es nicht. Frei stehende Paare mit Doppelpunkt gibt es nicht.

Code: Alles auswählen

>>> def foo(*args):
...     pass
...
>>> foo(a:10)
  File "<stdin>", line 1
    foo(a:10)
         ^
SyntaxError: invalid syntax
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Den Doppelpunkt hab ich total außer Acht gelassen. Stimmt natürlich.

Wieso meckert er die Variable a bei dir nicht an?
Demnach ist das ja kein Syntaxfehler und tritt erst zur Laufzeit auf?
Oder geht der Parser die Zeile von hinten nach vorne durch?




@Threadersteller:
###
para1 = dict({'id': [1, 2]})
func(para1)
BlackJack

@sebastian0202: __deets__ hat keinen Modulquelltext gezeigt, sondern die Ein- und Ausgaben in einer Python-Shell. Da geht der Compiler nicht erst über alle Eingaben. Kann er ja auch gar nicht, denn er kann ja nicht in die Zukunft schauen was als nächstes eingegeben wird.
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Ja, konnte das eben nachvollziehen. Der Syntaxfehler ploppt eben vor dem NameError auf.
Ist ja auch verständlich.
anonym44

Habe mich leicht verschrieben:
mit dict ist {} gemeint.
ich habe folgendes Problem:

def func_print(p):
print p

def func(p):
func_print(p)

###
para1 = {'id' : 1}
func(para1)
Ausgabe:
{'id' : 1}
funktioniert einwandfrei.



folgender QC aber nicht:

def func_print(p):
print p

def func(p):
func_print(p)


###
para1 = {'id' : [1, 2]}
func(para1)
Ausgabe:
None
:K
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Amerika_befreie_uns: Du hast irgendetwas anderes gemacht. Hier funktionierts:

Code: Alles auswählen

>>> def func_print(p):
...     print p
... 
>>> def func(p):
...     func_print(p)
... 
>>> para1 = {'id' : [1, 2]}
>>> func(para1)
{'id': [1, 2]}
Antworten