이 글은 함수 주제에 대한 마지막 글로, 함수 반환 값과 함수 작성을 위한 몇 가지 기본 모범 사례 지침을 소개합니다.
함수의 반환 값은 Python을 경쟁사보다 앞서게 하는 요소 중 하나입니다. 대부분의 다른 언어에서 함수는 일반적으로 객체 반환만 허용되지만 Python에서는 튜플을 반환할 수 있습니다. 즉, 원하는 것은 무엇이든 반환될 수 있습니다. 이 기능을 사용하면 프로그래머는 다른 언어로 작성하기가 훨씬 더 어렵거나 확실히 더 지루한 소프트웨어를 작성할 수 있습니다. 우리는 이미 함수에서 무언가를 반환하려면 return 문과 반환하려는 항목을 사용해야 한다고 말했습니다. 필요에 따라 함수 본문에 여러 개의 return 문이 있을 수 있습니다.
반면에 함수 본문에서 아무것도 반환하지 않거나 "기본" return 문을 호출하면 함수는 None을 반환합니다. 이 동작은 필요하지 않을 때 무해하지만 몇 가지 흥미로운 패턴을 작업할 수 있게 하여 Python이 매우 일관된 언어임을 확인할 수 있습니다.
함수 호출 결과를 강제로 수집하지 않기 때문에 무해하다고 합니다. 다음은 예제를 통해 말한 내용을 보여줍니다.
# 返回none值 def func(): pass func() # 这个调用是没有接收的,将丢失 a = func() # 这个调用被a接收 print(a) # prints: None
전체 함수 본문은 pass 문으로만 구성되어 있습니다. 공식 문서에 따르면 pass는 실행될 때 아무 일도 일어나지 않기 때문에 아무런 작업도 하지 않습니다. 명령문이 구문상 필요하지만 코드 실행이 필요하지 않은 경우 자리 표시자로 유용합니다. 다른 언어에서는 빈 범위를 정의하는 한 쌍의 중괄호({})로 이를 표현할 수 있지만 Python에서는 범위가 들여쓰기된 코드로 정의되므로 pass와 같은 명령문이 필요합니다.
또한 func()에 대한 첫 번째 호출은 수신되지 않은 값(None)을 반환한다는 점에 유의하세요. 앞서 언급했듯이 함수 호출의 반환 값을 받을 필요는 없습니다.
좋은 내용이지만 별로 흥미롭지는 않습니다. 재미있는 함수를 작성해 볼까요? 계승 함수에 대해 논의한 것을 기억하시나요? 여기에 자체 구현을 작성해 보겠습니다(단순화를 위해 함수가 항상 적절한 값으로 올바르게 호출된다고 가정하므로 입력 매개변수를 확인할 필요가 없습니다).
# 阶乘函数,返回单个值 def factorial(n): if n in (0, 1): return 1 result = n for k in range(2, n): result *= k return result f5 = factorial(5) # f5 = 120
두 개의 반환 지점이 있다는 점에 유의하세요. n이 0 또는 1이면 1이 반환됩니다. 그렇지 않으면 필요한 계산을 수행하고 결과를 반환합니다.
팁: Python에서는 더 장황한 확인 대신 이전 예제에서 사용한 것처럼 멤버 확인을 위해 in 연산자를 사용하는 것이 일반적입니다.
if n == 0 또는 n == 1:
…
이제 이 함수를 더 간결하게 작성해 보세요.
# 返回单个值示例.2 from functools import reduce from operator import mul def factorial2(n): return reduce(mul, range(1, n + 1), 1) f5 = factorial(5) # f5 = 120
이 간단한 예는 Python이 어떻게 우아하고 간결할 수 있는지 보여줍니다. 이 구현은 우리가 Reduce()나 mul()을 본 적이 없어도 읽을 수 있습니다. 읽거나 이해할 수 없다면 동작을 이해할 때까지 몇 분 동안 Python 문서 조사를 하십시오. 문서에서 기능을 찾고 다른 사람이 작성한 코드를 이해하는 것은 모든 개발자가 수행할 수 있어야 하는 작업이므로 도전해 보세요.
팁: Python과 함께 제공되는 도움말을 보는 방법을 알아보세요. 콘솔을 사용하여 탐색할 때 매우 유용한 help() 함수를 찾아보세요.
앞서 언급했듯이 대부분의 다른 언어와 달리 Python에서는 함수에서 여러 개체를 반환하는 것이 매우 쉽습니다. 이 기능은 무한한 가능성을 열어주며, 다른 언어에서는 재현하기 어려운 스타일로 코딩할 수 있게 해줍니다. 우리의 사고는 우리가 사용하는 도구에 의해 제한됩니다. 따라서 Python이 다른 언어보다 더 많은 자유를 제공하면 창의력이 향상됩니다.
여러 값을 반환하는 것은 매우 간단합니다. 튜플(명시적 또는 암시적)을 사용하면 됩니다. divmod() 내장 함수를 흉내내는 간단한 예를 살펴보겠습니다.
# 返回多个值 def moddiv(a, b): return a // b, a % b print(moddiv(20, 7)) # prints (2, 6)
이전 코드의 굵게 표시된 부분을 괄호로 묶어 명시적 튜플로 만들 수 있지만 이렇게 할 필요는 없습니다. 위 함수는 나눗셈의 결과와 나머지를 모두 반환합니다.
함수를 작성할 때 몇 가지 모범 사례 지침을 따르는 것이 함수를 잘 작성할 수 있는 데 매우 유용합니다. 기능을 더 잘 이해하고 적용하는 데 도움이 되도록 다음 지침을 살펴보겠습니다.
1) 함수는 한 가지 일만 해야 합니다.
한 가지 일을 하는 함수는 한 문장으로 설명하기 쉽습니다. 여러 작업을 수행하는 함수는 하나의 작업을 수행하는 더 작은 함수로 리팩터링될 수 있습니다. 이러한 작은 함수는 일반적으로 읽고 이해하기가 더 쉽습니다.
2) 함수는 작아야 합니다
함수가 작을수록 테스트하고 작성하기가 더 쉬워서 한 가지 일에만 더 집중합니다.
3) 입력 매개변수가 적을수록 좋습니다.
많은 수의 매개변수를 허용하는 함수는 빠르게 관리하기 어려워집니다(다른 문제 중에서도). 더 많은 입력 매개변수가 필요한 경우 클래스 객체나 기타 복합 데이터로 리팩터링하는 등 적절하게 고려하세요.
4) 함수의 반환 값은 일관되어야 합니다
False를 반환하는 것과 None을 반환하는 것은 같은 것이 아닙니다. Boolean 컨텍스트에서도 해당 값은 모두 False입니다. False는 정보가 있음(예: False)을 의미하고 None은 정보가 없음을 의미합니다. 가능할 때마다 논리에서 무슨 일이 일어나고 있는지에 관계없이 일관된 방식으로 반환되는 함수를 작성하세요.
5)函数不应该有副作用
换句话说,函数不应该影响调用它们的值。这可能是目前最难理解的一条实践性原则,所以这里给出一个使用列表的示例。在下面的代码中,注意如何不使用sorted()函数对numbers进行排序,该函数实际上返回的是已排序的数字副本。相反,list.sort()方法作用于numbers对象本身,这很好,因为它是一个方法(属于对象的函数,因此有权修改它):
>>> numbers = [4, 1, 7, 5] >>> sorted(numbers) # 不会排序原始的'numbers' 数字列表 [1, 4, 5, 7] >>> numbers # 验证一下 [4, 1, 7, 5] # 很好,没有改变原始数据对象 >>> numbers.sort() # 这将实质性影响原始列表 >>> numbers [1, 4, 5, 7]
所以,遵循以上这些常规的基本指导原则,将有益于你写出更好的函数,为你实现更好的服务。
到此关于Python函数的主体性知识就介绍完了——函数定义语法、输入参数定义以及相关规则、返回值实现和多返回值等,并简单总结了基于最佳实践的一些有益基本指导原则。请多加练习和体会,以便更好的理解和掌握作为Python的核心特性之一的函数。
위 내용은 Python 프로그래밍: 함수 반환 값 및 모범 사례에 대한 기본 지침의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!