Programing

변수 개수의 인수를 함수에 전달할 수 있는가?

c10106 2022. 3. 28. 20:31
반응형

변수 개수의 인수를 함수에 전달할 수 있는가?

C 또는 C++에서 vargs를 사용하는 것과 유사한 방법:

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)

보다시피 파이썬은 모든 주장과 함께 하나의 튜플로서 그 주장들을 풀 것이다.

키워드 인수의 경우, 당신은 그것들을 별도의 실제 인수로 받아들여야 한다. 이는 스카르메델의 대답에서 볼 수 있다.

해제 포스트에 추가:

키 값 아그도 여러 개 보낼 수 있다.

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가 되어야 하고, 그 순서에 따라 호출되어야 한다.

스쿠르메델의 코드는 파이톤 2를 위한 것이다; 파이톤 3에 적응하려면, 바꿔라.iteritemsitems그리고 괄호를 추가한다.print나 같은 초보자가 부딪치는 것을 막을 수 있다.AttributeError: 'dict' object has no attribute 'iteritems'네트워크X의 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

이것은 사전을 통해 변수 인수를 전달하는 것과 같다.

이미 언급된 멋진 답변들 외에도, 그것을 다루는 또 다른 방법은 여러분이 직책별로 선택적으로 명명된 주장을 전달할 수 있다는 사실에 달려 있다.예를 들어,

def f(x,y=None):
    print(x)
    if y is not None:
        print(y)

수확량

In [11]: f(1,2)
1
2

In [12]: f(1)
1

참조URL: https://stackoverflow.com/questions/919680/can-a-variable-number-of-arguments-be-passed-to-a-function

반응형