Python 优雅写法,让你工作效率翻 2 倍
9

阅读文本大概需要 2.5 分钟

我们都知道,Python 的设计哲学是「优雅」、「明确」、「简单」。这也许很多人选择 Python 的原因。但是有些我收到有些伙伴返回,他写的 Python 并不优雅,甚至很臃肿,那可能是你的姿势不对哦!今天就给大家带来 Python 语句的十大优雅之法。

为多个变量赋值

有时,有多个变量需要赋值,这是你会怎么赋值呢?
常规方法

a = 0
b = 1
c = 2

优雅方法:

a, b, c = 0, 1, 2

序列解包

需要取出列表中的元素,一般我们知道可以通过下标获取具体元素。
常规方法:

info = ['brucepk', 'man', 'python']
name = info[0]
sex = info[1]
tech = info[2]
print(name,sex,tech)

# 结果
brucepk man python

优雅方法:

info = ['brucepk', 'man', 'python']
name,sex,tech = info
print(name,sex,tech)

# 结果
brucepk man python

优雅你的判断语句

我们用判断语句来定义一个绝对值函数
常规方法:

x = -6
if x < 0:
    y = -x
else:
    y = x
print(y)

# 结果
6

优雅方法:

x = -6
y = -x if x<0 else x
print(y)

# 结果
6

区间判断

使用 and 连续两次判断的语句。
常规方法:

score = 82
if score >=80 and score < 90:
    level = 'B'
print(level)

# 结果
B

优雅方法:
使用链式判断

score = 82
if  80 <= score < 90:
    level = 'B'
print(level)

# 结果
B

多个值符合条件判断

多个值任意一个值符合条件即为 True 的情况。
常规方法:

num = 1
if num == 1 or num == 3 or num == 5:
    type = '奇数'
print(type)

# 结果
奇数

优雅方法:
使用关键字 in,让你的语句更优雅。

num = 1
if num in(1,3,5):
    type = '奇数'
print(type)

# 结果
奇数

判断是否为空

常规方法:

A,B,C =[1,3,5],{},''
if len(A) > 0:
    print('A 为非空')
if len(B) > 0:
    print('B 为非空')
if len(C) > 0:
    print('C 为非空')

# 结果
A 为非空

优雅方法:
在之前的文章 零基础学 python 之 if 语句 中讲过,if 后面的执行条件是可以简写的,只要条件 是非零数值、非空字符串、非空 list 等,就判断为 True,否则为 False。

A,B,C =[1,3,5],{},''
if A:
    print('A 为非空')
if B:
    print('B 为非空')
if C:
    print('C 为非空')

# 结果
A 为非空

多条件内容判断至少一个成立

常规方法
用 or 连接多个条件

math,English,computer =90,80,88
if math<60 or English<60 or computer<60:
    print('not pass')

# 结果
not pass

优雅方法:
使用 any 语句。

math,English,computer =90,59,88
if any([math<60,English<60,computer<60]):
    print('not pass')

# 结果
not pass

多条件内容判断全部成立

常规方法:
使用and连接

math,English,computer =90,80,88
if math>60 and English>60 and computer>60:
    print('pass')

# 结果
pass

优雅方法:
使用 all 方法。

math,English,computer =90,80,88
if all([math>60,English>60,computer>60]):
    print('pass')

# 结果
pass

遍历序列的元素和元素下标

常规方法:
使用 for 循环进行遍历元素和下标。

L =['math', 'English', 'computer', 'Physics']
for i in range(len(L)):
    print(i, ':', L[i])

# 结果
0 : math
1 : English
2 : computer
3 : Physics

优雅方法
使用 enumerate 类

L =['math', 'English', 'computer', 'Physics']
for k,v in enumerate(L):
    print(k, ':', v)

# 结果
0 : math
1 : English
2 : computer
3 : Physics

循环语句优化

之前的文章零基础学 Python 之列表生成式中讲过列表生成时的用法,生成 [1x1,2x2,3x3,4x4,5x5]
常规方法:

L = []
for i in range(1, 6):
    L.append(i*i)
print(L) 

#结果:
[1, 4, 9, 16, 25]

优雅方法:
使用列表生成式,一行代码搞定

print([x*x for x in range(1, 6)]) 

#结果:
[1, 4, 9, 16, 25]

欢迎关注我的微信公众号「brucepk」,定期分享 python 干货,后台回复「1024」获取学习资料,包括 Python、Java、人工智能、PMP等资料。
file

以梦为马,不负韶华

讨论数量: 9

使用enumerate函数,这个说法是错的,enumerate是个类,在python中不能见到用括号调用的就相当然认为函数。
严谨一些用type(enumerate) 这个“类”看一下就知道了

>>> type(enumerate)

>>> help(enumerate)
Help on class enumerate in module builtins:

class enumerate(object)
 |  enumerate(iterable[, start]) -> iterator for index, value of iterable
2个月前
pythonstr

你的代码排班看起来好舒服。字体类型,大小,间距都是怎么设置的???

1个月前
cugb04208230

我从非脚本语言转到python,习惯很难改啊,看到一些写法都觉得很新奇

1个月前

@smallcrocdile 嗯,谢谢指出,已修改

1个月前

@pythonstr markdown语法,排版用了自己的一些写作习惯,平时写公众号写得多,都是这种格式,写的多就习惯了

1个月前

@JiaHeng 这都行?

3周前

@JiaHeng 哪个地方有什么不妥吗?大佬

3周前

不错的文章,新手向老手转变必须掌握优雅的方法 :snowflake:

3周前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!