什么是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写起来快的原因,而且方便。

 

---------------------------------------------------------------------------------

关注微信公众号即可在手机上查阅,并可接收更多测试分享~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章