Code: Alles auswählen
def zeige(namen):
print namen.__namen__, '=', namen #FALSCH
Code: Alles auswählen
a=5*3
zeige(a)
Code: Alles auswählen
namen = 15
ausgedruckt wird. Ist so etwas überhaupt möglich?
Code: Alles auswählen
def zeige(namen):
print namen.__namen__, '=', namen #FALSCH
Code: Alles auswählen
a=5*3
zeige(a)
Code: Alles auswählen
namen = 15
Code: Alles auswählen
def zeige(namen):
print 'namen =', namen
Code: Alles auswählen
zeige(42)
xs = [42]
zeige(xs[0])
a = 42
b = a
zeige(a)
zeige(b)
Code: Alles auswählen
def zeige(namen):
print namen.__namen__, '=', namen #FALSCH
Code: Alles auswählen
abcdefghijklmnopqrstuvwxyz = 5*3
zeige(abcdefghijklmnopqrstuvwxyz)
Code: Alles auswählen
abcdefghijklmnopqrstuvwxyz = 15
Code: Alles auswählen
print 'abcdefghijklmnopqrstuvwxyz =', abcdefghijklmnopqrstuvwxyz
Code: Alles auswählen
zeige(42)
Code: Alles auswählen
42 = 42
Ja das ist es, das Argument ist aber das Objekt selbst und nicht sein Name.Goswin hat geschrieben:aber: ich will ja nicht auf einen beliebigen Namen des Objektes zugreifen, sondern auf das Aufrufe-Argument einer Funktion, und das sollte ja eindeutig bestimmt sein!
Da gibt es keine Referenzierung die es abzufangen gäbe.Ich möchte die Referenzierung irgendwie abfangen, bevor sie stattfindet. So etwas wäre nützlich, da ich dann nicht:.
Ja du siehst das falsch, was du da als Argument übergibt, ist das tatsächlich das "Objekt 42", was in diesem Fall übrigens keinen Namen hat(die 42 ist ein Literal).Goswin hat geschrieben:erwartet. Was ich als Argument eingebe (also hier '42') kann doch unmöglich das Objekt selber sein, sondern höchstens der String '42'. Oder sehe ich das Ganze falsch?
Code: Alles auswählen
abcdefgh = 3*5
zeige('abcdefgh')
Code: Alles auswählen
zeige(abcdefgh)
Code: Alles auswählen
def zeige(name): print '%s = %s' % ( name, eval(name) )
Code: Alles auswählen
def zeige(name):
print '%s = %s' % (name, eval(name))
def test():
a = 42 + 23
zeige('a')
test()
Code: Alles auswählen
import inspect
def print_caller_argument_values():
caller = inspect.currentframe().f_back
name = inspect.stack()[1][3]
print name + inspect.formatargvalues(*inspect.getargvalues(caller))
def foo(bar, baz='foo'):
print_caller_argument_values()
foo('hallo')
# >> foo(bar='hallo', baz='foo')