gpt4 book ai didi

python - 将 lambda 转换为 Python 中的普通函数

转载 作者:行者123 更新时间:2023-11-28 22:05:45 33 4
gpt4 key购买 nike

在尝试了解如何使用 lambda 时,我看到了一个回复,发帖者在回复中说,使用 lambda 不能做的事用普通函数做不到。

我一直在努力尝试在 Python 中从自身内部调用一个函数,虽然我不是专家,但我正在学习,我遇到了一些需要使用递归函数的问题,调用多次以获得某个回答。

有人使用 lambda 函数来做到这一点,我试图理解它但我失败了,所以我认为如果可以使用普通函数实现这些函数,那么从那时起开始理解 lambda 会更容易。

我们以这句话为例:

print"\n".join(" ".join([(lambda f:(lambda x:f(lambda*r:x(x)(*r)))(lambda x:f(lambda*r:x(x)(*r))))(lambda f:lambda q,n:len(q)<=n and q or f(q[len(q)/2:],n)+f(q[:len(q)/2],n))(k,z+1)for z,k in enumerate(i[:-1].split())]) for i in list(s)[1:])

这个已经在Facebook hacker cup中使用过,我在循环中迷路了,无法解决这个问题。

这句话需要几个词,比方说“Stackoverflow rocks and it is great”

Facebook 中的问题陈述是:

您已经截获了一系列使用有趣而愚蠢的方法加密的传输,您已经设法破译了这些传输。消息仅包含空格和小写英文字符,并按如下方式加密:对于句子中的所有单词,第 i 个单词(从 1 开始)替换为通过应用以下递归操作 f(word, i) 生成的单词:

如果word的长度小于等于i,回话。否则,返回 f(right half of word, i) +f(单词的左半部分,i).

如果单词的长度为奇数,则将其拆分为右侧较长。您已决定与发送消息的人玩得开心,并以与他们使用的相同的方式加密广播您自己的消息。

输入您的输入将以整数 N 开头,然后是换行符,然后是 N 个测试用例。每个案例由一个未加密的句子组成,只包含空格和小写字母,案例以换行符分隔。句子中不会有前导或尾随空格,任何其他相邻字符之间最多有 1 个空格字符

输出对于每种情况,以换行符分隔,输出应用上述编码方法后的加密句子的内容。您可以忽略传统的大写规则并坚持使用所有小写字母。

约束条件5≤N≤25句子将包含不超过 100 个字符。

最佳答案

Python lambda 只是语法糖。 “常规”函数具有相同的功能,例如闭包,因为请记住,您可以在另一个函数中定义它们,就像 lambda 一样。

def some_func():
some_expr_using(lambda args: 42)

# becomes:

def some_func():
def unique_name(args):
return 42
some_expr_using(unique_name)

除了在检查 lambda 对象时,它的名称设置为“ ”,而不是上面的 unique_name,以及与实际源代码如何拼写而不是它的行为有关的其他表面细节。

你的代码可以写成:

def y(f):
def a(x):
def b(*r):
return x(x)(*r)
return f(b)
return a(a)

def fx(f):
def x(q, n):
# changed "a and b or c": different semantics if b can be falsy
if len(q) <= n:
return q
else:
return f(q[len(q) / 2:], n) + f(q[:len(q) / 2], n)
return x

print "\n".join(
" ".join(y(fx)(k, z + 1) for z, k in enumerate(i[:-1].split()))
for i in list(s)[1:])

(但前提是我翻译正确;仔细检查。:P)

此代码是 fixed-point combinator 的示例,我只是勉强理解,并且在不了解更多上下文的情况下很难给出更好的名字(我没有尝试破译实际的问题陈述)。它可以分解为一个递归函数,该函数直接通过名称调用自身。

关于python - 将 lambda 转换为 Python 中的普通函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4777235/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com