고차 함수
11226 단어 machinelearningpythondatascience
(R에서) Python을 처음 접한 사람으로서 제 목표는 두 가지입니다. 먼저 이 책을 훑어보고 그 부산물로 파이썬을 배워보자. 둘째, 데이터 과학 프로세스에서 무언가를 성취하기 위해 Pythonic 방식의 작업이 필요한 영역을 찾아 강조 표시합니다.
저는 데이터 정리 또는 사전 처리, 모델링을 위한 데이터 준비, 탐색적 데이터 분석 또는 모델 교육, 검증 및 테스트 역학에서 일부 작업을 수행하는 데 필요한 Python 언어의 특정 기능을 살펴보겠습니다.
함수에 대한 그의 범위에서 Grus는 Python에서 함수가 어떻게 일류이고 다른 함수에 인수로 전달될 수 있는지 강조합니다. 나는 책의 예에서 그림을 그릴 것이고 다른 각도에서 동일한 개념을 조사하기 위해 외부 소스를 보완할 수 있습니다.
인수로 전달되는 함수의 그림은 아래에 설명되어 있습니다. 함수
double
가 생성됩니다. 함수apply_to_one
가 생성됩니다. double
함수는 my_double
를 가리킵니다. my_double
를 apply_to_one
함수에 전달하고 x
로 설정합니다.어떤 함수가
apply_to_one
에 전달되든 그 인수는 1입니다. 따라서 my_double
전달은 1을 두 배로 늘리는 것을 의미하므로 x
는 2입니다.그러나 중요한 것은 함수가 다른 함수(고차 함수라고도 함)로 전달되었다는 것입니다.
def double(x):
"""
this function doubles and returns the argument
"""
return x * 2
def apply_to_one(f):
"""Calls the function f with 1 as its argument"""
return f(1)
my_double = double
# x is 2 here
x = apply_to_one(my_double)
다음은 위의 예를 확장한 것입니다. 정수 5를 인수로 사용하여 함수를 반환하는
apply_to_five
함수를 만듭니다.
# extending the above example
def apply_five_to(e):
"""returns the function e with 5 as its argument"""
return e(5)
# doubling 5 is 10
w = apply_five_to(my_double)
함수가 광범위하게 사용될 것이기 때문에 여기에 또 다른 복잡한 예가 있습니다. 나는 이것을 Trey Hunner's site 에서 찾았습니다.
square
및 cube
의 두 가지 기능이 정의됩니다. 두 함수 모두 operations
라는 목록에 저장됩니다. 다른 목록numbers
이 생성됩니다.마지막으로 for 루프를 사용하여
numbers
를 반복하고 enumerate
속성을 사용하면 숫자의 인덱스와 항목 모두에 액세스할 수 있습니다. 이것은 action
가 square
인지 cube
인지를 찾는 데 사용됩니다. square
목록.
# create two functions
def square(n): return n**2
def cube(n): return n**3
# store those functions inside a list, operations, to reference later
operations = [square, cube]
# create a list of numbers
numbers = [2,1,3,4,7,11,18,29]
# loop through the numbers list
# using enumerate the identify index and items
# [i % 2] results in either 0 or 1, that's pointed at action
# using the dunder, name, retrieves the name of the function - either square or cube - from the operations list
# print __name__ along with the item from the numbers list
# action is either a square or cube
for i, n in enumerate(numbers):
action = operations[i % 2]
print(f"{action.__name__}({n}):", action(n))
# more explicit, yet verbose way to write the for-loop
for index, num in enumerate(numbers):
action = operations[index % 2]
print(f"{action.__name__}({num}):", action(num))
for 루프는 다음을 출력합니다.
정사각형(2): 4
큐브(1): 1
정사각형(3): 9
큐브(4): 64
정사각형(7): 49
큐브(11): 1331
정사각형(18): 324
큐브(29): 24389
다른 함수에 인수로 전달되는 함수의 특별한 예는 Python 익명 함수
cube
입니다. 그러나 numbers
로 함수를 정의하는 대신 lambda
를 사용하면 다른 함수 내부에 바로 정의됩니다. 다음은 예시입니다.
# we'll reuse apply_five_to, which takes in a function and provides '5' as the argument
def apply_five_to(e):
"""returns the function e with 5 as its argument"""
return e(5)
# this lambda function adds '4' to any argument
# when passing this lambda function to apply_five_to
# you get y = 5 + 4
y = apply_five_to(lambda x: x + 4)
# we can also change what the lambda function does without defining a separate function
# here the lambda function multiplies the argument by 4
# y = 20
y = apply_five_to(lambda x: x * 4)
lambda
함수는 편리하고 간결하지만 대신 def
로 함수를 정의해야 한다는 합의가 있는 것 같습니다.다음은 Trey Hunner 의
lambda
함수의 외부 예입니다. 이 예에서 def
함수는 두 개의 인수를 취하는 lambda
함수 내에서 사용됩니다.
# calling help(filter) displays an explanation
class filter(object)
| filter(function or None, iterable) --> filter object
# create a list of numbers
numbers = [2,1,3,4,7,11,18,29]
# the lambda function will return n if it is an even number
# we filter the numbers list using the lambda function
# wrapped in a list, this returns [2,4,18]
list(filter(lambda n: n % 2 == 0, numbers))
파이썬 함수에 대해 쓸 수 있는 책 전체 또는 적어도 전체 장이 있지만 지금은 함수가 다른 함수에 대한 인수로 전달될 수 있다는 아이디어로 논의를 제한할 것입니다. 책을 진행하면서 이 섹션에 대해 다시 보고하겠습니다.
Reference
이 문제에 관하여(고차 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/paulapivat/higher-order-functions-4k7b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)