让你的Python代码更加Pythonic

简介: 让你的Python代码更加Pythonic

让你的Python代码更加Pythonic

刚开始学习Python的时候,我们就了解了python的编码风格要求,通过python终端方式输入import this可以看到它的具体描述。

img

这就是著名的“python之禅”,简言之,就是要写符合pythonic的代码,简洁、优雅、可读性强。

下面选取了一些常见的Python规范和代码风格,大家可以进行参考和学习。

命名

首先看一下变量的命名规范(pep8)规范:

文件夹: 包名,建议仅使用小写字母命名,不建议使用下划线。

模块: 小写或者小写加下划线连接,比如 module.py、db_convert.py等。

类: 驼峰式,首字母大写,单词直接连接。

class ThisIsAClass(object):
    pass

函数: 小写,用下划线隔开

def this_is_a_func():
    pass

变量: 小写,用下划线隔开

this_is_a_variable = 1

常量:常量名所有字母大写,由下划线连接各个单词,如THIS_IS_A_CONSTANT = 1

语法风格

1.交换a 和 b的数值

其他语言的方法:

a = 5
b = 6
temp = a
a = b
b = temp

python中,更加简洁的方法:

a = 5
b = 6
a, b = b, a
print(a, b)
输出:6 5

2.多个变量赋值

python中可以一行代码,同时给多个变量赋值

a,b,c = 2,5,12

3.合并字符串

传统的字符串合并方法,由于字符串对象不可改变,每次修改会产生一个新的对象,这种方法会消耗很多内存。

list_str = ["hello ", "python", "!"]
result = ""
for i in list_str:
    result+=i
print(result)

python中,使用join()方法更加高效,注意join()方法只适用于元素是字符串的列表、元组、集合等类型。

list_str = ["hello ", "python", "!"]
result = "".join(list_str)
print(result)

输出:hello python!

4.列表去重

使用集合的唯一性,对列表进行去重

a = [1, 2, 3, 1, 2,3 , 1, 3, 2, 4, 1, 3, 4, 5, 6, 5, 4, 4, 3, 6]
lst = list(set(a))
print(lst)
输出:

5.if/else 三目运算

python支持的三目运算格式:

为真时的结果 if 判断条件 else 为假时的结果(注意,没有冒号)

a=4
st = "a大于4" if a>4 else "a小于等于4"
print(st)
输出:a小于等于4

6.enumerate

enumerate()是 Python 的内置函数。可以将一个可迭代的(Iterable)对象(列表、字符串等)组成一个索引序列,可以同时获得索引和值。

获取列表元素及索引

# 一般写法
names = ['Bob', 'Alice', 'Guido']
n = len(names)
for i in range(n):
    print(f'{i} {names[i]}')

# 使用enumerate()函数
names = ['Bob', 'Alice', 'Guido']
for index, value in enumerate(names):
    print(f'{index}: {value}')
输出:
0: Bob
1: Alice
2: Guido

7.解包

解包在英文里叫做 Unpacking,就是将容器里面的元素逐个取出来。

解压列表/元组的元素,赋值给不同的变量

a, b, c = [1,2,3]
print(a, b, c)
输出:1 2 3

函数中的解包操作

在函数调用中,* 能够将元组或列表解包成不同的参数。

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

8.列表推导式

列表推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]

[if 条件表达式] 可以省略。

生成一个列表,列表元素分别为 [1x1,2x2,3x3……nxn],假设n = 10

# 一般方法
lst = []
for i in range(1, 11):
    lst.append(i*i)
print(lst)
输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 列表推导式
lst = [i*i for i in range(1,11)]
print(lst)
输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

要求返回的序列中不存在偶数项

lst = [i*i for i in range(1, 11) if i % 2 != 0]
print(lst)
输出:[1, 9, 25, 49, 81]

9.使用关键字in

  • in:如果在指定的序列中找到值返回 True,否则返回 False。
  • not in:如果在指定的序列中没有找到值返回 True,否则返回 False。

判断元素是否在列表中

number=[1,2,3,4,5]
if 1 in number:
    print("1 in number")
if 0 not in number:
    print("0 not in number")

在 for 循环中,获取列表、元组、字典的每一项:

list = [2, 3, 4]
for num in list:
    print (num)
    
dic = {"name": "xiaoming", "age": 18}
for k, v in dic.items():
    print(k, v)

10.使用zip同步处理多个列表

zip() 函数是 Python 内置函数,它可以将多个序列(列表、元组、字典、集合、字符串等)中对应位置的元素重新组合,生成一个个新的元组。

z = zip([1,2,3],[3,4,5])
print(list(z))
输出:[(1, 3), (2, 4), (3, 5)]

11.真值判断

当判断一个变量是否为 True 的时候,Python 具有自身独特的方式,不需要写出判断条件,只需要在 if 或 while 关键字后面直接写上该对象即可。

常见的真值为False的情况:

  • 常量:None and False.
  • 数值0值: 0, 0.0, 0j
  • 序列或者集合为空:'', (), [], {}, set(), range(0)
# 对于布尔对象,建议这样写
x = True
if x:
    pass
# 不建议这样写
if x == True:
    pass

lst = []
# 对于列表对象,建议这样写
if lst:
    pass
# 不建议这样写
if len(lst) != 0:
    pass

更多关于pythonic的写法,可以参考《effctive python》这本书,还有Python官网的代码规范要求 https://www.python.org/dev/peps/pep-0008/

目录
相关文章
|
9天前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
21 6
|
2天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
28 8
|
9天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
31 11
|
11天前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
29 11
|
7天前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
8天前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
31 6
|
12天前
|
Python
如何提高Python代码的可读性?
如何提高Python代码的可读性?
25 4
|
12天前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。
|
16天前
|
设计模式 监控 程序员
Python中的装饰器:功能增强与代码复用的利器####
本文深入探讨了Python中装饰器的工作原理、应用场景及其在提升代码可读性、减少重复劳动方面的优势。不同于传统方法的冗长和复杂,装饰器提供了一种优雅且高效的方式来增强函数或方法的功能。通过具体实例,我们将揭示装饰器如何简化错误处理、日志记录及性能监控等常见任务,使开发者能够专注于核心业务逻辑的实现。 ####
|
15天前
|
存储 设计模式 缓存
Python中的装饰器:代码的魔法增强剂####
本文将深入探讨Python语言中一个强大而灵活的特性——装饰器。不同于传统的函数调用,装饰器提供了一种优雅的方式来扩展或修改函数行为,无需直接修改原函数代码。我们将通过实例分析,揭示装饰器的定义、工作原理及其在实际项目中的应用价值,旨在帮助开发者更好地理解和利用这一高级功能,提升代码的可读性与维护性。 ####