pythonmath库阶乘函数_一行Python代码写阶乘函数

背景

我以前用Dart写过一行的阶乘函数:fact(double n) => n < 0 ? throw ('n must be bigger than 0') : n == 0 ? 1 : n * fact(n - 1);

现在突(xián)发(zhe)奇(méi)想(shì),用Python写。貌似网上还没有这样的例子,所以我就发出来了。

要求

使用一行代码编写函数。

调用方式为fact(x),其中x为要求阶乘的数。

不得使用分号以变相凑成一行。

解法

如果参数均为合法的,如下:fact = lambda x : 1 if x == 1 or x == 0 else x * fact(x - 1)

如果加上对输入的检查,则如下(虽然很困难但是还是能够实现的):fact = lambda x : 1 if x == 1 or x == 0 else (x * fact(x - 1) if isinstance(x, int) and x > 0 else (_ for _ in ()).throw(ValueError('Illegal parameter')))

这时如果参数小于0或非整数,就会报错。

上面两个例子中,fact = lambda x :部分可替换为def fact(x): return,但是长度变长了。

我也不知道这有什么意思,纯粹为了好玩、挑战自己罢了,实际应用中这样的写法非常影响阅读和理解。毕竟代码是为人服务的,易读易理解才是高级语言编写的初衷。

而且,这样的代码在执行速度上,也不见得能比常规的写法提高不少。

我之前看到有许多用一行代码实现功能的案例,虽说只有一行,但是内容和上面的一样冗长不堪。更让人匪夷所思的是,居然还有人说这体现了这种语言的“高效”……078dedf142eb2cbd08d9991e97f4f62ddd932390.png这括号看得我头疼

(顺便说一句,我之前查我的代码有没有先例,看到了这个,不过不符合要求)

我以前也说过,许多培训班的文章或视频,号称几十行代码就能实现某个非常厉害的功能,实际上就是拿各种库拼凑起来的东西,在那几十行背后,是其他不知多少人无私的无法计量的努力。而这些营销号却对他们的努力闭口不谈,无限夸大这门语言(指Python)的功效,实属恶劣。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值