programing tip

사용하지 않는 함수 인수를 어떻게 표시 할 수 있습니까?

itbloger 2020. 12. 14. 07:56
반응형

사용하지 않는 함수 인수를 어떻게 표시 할 수 있습니까?


튜플을 "해체"할 때 _관심없는 튜플 요소를 나타내는 데 사용할 수 있습니다 . 예 :

>>> a,_,_ = (1,2,3)
>>> a
1

Python 2.x를 사용하여 함수 인수로 어떻게 동일하게 표현할 수 있습니까? 밑줄을 사용하려고했습니다.

>>> def f(a,_,_): return a
...
  File "<stdin>", line 1
SyntaxError: duplicate argument '_' in function definition

나는 또한 인수를 완전히 생략하려고 시도했습니다.

>>> def f(a,,): return a
  File "<stdin>", line 1
    def f(a,,): return a
        ^
SyntaxError: invalid syntax

같은 것을 달성하는 다른 방법이 있습니까?


사용하지 않는 인수로 수행하는 작업은 다음과 같습니다.

def f(a, *unused):
    return a

방금 생각한 재미있는 방법은 변수를 삭제하는 것입니다.

def f(foo, unused1, unused2, unused3):
    del unused1, unused2, unused3
    return foo

여기에는 많은 장점이 있습니다.

  • 사용하지 않는 변수는 위치 인수와 키워드 인수 모두로 함수를 호출 할 때 계속 사용할 수 있습니다.
  • 나중에 사용하기 시작하면 삭제되므로 사용할 수 없으므로 실수 할 위험이 적습니다.
  • 표준 파이썬 구문입니다.
  • PyCharm은 옳은 일을합니다!
  • PyLint는 불평하지 않으며 사용 delPyLint 매뉴얼 에서 권장하는 솔루션 입니다.

밑줄은 우리가 신경 쓰지 않는 것에 사용되며 * args의 *는 인수 목록을 나타냅니다. 따라서 * _를 사용하여 신경 쓰지 않는 목록을 나타낼 수 있습니다.

def foo(bar, *_):
    return bar

PyCharm의 수표도 통과합니다.


'_'를 접두어로 사용할 수 있으므로 pylint는 다음 매개 변수를 무시합니다.

def f(a, _b, _c):

args와 키워드 arg가 모두 있으면 다음을 사용해야합니다.

def f(a, *args, **kwargs):
    return a

나는 받아 들여진 대답이 나쁘다고 생각한다. 그러나 당신이 인수를 다루는 "Perl 방식"이라고 부르는 것을 사용한다면 여전히 작동 할 수있다 sub. 수동 인수 압축 해제 포함) :

함수에는 3 개의 인수가 있습니다. 이것이 호출되는 것입니다 (Duck 타이핑, 기억하십니까?). 따라서 다음을 얻을 수 있습니다.

def funfun(a, b, c):
    return b * 2

2 unused parameters. But now, enter improved larsmans' approach:

def funfun(*args):
    return args[1] * 2

And there go the warnings...

However, I still enjoy more the boxed's way:

def funfun(a, b, c):
    del a, c
    return b * 2

It keeps the self-documenting quality of parameter names. They're a feature, not a bug.

But, the language itself doesn't force you there - you could also go the other way around, and just let all your function have the signature (*args, **kwargs), and do the argument parsing manually every time. Imagine the level of control that gives you. And no more exceptions when being called in a deprecated way after changing your "signature" (argument count and meaning). This is something worth considering ;)

참고URL : https://stackoverflow.com/questions/10025680/how-can-i-denote-unused-function-arguments

반응형