网站首页 > 技术教程 正文
一行代码可以做什么?
之前小异和大家分享关于很少代码算法的时候,不少朋友私信留言表示想看更多有意思的“短代码”,今天小异就和大家聊一聊有意思的“一行代码”。
“一行代码”的历史
“一行代码”可不是近些年才有的概念,早在1960年就已经出现,那会儿C语言都还没出现呢。当时叫单行程序(One-liner program),是操作系统shell命令行的文本输入,一行输入就能执行一些功能。后来这个概念拓宽了,不再限定代码无需编译即可执行。
随着APL编程语言的发布,单行程序逐渐广为人知,后来成为展现编程语言差异和强大表达能力的一种形式。当时杂志也会介绍一些让人印象深刻的短小或者单行的程序代码。
▲ RUN杂志第35期关于单行程序的专栏
使用“一行代码”有时候是寻找更好的解决方案,有时候也是炫技玩法。来看看有哪些有趣、有用的“一行代码”吧。
有趣的“一行代码”
在早几年编程没有这么流行的时候,能打印出有趣图形的“一行代码”可以吸引许多人的眼光。虽然在现在看来这种形式的“炫技”似乎稍显稚嫩,但对刚接触编程的人来说这些的确非常有趣。
打印一个“爱心”
这行代码可以打印一个充满“爱”的爱心形状。
print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(30, -30, -1)]))
打印99乘法表
这行代码可以打印出我们非常熟悉的99乘法表。
print('\n'.join([' '.join(['%s * %s = % - 2s' % (y, x , x*y)for y in range(1, x + 1)])for x in range(1, 10)]))
有用的“一行代码”
“一行代码”当然也可以有用,对编程有更深理解的时候,可以用“一行代码”这种形式加快我们写代码的速度。
创建一个服务器
如果我们想要用Python创建一个服务器,可能需要这些代码:
import http.server
import socketserver
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
而现在用一行代码就能搞定:
python -m http.server 8000
嵌套循环
有两个数组:
iter1 = [1, 2, 3, 4]
iter2 = ['a', 'b', 'c']
一般的嵌套循环代码是这样的:
for x in iter1:
for y in iter2:
print(x, y)
一行代码可以这样写:
[print(x, y) for x in iter1 for y in iter2]
解算法题
力扣上有这样一个算法题:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
就可以用一行代码解决:
class Solution {
public:
bool isPowerOfTwo(int n) {
return (n > 0) && (!(n & (n - 1)));
}
};
应该追求好的代码
不难看出上面大部分代码都是用的Python,这也是Python简单、优雅的体现。那是不是说我们在编程过程中代码写得越短越好,最好是一行呢?
答案是否定的。
如同大部分程序员调侃的经典删库跑路代码一样,没有人会在生产代码中去用那些炫技的“一行代码”。更重要的是通过“一行代码”来加深理解该语言的特性,掌握其编程技巧,成为真正的编程专家。
而且在项目中,那些很长的“一行代码”是完全被拒绝的,属于“Clean Code”系列作者罗伯特·C. 马丁口中的“糟糕的代码”,会毁了整个系统。他们的可读性实在是太差,就算有一些简单的注释,后来维护者大概率也看不懂为什么要写那样一段代码。
所有,优秀的程序员在写代码的时候追求的不是短,而是优雅、整洁。就像C++之父Bjarne Stroustrup说的一样:
我喜欢优雅和高效的代码。代码逻辑应当直截了当,令缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。
要写出优雅、高效的代码,除了掌握一些代码规范之外,更重要的是理解业务逻辑,知道如何正确选择和高效实现算法。乔恩·本特利在写“编程珠玑”系列时也是这个观点:
遗憾的是,仅仅熟练地运用这些可靠的工程原理(管理和良好的编程风格),不见得一定能够如期完成软件并顺利运行。
在《编程珠玑 第2版》里,他向读者描绘了来自编程实际问题中的一系列宝贵经验。用一些有趣的程序,围绕“性能”这一主题告诉读者该如何正确选择和高效实现算法。
每一个有趣的案例中,都包含了他总结的编程技巧和设计原理。最重要的是,不同于其他大部头作品,“编程珠玑”系列完美诠释了“珠玑”:用通俗简洁的语言向读者展示优美的算法思想。
《编程珠玑 续》则更注重编程技巧,从使用场景切入技术,然后进行深入扩展,层层递进地帮助读者掌握成为一个优秀程序员的关键技巧。其中关于数据结构和代码调优、堆栈等复杂的内容被讲得浅显易懂,让无数读者如醍醐灌顶。
乔恩·本特利用薄薄的两本书,可以帮助读者从根本上认识编程思想,写出又优雅、又高效的代码,成为真正优秀的程序员。
- 上一篇: 优秀程序员需要掌握的代码整洁之道
- 下一篇: 降低认知复杂度的5个整洁代码技巧
猜你喜欢
- 2024-11-13 你会给变量起的什么名字 变量起名的规则主要有
- 2024-11-13 提升你的编程能力 如何提高编程技术
- 2024-11-13 如何提升代码质量 提升代码能力的方式
- 2024-11-13 好代码实践:基于 Redis 的轻量级分布式均衡消费队列
- 2024-11-13 Google: 如何做code review? google网站怎么做
- 2024-11-13 《代码整洁之道》:5大基本要点 代码整洁之道适合什么人读
- 2024-11-13 低代码工具优缺点 低代码工具优缺点有哪些
- 2024-11-13 C++防御性编程,提高代码的健壮性
- 2024-11-13 不讲码德!坏味道偷袭我这个老码农
- 2024-11-13 降低认知复杂度的5个整洁代码技巧
你 发表评论:
欢迎- 最近发表
-
- 函数公式的7大潜规则,这次给你讲透了
- 数据逆向查找不止有vlookup,你该知道的三种逆向查询操作
- Vlookup函数怎么一次查找能返回多个结果?
- vlookup函数的嵌套你用过吗?一次可以引用3个表格的数据
- Vlookup函数的新用法,查询合并单元格,很多Excel高手都不知道
- 分明有数据,公式也没错,为什么vlookup还是会返回错误值
- 条件判断还在用if函数就out了,vlookup函数模糊查询一键完成
- EXCEL函数 VLOOKUP函数 HLOOKUP函数
- excel中vlookup函数的用法(excel中vlookup函数公式)
- 自动获取vlookup函数的第三参数,再也不用一列一列的数了
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)