你能解释一下它是怎么工作的吗.

特别是:acnsz来自哪里?

x=10
y=5
abs( (lambda a: lambda z, c, n: a(a, z, c, n)) (lambda s, z, c, n: z if n == 0 else s(s, z*z+c, c, n-1)) (0, 0.02*x+0.05j*y, 10) )

它甚至更长,但我知道了它的其余部分.

print('\n'.join([''.join(['*'if abs((lambda a: lambda z, c, n: a(a, z, c, n))(lambda s, z, c, n: z if n == 0 else s(s, z*z+c, c, n-1))(0, 0.02*x+0.05j*y, 40)) < 2 else ' ' for x in range(-80, 20)]) for y in range(-20, 20)]))

此monster表达式将伪图形Mandelbrot分形输出到控制台.

推荐答案

此函数 (lambda a: lambda z, c, n: a(a, z, c, n))可以重写为

def apply_function_to_itself(funk):
    def inner(arg1, arg2, arg3):
        funk(funk, arg1, arg2, arg3)
        
    return inner

这是一个函数式的东西,它以函数本身作为第一个参数来调用函数.这对于函数式语言中的递归是必要的,但在python中通常有更好的方法.

此函数(lambda s, z, c, n: z if n == 0 else s(s, z*z+c, c, n-1))可以重写为:

def transform_n_times(funk, value, c, n):
    if n==0:
        return arg1
    else:
        return funk(funk, value * value + constant, constant, n-1)

我们从前面的函数中知道,funk === call_if_n_is_not_0

所以基本上结合起来,我们可以这样重写它:

def transform_n_times(value, constant, n):
    for i in range(n):
        value arg1 * arg1 + arg2
    return value

简单得多.

Understanding the entire program

整个代码可以这样编写:


def apply_function_to_itself(funk):
    def inner(arg1, arg2, arg3):
        funk(funk, arg1, arg2, arg3)
        
    return inner

def transform_n_times(funk, value, constant, n):
    if n==0:
        return arg1
    else:
        return funk(funk, value * value + constant, constant, n-1)

abs(apply_function_to_itself(call_if_n_is_not_0)(0, 0.02*x+0.05j*y, 10))

或者像这样.我们可以完全go 掉apply_function_to_itself,但保持递归如下:

def transform_n_times(value, constant, n):
    if n==0:
        return arg1
    else:
        return transform_n_times(funk, value * value + constant, constant, n-1)

abs(transform_n_times(0, 0.02*x+0.05j*y, 10))

或者我们可以完全删除递归,只需使用循环:

constant = 0.02*x+0.05j*y
value = 0
n = 10
for i in range(n):
    a1 = value * value + constant
abs(value)

mandlebrot集合背后的基本方程是f(x) = x^2+c,这与此相匹配.

Python相关问答推荐

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

Django管理面板显示字段最大长度而不是字段名称

Polars LazyFrame在收集后未返回指定的模式顺序

使用新的类型语法正确注释ParamSecdecorator (3.12)

需要计算60,000个坐标之间的距离

Pandas 有条件轮班操作

如何使用html从excel中提取条件格式规则列表?

如何从具有不同len的列表字典中创建摘要表?

在Admin中显示从ManyToMany通过模型的筛选结果

将链中的矩阵乘法应用于多组值

递归函数修饰器

在电影中向西北方向对齐""

按条件添加小计列

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

如何在表单中添加管理员风格的输入(PDF)

函数()参数';代码';必须是代码而不是字符串

按最大属性值Django对对象进行排序

多个布尔条件的`jax.lax.cond`等效项

将参数从另一个python脚本中传递给main(argv

Pip:卸载`-e`安装过程中安装的所有pkgs