매개 변수가 n 인 메소드가 있습니다. 나는 예컨대 :모든 기본 매개 변수 값을 없음으로 설정하는 방법
def x(a=None,b=None,c=None.......z=None):
이 방법 내장 어떤 한 번 방법을 쓰는 동안 그들은 없음으로 기본 설정되지 않은 경우 없음에 대한 모든 매개 변수 값을 설정할 수 있는가, None
모든 기본 매개 변수 값을 설정하려면?
매개 변수가 n 인 메소드가 있습니다. 나는 예컨대 :모든 기본 매개 변수 값을 없음으로 설정하는 방법
def x(a=None,b=None,c=None.......z=None):
이 방법 내장 어떤 한 번 방법을 쓰는 동안 그들은 없음으로 기본 설정되지 않은 경우 없음에 대한 모든 매개 변수 값을 설정할 수 있는가, None
모든 기본 매개 변수 값을 설정하려면?
, 당신은 __defaults__
설정할 수 있습니다
def foo(a, b, c, d):
print (a, b, c, d)
# foo.__code__.co_varnames is ('a', 'b', 'c', 'd')
foo.__defaults__ = tuple(None for name in foo.__code__.co_varnames)
foo(b=4, d=3) # prints (None, 4, None, 3)
나는 그것에 대한 어떤 속성이 있음을 알았지 만 나는 그것이 작동하도록 함수를 재 컴파일해야한다고 생각했다. 그건 꽤 똑똑 하네. – MSeifert
문자 그대로 모든 인수에 None
을 기본값으로 추가하려면 장식자 방식이 필요합니다. 그것은 단지 다음 inspect.signature
사용할 수 있습니다 파이썬 3에 관하여 경우 수동으로 서명을 변경하기 때문에
def function_arguments_default_to_None(func):
# Get the current function signature
sig = inspect.signature(func)
# Create a list of the parameters with an default of None but otherwise
# identical to the original parameters
newparams = [param.replace(default=None) for param in sig.parameters.values()]
# Create a new signature based on the parameters with "None" default.
newsig = sig.replace(parameters=newparams)
def inner(*args, **kwargs):
# Bind the passed in arguments (positional and named) to the changed
# signature and pass them into the function.
arguments = newsig.bind(*args, **kwargs)
arguments.apply_defaults()
return func(**arguments.arguments)
return inner
@function_arguments_default_to_None
def x(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z):
print(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z)
x()
# None None None None None None None None None None None None None None
# None None None None None None None None None None None None
x(2)
# 2 None None None None None None None None None None None None None
# None None None None None None None None None None None None
x(q=3)
# None None None None None None None None None None None None None None
# None None 3 None None None None None None None None None
그러나 그런 식으로 당신은 기능에 대한 자기 반성을 잃어 버리게된다.
하지만 문제를 완전히 해결하거나 문제를 완전히 예방할 수있는 방법이 더 있다고 생각됩니다.
일반 함수의
그래, 방법의 많은 것을 달성 할 수 있지만, 모두가 "단점"어떤 종류의와 함께 올 것이다 아마 거기에 (당신이하지 않는 이상 경우 IDE 레벨에서 수행), 예를 들어 내성을 심각하게 제한 할 수 있습니다. – MSeifert
내가 아는 한 멀지 만 처리 할 장식자를 쓸 수있다. – Pythonist
내 질문은이 질문에서 온다. https://stackoverflow.com/questions/46025154/how-to-pass-pandas-dataframe-columns-as- kwargs/46025394 # 46025394. 나는 아무 것도 쓰지 않아야했다. 그렇게 쉬운 방법? – Dark