原标题:一行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,但是长度变长了。

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

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

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

这括号看得我头疼

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

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

责任编辑:

用python编写一个求偶数阶乘的函数_一行Python代码写阶乘函数相关推荐

  1. 如何用Python编写一个求 1到n阶乘之和的程序

    各位许久不见了,甚是想念! 前段时间我进入高中阶段学习,一直还没有适应,现在好些了就继续写博客了. 看到很多人关注我,点赞或是评论,我感觉太高兴了! C语言这块我暂时先放下了,我想自己学学Python ...

  2. python编写一个名为collatz()的函数,它有一个名为number的参数,如果参数是偶数,那么collatz()就打印出number//2,如果number是奇数,collatz()就打印3*

    [开发该软件的操作系统]:windows10 [软件开发环境/开发工具]:PyCharm [编程语言]:Python [开发目的]:这是老师布置的作业啦~ 供初学者参考学习 [开发者]:江西农业大学2 ...

  3. 请用python编写一个斗地主小游戏,并给出完整代码

    很高兴为您服务!这是一个使用Python编写的斗地主小游戏的完整代码:# 导入必备模块 import random# 定义一副牌 poker = ['A', 2, 3, 4, 5, 6, 7, 8, ...

  4. python编写一个弹球游戏_Python实战案例:用Python写一个弹球游戏,就是这么强

    我们前面讲了几篇关于类的知识点,为了让大家更好的掌握类的概念,并灵活的运用这些知识,我写了一个有趣又好玩的弹球的游戏,一来可以把类的知识融会一下,二来加深对Python的兴趣.你会发现哎呀Python ...

  5. python定义一个数据自动去重的函数_110道Python面试题(真题小结)

    该文110道面试题全部来自于大家笔试面试时候拍照后发到群里求助的题目,并自己一道一道亲自做了,大部分题目属于巩固基本python知识点的题目,希望对基本知识不熟悉的同学,能认真做一遍,肯定会有不少收获 ...

  6. python join函数_一行 Python 代码能实现这么多丧心病狂的功能?

    最近看知乎上有一篇名为<一行 Python 能实现什么丧心病狂的功能?>(https://www.zhihu.com/question/37046157)的帖子,点进去发现一行Python ...

  7. python二进制转十进制不用内置函数_在python中将二进制转换为十进制(没有内置的二进制函数)...

    好的,首先在这里发帖,如果问题不可行,请原谅并忽略 背景: 我是计算机科学160.从高中开始我就没有上过任何计算机相关的课程,所以加入这个班对我来说是一个很大的转变.一切似乎都很先进.我们一直在使用P ...

  8. python编写一个判断完数的函数过程_第4章-30 找完数 (20分)python

    所谓完数就是该数恰好等于除自身外的因子之和.例如:6=1+2+3,其中1.2.3为6的因子.本题要求编写程序,找出任意两正整数m和n之间的所有完数. 输入格式: 输入在一行中给出2个正整数m和n(1 ...

  9. 利用python编写一个pc模拟器明日方舟脚本_明日方舟脚本1.0(python\adb\cv2)

    一.目的 <Python从入门到实践>第14章拉拉杂杂"抄"完,急于练手,便捡起以前一直想写却没写完的"鼠标键盘模拟"程序. 二.思考 图1.0 a ...

最新文章

  1. OpenLayers 动态添加标记(Marker)和信息窗(Popup)
  2. 程序还没写完只能当然计算器用,先发过来用着后面的慢慢写
  3. android 事件驱动编程,跟我学android之四 事件驱动模型
  4. Java synchronized 与 lock (Reetrantlock)锁性能比较
  5. 判断是否在数组中,若在输入其下标,否则输入-1
  6. OpenCV使用Sobel或Scharr OpenCV函数进行边缘检测的实例(附完整代码)
  7. Bash 中的特殊字符大全
  8. 处理训练集和测试集分布同的方法(对抗训练)
  9. [入门]理想的小白程序员成长曲线
  10. F5 对接 Consul 实现服务发现和服务注册实践
  11. 树上战争(HDU - 2545)
  12. 微信对账单 java_微信支付-跨境支付开发者文档
  13. ACM-Week 2
  14. 【渝粤教育】电大中专跨境电子商务理论与实务 (13)作业 题库
  15. iOS APP上架流程详解
  16. 基于图像识别和文字识别用 Python 提取视频字幕
  17. [个人笔记]操作系统复习笔记
  18. 【basepro】常用util
  19. C语言链表怎么合并同类项,求一个关于合并同类项的编程
  20. Java开源电商项目比較

热门文章

  1. UI搜索栏设计素材模板|设计原则
  2. 云计算是互联网和计算机技术发展的产物,云计算是网络技术和电脑融合在一起产物...
  3. c语言程序优化设计,C程序设计语言的教学策略优化设计
  4. 学习计划(11.5)
  5. Linux进程管理+内存管理:进程切换的TLB处理(ASID-address space ID、PCID-process context ID)
  6. OpenStack:heat安装使用-Openstack Heat try-out
  7. segment段,setjmp和longjmp
  8. java redis geo_redis学习计划(九)redis GEO地理位置
  9. ihtml2document能不能根据id获取dom_JavaScript学习笔记(十三)-- DOM(上)
  10. RecycleView添加HeaderView和FooterView