변수 개수의 인수를 함수에 전달할 수 있는가?
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에 적응하려면, 바꿔라.iteritems
로items
그리고 괄호를 추가한다.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
'Programing' 카테고리의 다른 글
구성 요소에서 "vuetify" 전환을 사용하는 방법 (0) | 2022.03.28 |
---|---|
Vue.js 라우터 링크가 업데이트되지 않음 (0) | 2022.03.28 |
vuejs 애니메이트 그리드에 있는 항목 나열 (0) | 2022.03.28 |
프로세스 가져오기 데이터 - RTK 쿼리/Redx 도구 키트/반응 (0) | 2022.03.27 |
Python 함수 정의에서 ->는 무엇을 의미하는가? (0) | 2022.03.27 |