>백엔드 개발 >파이썬 튜토리얼 >기능은 무슨 뜻인가요?

기능은 무슨 뜻인가요?

藏色散人
藏色散人원래의
2019-05-15 10:13:3023002검색

기능은 무슨 뜻인가요?

함수, 서브루틴을 나타내는 일반명사. 일부 프로그래밍 언어에서는 값을 반환하는 서브루틴이나 명령문을 나타냅니다. 일부 프로그래밍 언어에서는 키워드 역할을 합니다.

파이썬에서 함수는 매우 중요하고 일반적으로 클래스나 함수의 매개변수 정보를 얻습니다.

Python에서 함수는 일반적으로 다음 범주에 속합니다.

1. POSITIONAL_OR_KEYWORD

* 선언이 없으면 POSITIONAL_OR_KEYWORD 유형이 됩니다. POSITIONAL 위치를 통해 매개변수를 호출할 때 키워드 KEYWORD를 통해 매개변수를 전달할 수도 있습니다. 다음은 가장 간단한 예입니다.

def foo(a):
pass
# 位置传参调用
foo(1)
# 关键字传参调用
foo(a=1)

Second, VAR_POSITIONAL

두 번째는 * 접두사를 통해 선언된 가변 위치 매개변수입니다. *xxx 함수 매개변수 선언이 표시되는 경우(함수 호출이 아님! 선언 및 호출에는 두 가지 다른 의미) VAR_POSITIONAL 유형이어야 합니다. 의미 체계와 마찬가지로 이 유형의 매개변수는 POSITIONAL 위치를 통해서만 호출할 수 있습니다. 함수 내에서 VAR_POSITIONAL 유형의 매개변수는 튜플로 표시됩니다. 한 가지 주목할 점은 VAR_POSITIONAL 유형은 오류 보고 없이 매개변수 전달 없이 호출할 수 있으며 하나만 존재할 수 있다는 것입니다. 다음은 간단한 예입니다.

def foo(*b):
print(b)
# 不传参数不会报错,参数值是一个空元祖
foo() # 结果是 ()
# 可以传入任意个位置参数调用
foo(1, 2.0, '3', True) #结果是 (1, 2.0, '3', True)

Three, KEYWORD_ONLY

세 번째 유형은 키워드 매개변수로, ** 접두사 없이 VAR_POSITIONAL 유형 매개변수 뒤에만 옵니다. 의미론과 마찬가지로 이러한 유형의 매개변수도 위치 매개변수가 아닌 KEYWORD 키워드로만 전달할 수 있다. 왜냐하면 모든 위치 매개변수는 이전 VAR_POSITIONAL 유형 매개변수로 전달받았기 때문에 KEYWORD_ONLY는 키워드를 통해서만 매개변수 값을 전달받을 수 있기 때문이다. 다음은 간단한 예입니다.

# VAR_POSITIONAL不需要使用时,可以匿名化
def foo(*, c):
pass
# 只能关键字传参调用
foo(c=1)

Four. VAR_KEYWORD

네 번째 유형은 가변 키워드 매개변수입니다. VAR_KEYWORD 유형의 매개변수는 ** 접두사로 선언됩니다(함수 호출이 아닙니다. 선언과 호출은 서로 다른 의미입니다). . 의미론과 마찬가지로 이 유형의 매개변수는 KEYWORD 키워드를 통해서만 호출할 수 있지만, 매개변수가 0이더라도 원하는 수의 키워드 매개변수를 받을 수 있으며 함수 내에서 사전(dict)으로 표시됩니다. VAR_KEYWORD 유형의 매개변수는 하나만 허용되며 함수 끝에서만 선언할 수 있습니다. 다음은 간단한 예입니다.

def foo(**d):
print(d)
# 不传参数不会报错,参数值是一个空字典
foo() # 结果是 {}
# 可以传入任意个关键字参数调用
foo(a=1, b=2.0, c='3', d=True) # 结果是 {'d': True, 'c': '3', 'b': 2.0, 'a': 1}

Fifth, POSITIONAL_ONLY

다섯 번째 유형은 전혀 중요하지 않기 때문에 이것을 마지막으로 선택했습니다. Python에서는 사용할 수 없습니다. 높은 버전의 Python에서는 POSITIONAL_ONLY 유형의 매개변수를 생성합니다. 일부 기본 내장 함수는 이러한 유형의 매개변수를 사용할 수 있지만 Ipython의 ?? , 여전히 Init 서명을 볼 수 있습니다: dict(self, /, *args, **kwargs) 여기서 self는 위치 매개변수 POSITIONAL_ONLY입니다. 저를 믿으십시오. 이제 Python은 대신 VAR_POSITIONAL을 사용할 것을 권장합니다. 다음은 포괄적인 예입니다.

import inspect
def foo(a, *b, c, **d):
pass
for name, parame in inspect.signature(foo).parameters.items():
print(name, ': ', parame.kind)

기본 매개변수

VAR 유형은 기본 매개변수 설정을 허용하지 않습니다

POSITIONAL_OR_KEYWORD 및 KEYWORD_ONLY는 기본 매개변수를 사용자 정의할 수 있지만 VAR_POSITIONAL 및 VAR_KEYWORD는 VAR_POSITIONAL의 기본 매개변수로 인해 기본 매개변수 사용자 정의를 허용하지 않습니다. 빈 tuple() 튜플이며, VAR_KEYWORD의 기본 매개변수는 dict()의 빈 사전입니다. 기본 매개변수를 사용자 정의하는 경우 함수 호출 시 매개변수를 전달할 필요가 없습니다. 기본값이 비어 있으면 호출하기 전에 매개변수를 전달해야 합니다.

기본 매개변수의 위치

POSITIONAL_OR_KEYWORD 유형의 기본 매개변수는 반드시 뒤에 위치해야 하며 그렇지 않으면 오류가 보고됩니다. KEYWORD_ONLY는 필수는 아니지만 매개변수를 전달하기 위해 키워드를 사용하므로 오류가 보고됩니다. 누가 먼저 오는지는 중요하지 않지만 가능한 한 멀리 두는 것이 가장 좋습니다.

기본 매개변수가 기본값이 아닌가요?

기본 매개변수는 변수 유형(예: list, dict, set)으로 설정하면 안 됩니다. 함수 내에서 기본 매개변수를 변경하면 다음에 호출할 때 더 이상 기본값이 아닙니다.

올바른 예:

def foo(p1, p2=2.0, *, k1, k2=None):
a_list = k2 or list()
pass
foo(1, k1='3')

위 내용은 기능은 무슨 뜻인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.