Ähnlich wie bei der Verwendung von varargs in C oder C++:
fn(a, b)
fn(a, b, c, d, ...)
Ähnlich wie bei der Verwendung von varargs in C oder C++:
fn(a, b)
fn(a, b, c, d, ...)
Ja. Sie können die *args
als Nicht-Schlüsselwort Argument. Sie können dann eine beliebige Anzahl von Argumenten übergeben.
def manyArgs(*arg):
print "I was called with", len(arg), "arguments:", arg
>>> manyArgs(1)
I was called with 1 arguments: (1,)
>>> manyArgs(1, 2, 3)
I was called with 3 arguments: (1, 2, 3)
Wie Sie sehen können, wird Python auspacken die Argumente als ein einziges Tupel mit allen Argumenten.
Für Schlüsselwortargumente müssen Sie diese als separates Argument akzeptieren, wie in Antwort von Skurmedel .
Ich füge dem Beitrag von unwinds hinzu:
Sie können auch mehrere Schlüsselwert-Args senden.
def myfunc(**kwargs):
# kwargs is a dictionary.
for k,v in kwargs.iteritems():
print "%s = %s" % (k, v)
myfunc(abc=123, efh=456)
# abc = 123
# efh = 456
Und Sie können beides mischen:
def myfunc2(*args, **kwargs):
for a in args:
print a
for k,v in kwargs.iteritems():
print "%s = %s" % (k, v)
myfunc2(1, 2, 3, banan=123)
# 1
# 2
# 3
# banan = 123
Sie müssen in dieser Reihenfolge deklariert und aufgerufen werden, d.h. die Funktionssignatur muss *args, **kwargs lauten und in dieser Reihenfolge aufgerufen werden.
Wenn ich darf, ist der Code von Skurmedel für Python 2; um ihn an Python 3 anzupassen, ändern Sie iteritems
a items
und fügen Sie eine Klammer zu print
. Das könnte Anfänger wie mich davor bewahren, anzustoßen: AttributeError: 'dict' object has no attribute 'iteritems'
und an anderer Stelle suchen (z. B. Fehler " 'dict'-Objekt hat kein Attribut 'iteritems' " beim Versuch, die Funktion write_shp() von NetworkX zu verwenden ), warum dies geschieht.
def myfunc(**kwargs):
for k,v in kwargs.items():
print("%s = %s" % (k, v))
myfunc(abc=123, efh=456)
# abc = 123
# efh = 456
und:
def myfunc2(*args, **kwargs):
for a in args:
print(a)
for k,v in kwargs.items():
print("%s = %s" % (k, v))
myfunc2(1, 2, 3, banan=123)
# 1
# 2
# 3
# banan = 123
Ich schließe mich den anderen ausgezeichneten Beiträgen an.
Manchmal möchte man die Anzahl der Argumente nicht angeben und Schlüssel für sie verwenden wollen (der Compiler beschwert sich, wenn ein in einem Wörterbuch übergebenes Argument nicht in der Methode verwendet wird).
def manyArgs1(args):
print args.a, args.b #note args.c is not used here
def manyArgs2(args):
print args.c #note args.b and .c are not used here
class Args: pass
args = Args()
args.a = 1
args.b = 2
args.c = 3
manyArgs1(args) #outputs 1 2
manyArgs2(args) #outputs 3
Dann können Sie Dinge tun wie
myfuns = [manyArgs1, manyArgs2]
for fun in myfuns:
fun(args)
def f(dic):
if 'a' in dic:
print dic['a'],
pass
else: print 'None',
if 'b' in dic:
print dic['b'],
pass
else: print 'None',
if 'c' in dic:
print dic['c'],
pass
else: print 'None',
print
pass
f({})
f({'a':20,
'c':30})
f({'a':20,
'c':30,
'b':'red'})
____________
wird der obige Code Folgendes ausgeben
None None None
20 None 30
20 red 30
Dies ist so gut wie die Übergabe von variablen Argumenten mittels eines Wörterbuchs
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.