C 또는 C ++에서 varargs를 사용하는 것과 비슷한 방식으로 :
fn(a, b)
fn(a, b, c, d, ...)
C 또는 C ++에서 varargs를 사용하는 것과 비슷한 방식으로 :
fn(a, b)
fn(a, b, c, d, ...)
답변:
예. 키워드*args
가 아닌 인수 로 사용할 수 있습니다 . 그러면 여러 개의 인수를 전달할 수 있습니다.
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)
보시다시피, 파이썬은 모든 인수와 함께 단일 튜플로 인수를 압축 해제 합니다.
키워드 인수 의 경우 Skurmedel의 답변에 표시된대로 키워드 인수를 별도의 실제 인수로 수락해야합니다 .
manyArgs(x = 3)
실패합니다 TypeError
. Skumedel의 답변은 이에 대한 해결책을 보여줍니다. 핵심은 함수의 일반 서명이 f(*list_args, **keyword_args)
(not f(*list_args)
)이라는 것입니다.
args
입니다 tuple
. 키워드 args를kwargs
의미 합니다 . 의 유형은 kwargs
입니다 dictionary
.
for arg in args:
통과 인수를 통해 반복을위한
소식을 추가하면 게시물이 해제됩니다.
여러 키-값 인수를 보낼 수도 있습니다.
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
그리고 당신은 두 가지를 혼합 할 수 있습니다 :
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
그것들은 순서대로 선언되고 호출되어야합니다. 즉, 함수 서명은 * args, ** kwargs이어야하고 그 순서대로 호출되어야합니다.
print a
로 print(a)
하고 kwargs.iteritems():
와 kwargs.items()
.
내가 할 수 있다면 Skurmedel의 코드는 파이썬 2 용입니다. 파이썬 3에 적용하려면 iteritems
로 변경 items
하고 괄호를 추가하십시오 print
. 그러면 나와 같은 초보자가 AttributeError: 'dict' object has no attribute 'iteritems'
다른 곳 으로 들어가는 것을 막을 수
있습니다 (예 : NetworkX의 write_shp ()를 사용하려고 할 때 오류“ 'dict'객체에 'iteritems'속성이 없습니다 ' ). 이것이 왜 발생하는지.
def myfunc(**kwargs):
for k,v in kwargs.items():
print("%s = %s" % (k, v))
myfunc(abc=123, efh=456)
# abc = 123
# efh = 456
과:
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
다른 우수한 게시물에 추가합니다.
때때로 당신은 인수의 수를 지정하지 않으 과 그들을 위해 키를 (사전에 전달 된 하나 개의 인수는 방법에 사용하지 않는 경우 컴파일러가 불평) 사용하려고합니다.
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
그럼 당신은 같은 일을 할 수 있습니다
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'})
____________
위의 코드가 출력됩니다
None None None
20 None 30
20 red 30
이것은 사전을 통해 변수 인수를 전달하는 것만 큼 좋습니다.
f = lambda **dic: ' '.join(dic.get(key, 'None') for key in 'abc')