Python代码如何写的更优雅
首先最重要的一点,
忘掉其他语言里的写法,
尝试使用Python风格进行code,
熟练之后,你会觉得她真的很美!
1. 多个值进行初始化
# > yes
s1,s2,s3 = [],[],0
# > no (这样写,既麻烦,看起来也累)
s1 = []
s2 = []
s3 = []
2. 三目运算符
# Python中没有 ? : 表达式,使用if else替代
def func():return return_value if True else other_valuedef fib(n):return n if n<2 else fib(n-1)+fib(n-2)
3. 列表生成式
# > yes[i for i in range(1,100)]# > 进一步过滤# is_prime() ---> Bool , 如果返回值为True就加入列表[i for i in range(2, n+1) if isPrime(i)]
# > nores = []
for i in range(1,100):res.append(i)
4. list、str元素倒置
# 有的同学,肯定想自己封装一个,其实不用, 直接使用切片就可以了。
>>> s = '123'
>>> s[-1::-1]
'321'>>> a = [1,2,3]
>>> a[-1::-1]
[3, 2, 1]# ! 而且上面的这个式子,非常好记,两边写个-1,中间什么也不写。
# ! 又简单又方便,wonderful!beautiful!
5. 排序功能
# !非业务必须,不要自己写排序算法,写的慢,还容易错
>>> a = [10,12,11]
>>> sorted(a)
[10, 11, 12]# > 我知道,我的读者看到这儿就不乐意了,心想你糊弄我们吧,就这,我们怎么实现需求。
# 别急,我们先来做一道题
题目:某班同学考试,进行分数排名,科目 语文+数学,按照总分降序排名。
若总分相同,则按语文成绩降序排名。若语文成绩还相同,则按学号升序排名。测试数据
N = 4
学号 语文数学
10000001 64 90
10000002 90 60
10000011 85 80
10000003 85 80
# 虽然我这边看似写了很长,但是实际,核心,排序处理的代码就一行。
# sorted(stus, key=lambda i: (i[1]+i[2], i[1], -i[0]), reverse=True)
# 如果自己写,处理 {总分降序、语文成绩降序、学号升序} 嵌套的if估计头疼死个人。n = int(input())stus = []
for i in range(n):l = list(map(int, input().split(" ")))stus.append(l)res = sorted(stus, key=lambda i: (i[1]+i[2], i[1], -i[0]), reverse=True)print(res)'''结果: [[10000003, 85, 80], [10000011, 85, 80], [10000001, 64, 90], [10000002, 90, 60]]
'''# 肯定会有读者问,上面这么写,时间复杂度如何?
# sorted, 用的是timSort,平均时间复杂度 O(nlogn),可以说已经胜过了绝大多数排序算法了。
6. 格式化输出
# python中的格式化输出方式可真是太多了。
# 我所知道的至少有5种。但其实真正常用且好用的就下面两种。# 1. f-string 格式化输出
>>> h = "hello";w = "world"
>>> print(f"{h} {w}")
hello world# 2. format输出
>>> h = "hello";w = "world"
>>> print("{} {}".format(h,w))
hello world# 也可以写的花哨些
>>> h = "hello";w = "world"
>>> x = [h,w]
>>> print("{} {}".format(*x))
hello world
7. 尾语
我知道的,关于Python代码如何写的更优雅,各位一定也有自己的小妙招。
欢迎您在评论区留言,我也好乘机学一手。

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
