python - DailyCodingProblems:f 参数/函数
问题描述
所以我正在处理日常的编码问题,而我今天遇到的问题让我很难过。
cons(a, b) 构造一个对,car(pair) 和 cdr(pair) 返回该对的第一个和最后一个元素。例如,car(cons(3, 4)) 返回 3,cdr(cons(3, 4)) 返回 4。
鉴于这种缺点的实现:
def cons(a, b): def pair(f): return f(a, b) return pair
实现 car 和 cdr。
我不明白“f”代表什么。我尝试打印从该功能获得的东西:
x = cons(3, 4)
<function cons.<locals>.pair at 0x2adc0ec45ae8>
但我还是不明白它是什么。有任何想法吗?
解决方案
让我们检查一下cons
:
def cons(a, b):
def pair(f):
return f(a, b)
return pair
所以调用cons(3, 4)
动态创建一个函数,就好像你像这样静态定义它:
def pair_3_4(f)
return f(3, 4)
相似地 :
pair1 = cons(2, 6)
pair2 = cons(5, 8)
pair3 = cons("a", "b")
相当于:
def pair1(f)
return f(2, 6)
def pair2(f)
return f(5, 8)
def pair3(f)
return f("a", "b")
现在,让我们检查一下pair
:
def pair(f):
return f(a, b)
由此,您可以猜测它f
一定是一个可调用对象,并且它需要两个参数。最简单的可调用对象是一个函数,所以假设它f
是一个函数。
您还可以看到,它只是简单地用任何东西pair
调用并被绑定到它。f
a
b
cons
这是我print
用作的示例f
:
>>> pair_3_4 = cons(3, 4)
>>> pair_3_4(print)
3 4
>>> cons(3, 4)(print)
3 4
>>> print(3, 4)
3 4
推荐阅读
- xml - XML::LibXML::XPathContext 无法解析 Google Maps kml 文件 - 找不到“何时”节点
- c - RAW icmp socket : 如何得到正确的回复
- java - 不将值从推送通知传递给 Activity
- jquery - 如何删除博客小部件白边距?
- airflow - 我们如何在 SparkSubmitOperator 中指定 driver-java-options -Dlog4j.configuration
- azure-data-factory - 从 Azure 数据工厂运行可执行文件时 Azure 批处理池中的节点数
- go - 调用提升函数时出现未定义错误
- javascript - GraphQL 中的授权
- c# - Selenium C#-基于关闭 chrome 的浏览器驱动程序会话的两个异常,即和 firefox
- bootstrap-modal - 如何在打开内部模态时关闭 ng-Bootstrap 模态