help () 출력에서 ​​슬래시는 무엇을 의미합니까?


148

닫는 괄호 앞에 /파이썬 3.4의 help출력 에서 의미 하는 것은 무엇입니까 range?

>>> help(range)
Help on class range in module builtins:

class range(object)
 |  range(stop) -> range object
 |  range(start, stop[, step]) -> range object
 |  
 |  Return a virtual sequence of numbers from start to stop by step.
 |  
 |  Methods defined here:
 |  
 |  __contains__(self, key, /)
 |      Return key in self.
 |  
 |  __eq__(self, value, /)
 |      Return self==value.

                                        ...

답변:


185

키워드 매개 변수로 사용할 수없는 매개 변수위치 전용 매개 변수 의 끝을 나타냅니다 . Python 3.8 이전에는 이러한 매개 변수를 C API에서만 지정할 수있었습니다.

이는 순수 파이썬 함수에서 위치 인수로 할 있는 키워드 인수 ( )가 아닌 위치 ( ) 로만 key인수를 __contains__전달할 수 있음을 의미합니다 .range(5).__contains__(3)range(5).__contains__(key=3)

Argument Clinic 설명서 도 참조하십시오 .

Argument Clinic에서 모든 매개 변수를 위치 전용으로 표시하려면 /매개 변수 행과 동일하게 들여 쓰기하여 마지막 매개 변수 다음에 한 행만 추가하십시오 .

그리고 파이썬 FAQ에 (최근에 추가 된) :

함수의 인수 목록에서 슬래시는 그 앞에있는 매개 변수가 위치 전용임을 나타냅니다. 위치 전용 매개 변수는 외부에서 사용할 수있는 이름이없는 매개 변수입니다. 위치 전용 매개 변수를 허용하는 함수를 호출하면 인수는 해당 위치만을 기준으로 매개 변수에 매핑됩니다.

이 구문은 이제 버전 3.8 부터 Python 언어 사양의 일부입니다. PEP 570 – Python 위치 전용 매개 변수를 참조하십시오 . PEP 570 이전에이 구문은 파이썬에 향후 포함될 수 있도록 이미 예약되어 있습니다 ( PEP 457- 위치 전용 매개 변수 구문 참조) .

위치 전용 매개 변수는보다 깨끗하고 명확한 API로 이어질 수 있으며, 그렇지 않으면 C 전용 모듈의 순수 Python 구현을보다 일관되고 유지 관리하기가 쉬워지며 위치 전용 매개 변수는 처리가 거의 필요하지 않기 때문에 더 빠른 Python 코드로 이어집니다.


22

나는이 질문을 스스로했다. :) /원래 Guido가 여기 에서 제안한 것을 발견했습니다 .

다른 제안 : '/'사용은 어떻습니까? '키워드 인수'를 의미하는 '*'와 반대되는 개념이며 '/'는 새로운 문자가 아닙니다.

그리고 그의 제안 은 이겼다 .

허. 그것이 사실이라면 내 '/'제안이 이깁니다.

 def foo(pos_only, /, pos_or_kw, *, kw_only): ...

이것에 관한 매우 관련성이 높은 문서는 PEP 570 이라고 생각합니다 . 요약 섹션이 멋지게 보이는 곳.

요약

유스 케이스는 함수 정의에 사용할 매개 변수를 결정합니다.

 def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):

지침으로 :

이름이 중요하지 않거나 의미가없는 경우 위치 전용을 사용하고 항상 동일한 순서로 전달되는 인수가 몇 개만 있습니다. 이름에 의미가 있고 이름으로 명시 적으로 정의하여 함수 정의를보다 잘 이해할 수있는 경우 키워드 만 사용하십시오.


함수가로 끝나는 경우 /

def foo(p1, p2, /)

이것은 모든 기능적인 주장이 위치 적이라는 것을 의미합니다.


6
/토큰을 선택하면 "역의 역 동작 *"을 나타내 므로 파이썬은 약간 미쳤습니다. 일종의 공감각입니다.
Tomasz Gandor

6

슬래시 (/)는 위치 전용 인수가되기 전에 모든 인수를 나타냅니다. PEP 570 이 수락 된 후 파이썬 3.8에서 위치 전용 인수 기능이 추가되었습니다 . 처음에이 표기법은 PEP 457-위치 전용 매개 변수에 대한 표기법에 정의되어 있습니다.

함수 정의 이전의 매개 변수 앞뒤 슬래시 (/)는 위치 전용이며 슬래시 (/) 뒤에 오는 매개 변수는 구문에 따라 모든 종류가 될 수 있습니다. 인수는 함수를 호출 할 때의 위치만을 기반으로 위치 매개 변수에만 매핑됩니다. 키워드 (이름)로 위치 전용 매개 변수를 전달하는 것은 유효하지 않습니다.

다음 예제를 보자

def foo(a, b, / , x, y):
   print("positional ", a, b)
   print("positional or keyword", x, y)

위의 함수 정의에서 매개 변수 a와 b는 위치 전용이며 x 또는 y는 위치 또는 키워드 일 수 있습니다.

다음 함수 호출이 유효합니다

foo(40, 20, 99, 39)
foo(40, 3.14, "hello", y="world")
foo(1.45, 3.14, x="hello", y="world")

그러나 다음 함수 호출이 유효하지 않아 a, b가 키워드로 전달되는 위치 인수로 전달되지 않으므로 TypeError 예외가 발생합니다.

foo(a=1.45, b=3.14, x=1, y=4)

TypeError : foo ()에 키워드 인수로 전달 된 위치 전용 인수가 있습니다 : 'a, b'

파이썬의 많은 내장 함수는 키워드로 인수를 전달하는 것이 의미가없는 위치 전용 인수를 허용합니다. 예를 들어 내장 함수 len 은 하나의 위치 (전용) 인수 만 허용합니다. len (obj = "hello world")으로 len을 호출하면 가독성이 손상되는 경우 help (len)를 확인하십시오.

>>> help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

위치 만 매개 변수를 사용하면 기본 c / 라이브러리 기능을 쉽게 유지할 수 있습니다. API를 사용하는 클라이언트 코드를 손상시킬 위험없이 위치 전용 매개 변수의 매개 변수 이름이 나중에 변경 될 수 있도록합니다.

마지막으로, 위치 전용 매개 변수를 사용하면 변수 길이 키워드 인수에 이름을 사용할 수 있습니다. 다음 예를 확인하십시오.

>>> def f(a, b, /, **kwargs):
...     print(a, b, kwargs)
...
>>> f(10, 20, a=1, b=2, c=3)         # a and b are used in two ways
10 20 {'a': 1, 'b': 2, 'c': 3}

위치 전용 매개 변수가 더 좋습니다 . 파이썬의 함수 인수 유형 : 위치 전용 매개 변수

위치 전용 매개 변수 구문이 공식적으로 python3.8에 추가되었습니다. 체크 아웃 새로운 python3.8 무엇 - 위치 인수 만

PEP 관련 : PEP 570-파이썬 위치 전용 매개 변수

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.