谁不想写一段优雅的python代码?


在这里插入图片描述

对于一个合格的python程序猿,养成良好的编码习惯并不困难。但是由于学习了多种编程语言,很可能在初学python的时候,造成你的代码不够专业。这里总结了一些让你的python代码变得优雅的方法,希望可以帮到您QAQ

1. 使用 in / not in 来判断值是否在序列中

初学者代码:(C、java常用循环遍历)

favorite = '云缨'
heroes = ['云缨', '后羿', '小鲁班']
    
for hero in heroes:
    if hero == favorite:
        print('美好的一天,从巡街开始')

# 或者
name = 'wenhaha'
if name.find('a') != -1:
    print('a 在里面')

优秀代码:

if favorite in heroes:
    print('美好的一天,从巡街开始')

name = 'wenhaha'
if 'a' in name:
    print('a 在里面')

2. 判断“真”“假”的方式

if x:
if not x:

python中常见的、布尔值为“假”的数据有:
0, 空字符串,空序列,None(比如从利用模型从数据库读取对象但是没有读到)

a = 0
b = ''
c = []

if a == 0 and b == '' and len(c)==0:
    print('全是假的uuu')

优秀代码:

if a or b or c:
    print('总有一个真的东西')

3. 超级nice的输入方式

现在要接收用户输入的一串数字,听到这里,有些朋友可能已经马上想到 for、while,但是在python中,我们可以这样做:

# 输入 2 5 3 8 0
nums = list(map(int,input().split()))
print(nums)

相比C或者Java是不是简洁多了呢?

解释:input().split()能帮我们接收输入并默认按空格分隔开,得到一个列表,但是列表元素还是字符串
所以我们需要用map()来将这个列表的每一个元素,都映射为int(整数)类型,这时候我们得到的是一个迭代器,我们再将它转换为一个列表,就得到这个数字构成的列表了。

4. 随机数模块,建议使用randrange(a,b)代替randint(a,b)

程序的世界里一般都是左闭右开,比如切片的时候,包含左边索引而不包含右边索引。然而randint(a,b)这个东西有点反人类,他是闭区间的,左右都可以取。(讲真,第一次见到这个函数我还以为它是左闭右开)
randrange(a,b)则是左闭右开,符合我们的习惯。
在这里插入图片描述
在这里插入图片描述

5. 熟练使用 列表推导式

学了随机数,那你可以生成长度为5的随机数列表吗?有的同学开始操练起了代码:

import random
my_list = []
for i in range(5):
    num = random.randrange(1,100)
    my_list.append(num)
print(my_list)

然而,使用列表推导式,能够更优雅的写出这个列表:

import random
my_list = [random.randrange(1,100) for i in range(5)]
print(my_list)

这里只写了一个一重循环的列表推导式(也最常用),如果要一个多维的列表呢?如果还要满足一定条件呢?

6. 字符串与列表的互相转换

字符串转列表 – 别犹豫,直接转

最开始我是这样写的:

chars = 'abcdefg'
c_list = list()
for c in chars:
    c_list.append(c)
print(c_list)

直到我看到了这样的代码:

c_list = list('abcdefg')

妈耶,这也太简单了

列表转字符串 – 善用join()

heroes = ['云缨', '后羿', '小鲁班']
all_hs = '-'.join(heroes)
print(all_hs)

注意列表数据类型不是字符串的时候,需要转换

7. 遍历列表且需要使用索引的时候 – enumerate()

当你需要根据列表的索引解决问题的时候,很久以前我一直是这样写的:

import random
my_list = [random.randrange(1,100) for i in range(6)]
print(my_list)

new_list = []
for i in range(len(my_list)):
    if i % 2:
        new_list.append(my_list[i])
print(new_list)

输出结果:
在这里插入图片描述
有可能你会这样写:

import random
my_list = [random.randrange(1,100) for i in range(6)]
print(my_list)

i = 0
new_list = []
for num in my_list:
    if i % 2:
        new_list.append(num)
    i += 1
print(new_list)

引入enumerate()

import random
my_list = [random.randrange(1,100) for i in range(6)]
print(my_list)

new_list = []
for i,num in enumerate(my_list):
    if i % 2:
        new_list.append(num)
print(new_list)

输出结果:
在这里插入图片描述

8. 当你需要同时处理两个大小相同的列表 – zip()

遍历处理

初学者写法:-- .ljust(7)是字符串左对齐占位7个字符。相对的还有.rjust()

names = ['jack', 'tom', 'wenhaha']
scores = [90, 88, 85]
for i in range(len(names)):
    print(f'{names[i]} 得分:{scores[i]}')

在这里插入图片描述

优秀写法:

names = ['jack', 'tom', 'wenhaha']
scores = [90, 88, 85]
for name,score in zip(names,scores):
    print(f'{name.ljust(7)} 得分:{score}')

在这里插入图片描述

生成字典

用了字典推导式但是操作冗余了:

names = ['jack', 'tom', 'wenhaha']
scores = [90, 88, 85]
students = {name:score for name,score in zip(names,scores)}
print(students)

在这里插入图片描述

直接使用zip()

students = dict(zip(names,scores))

9. 交换两个数的值

C和java一般都会使用到中间变量,或者多个表达式,在python可以一行完成。

a, b = b, a

你可以理解为元组的解包,但是实际原理不是解包。可以参考这一篇文章

10. 学会使用lambda表达式

匿名函数,如果一个函数可以优化到用一个return语句就能写完,那就可以考虑lambda表达式。
Question1:discount = [0.2, 0.8, 0.6, 10] 该列表里面有一个异常值:10,我们需要将它处理为0.5

discount = list(map(lambda x: x if x<=1 else 0.5,discount))

在这里插入图片描述

Question2:names = ['wenhaha', 'Jack', 'tom'] 我们要将该列表里面的单词变为首字符大写

names = list(map(lambda x: x.capitalize(),names))

在这里插入图片描述

11. 命名规范 - 必不可少

使用PyCharm写代码时,有时候你的命名被它“标黄”了,可能就是命名不规范,有时候也是单词拼错了。

类名:单词首字母大写

class Student:

全局变量名(类变量,在java中相当于static变量):大写字母,单词之间用_分割

import os
USER = os.environ.get('DB_USER')

普通变量:小写字母,单词之间用_分割

num_list = [5, 2, 0]

普通函数:和普通变量一样:

def get_url():
	pass

12. 注意python中的负数整除(2021-7-21更新)

print(-5//2)

在python中结果为 -3,而在C和java中的-5/2的结果是-2

结语

如果大家有任何问题或者想和我交流,请评论或者私信我噢 !

求个赞!我只会心疼giegie!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许愿明天过一面!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值