什么是Pythonic?如何Pythonic?
什么是Pythonic?就是让你的Python代码看上去更简洁、明了、规范。建议大家写Python用Pycharm,它会按PEP8规范提示大家的写法,就是代码下面会有波浪线或问号,然后按IDE提示的方法修改即可。
既然说到规范,先说一下Python的命名规范:
文件名
小写字母,单词之间用_分割:test_site.py
类名
单词首字母大写,即驼峰式:TestSite
全局变量
大写字母,单词之间用_分割:TEST_SITE
普通变量/函数
小写字母,单词之间用_分割:test_engineer_site
get_site()
个人建议,如无特殊需求,建议大家使用Python3.8(2022.5.29)
第一,版本总归要升上来的,用的版本越高,可用的特性也越多;第二,Python3.9目前稍微有点新,有些三方包还不支持。
下面列出一些Pythonic的例子,大家收藏并多多练习:
1.一行赋值多个变量
# 其他语言风格
test = 1
engineer = 2
site = 3
# Pythonic
test, engineer, site = 1, 2, 3
2.一行代码交换两个变量
# 其他语言风格
temp = test
test = engineer
engineer = temp
# Pythonic
test, engineer= engineer, test
3.拼接字符串
# 其他语言风格
alist = ["测试", "工程师", "小站"]
res = alist[0] + alist[1] + alist[2] #或是通过循环加
# Pythonic
res = ''.join(alist) # 不仅代码少,速度还快
4.使用操作符in
# 不推荐
if word == "测试" or word == "工程师" or word == "小站":
print("在列表中")
alist = ["测试", "工程师", "小站"]
for i in range(len(alist)):
print(alist[i])
# Pythonic
if word in ["测试", "工程师", "小站"]:
print("在列表中")
if word not in ["测试", "工程师", "小站"]:
print("不在列表中")
alist = ["测试", "工程师", "小站"]
for i in alist:
print(i)
# 遍历字典的键-值(key-value)
for k, v in dic.items():
print(k, v)
5.链式比较
# 不推荐
if age>25 and age<35:
print("苦练技术不怕互联网公司年龄歧视")
if age1==38 and age2==38 and age3==38 and age4==38:
print("苦练技术不怕互联网公司年龄歧视")
# Pythonic
if 25 <age <35:
print("苦练技术不怕互联网公司年龄歧视")
if age1==age2==age3==age4==38:
print("苦练技术不怕互联网公司年龄歧视")
6.列表去重
# Pythonic
a = [1, 2, 3, 1, 2, 3]
a = list(set(a))
7.判断真假
# 不推荐
if a == True:
print("a为True")
if a is True:
print("a为True")
if len(alist) != 0:
print("alist不为空")
if alist != []:
print("alist不为空")
if astr != '':
print("astr不是空字符串")
# Pythonic
if a:
print("a为True")
if not a:
print("a为False")
if alist:
print("alist不为空")
if astr:
print("astr不是空字符串")
if not astr:
print("astr是空字符串")
8.if else 三目运算
# 其他语言风格
if age < 18:
flag = "未成年"
else:
flag = "成年"
# Pythonic
flag = "未成年" if age < 18 else "成年" # 4行变1行
9.使用f''接拼字符串和变量
# 不推荐
a, b = "测试", "小站"
res = a + "工程师" + b
# Pythonic
a, b = "测试", "小站"
res = f"{a}工程师{b}"
10.使用enumerate遍历列表的索引和值
# 不推荐
alist = ["测试", "工程师", "小站"]
for i in range(len(alist)):
print(f'{i}:{alist[i]}')
# Pythonic
alist = ["测试", "工程师", "小站"]
for index, word in enumerate(alist):
print(f'{index}:{word}')
11.列表推导式
# 其他语言风格
alist = [5, 2, 7, 0, 1, 8]
new_list = []
for i in alist:
if i > 4:
new_list.append(i)
# Pythonic
alist = [5, 2, 7, 0, 1, 8]
new_list = []
new_list = [i for i in alist if i > 4]
12.获取字典元素
# 不推荐
adic = {"apple": 4, "banana": 6, "pear": 3}
apple_num = adic["apple"]
egg_num = adic["egg"] # 该句会报错
# Pythonic
# 不推荐
adic = {"apple": 4, "banana": 6, "pear", 3}
apple_num = adic.get("apple")
egg_num = adic.get("egg", 0) # key不存在时,返回值为指定的0
13.遍历字典的键(key)
# 不推荐
adic = {"apple": 4, "banana": 6, "pear", 3}
for key in adict.keys():
print(key)
# Pythonic
adic = {"apple": 4, "banana": 6, "pear", 3}
for key in adict:
print(key)
14.解包
# 解包列表、元组
test, engineer, site = ["测试", "工程师", "小站"] # ("测试", "工程师", "小站")也支持
# 更复杂的列表解包
a, *rest = [1, 2, 3]
# 输出:a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# 输出:a = 1, middle = [2, 3], c = 4
# 函数调用对列表解包
def func(a, b, c, d):
print(a, b, c, d)
args = [1, 2, 3, 4]
func(*args)
# 输出:1 2 3 4
# 函数调用对字典解包
# ** 会以键/值的形式解包一个字典
def func(a, b, c, d):
print(a, b, c, d)
kwargs = {"a": 1, "b": 2, "c": 3, "d": 4}
func(**kwargs)
# 输出:1 2 3 4
15.使用with打开文件
# 不推荐
f = open("file.txt")
try:
data = f.read()
# ...
finally:
f.close()
# Pythonic
# 使用with最后会自动调用close()方法
with open("file.txt") as f:
data = f.read()
# ...
16.使用zip()同时处理多个列表
# 不推荐
a, b = [1,2,3], [3,4,5]
for i in range(len(a)):
print(a[i], b[i])
# Pythonic
a, b = [1,2,3], [3,4,5]
z = zip(a, b)
for x, y in z:
print(x, y)
17.any()/all()函数
# 不推荐
alist = [0,None,'',5]
for i in alist:
if i:
print('至少有一个为真')
alist = [0,None,'',5]
flag = True
for i in alist:
if not i:
flag = False
if flag:
print('全部为真')
# Pythonic
# any():至少有一个为真则返回真
if any(alist):
print('至少有一个为真')
# all():全部为真才返回真
if all(alist):
print('全部为真')
可以看到,使用Pythonic写出的代码量,是不是比其他语言风格的代码量要少的多,这也就是为啥Python写起来快的原因,而且方便。
---------------------------------------------------------------------------------
关注微信公众号即可在手机上查阅,并可接收更多测试分享~