python3 키워드 전용 인수 ( *
)는 다음을 사용하여 python2.x에서 시뮬레이션 할 수 있습니다.**kwargs
다음 python3 코드를 고려하십시오.
def f(pos_arg, *, no_default, has_default='default'):
print(pos_arg, no_default, has_default)
및 그 동작 :
>>> f(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes 1 positional argument but 3 were given
>>> f(1, no_default='hi')
1 hi default
>>> f(1, no_default='hi', has_default='hello')
1 hi hello
>>> f(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() missing 1 required keyword-only argument: 'no_default'
>>> f(1, no_default=1, wat='wat')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() got an unexpected keyword argument 'wat'
이것은 내가 전환의 자유를 촬영했습니다 참고, 다음을 사용하여 시뮬레이션 할 수 있습니다 TypeError
에 KeyError
은 "이름 필수 인수"경우를, 너무 많은 일이 같은 예외 유형 있는지 확인도 할 수없는 것
def f(pos_arg, **kwargs):
no_default = kwargs.pop('no_default')
has_default = kwargs.pop('has_default', 'default')
if kwargs:
raise TypeError('unexpected keyword argument(s) {}'.format(', '.join(sorted(kwargs))))
print(pos_arg, no_default, has_default)
그리고 행동 :
>>> f(1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes exactly 1 argument (3 given)
>>> f(1, no_default='hi')
(1, 'hi', 'default')
>>> f(1, no_default='hi', has_default='hello')
(1, 'hi', 'hello')
>>> f(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in f
KeyError: 'no_default'
>>> f(1, no_default=1, wat='wat')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in f
TypeError: unexpected keyword argument(s) wat
레시피는 python3.x에서도 똑같이 작동하지만 python3.x 인 경우에는 피해야합니다.