让你的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/

目录
相关文章
|
2天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
5天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
2天前
|
Python
探索Python中的装饰器:简化代码,提升效率
【10月更文挑战第39天】在编程的世界中,我们总是在寻找使代码更简洁、更高效的方法。Python的装饰器提供了一种强大的工具,能够让我们做到这一点。本文将深入探讨装饰器的基本概念,展示如何通过它们来增强函数的功能,同时保持代码的整洁性。我们将从基础开始,逐步深入到装饰器的高级用法,让你了解如何利用这一特性来优化你的Python代码。准备好让你的代码变得更加优雅和强大了吗?让我们开始吧!
7 1
|
7天前
|
设计模式 缓存 监控
Python中的装饰器:代码的魔法增强剂
在Python编程中,装饰器是一种强大而灵活的工具,它允许程序员在不修改函数或方法源代码的情况下增加额外的功能。本文将探讨装饰器的定义、工作原理以及如何通过自定义和标准库中的装饰器来优化代码结构和提高开发效率。通过实例演示,我们将深入了解装饰器的应用,包括日志记录、性能测量、事务处理等常见场景。此外,我们还将讨论装饰器的高级用法,如带参数的装饰器和类装饰器,为读者提供全面的装饰器使用指南。
|
2天前
|
存储 缓存 监控
掌握Python装饰器:提升代码复用性与可读性的利器
在本文中,我们将深入探讨Python装饰器的概念、工作原理以及如何有效地应用它们来增强代码的可读性和复用性。不同于传统的函数调用,装饰器提供了一种优雅的方式来修改或扩展函数的行为,而无需直接修改原始函数代码。通过实际示例和应用场景分析,本文旨在帮助读者理解装饰器的实用性,并鼓励在日常编程实践中灵活运用这一强大特性。
|
7天前
|
存储 算法 搜索推荐
Python高手必备!揭秘图(Graph)的N种风骚表示法,让你的代码瞬间高大上
在Python中,图作为重要的数据结构,广泛应用于社交网络分析、路径查找等领域。本文介绍四种图的表示方法:邻接矩阵、邻接表、边列表和邻接集。每种方法都有其特点和适用场景,掌握它们能提升代码效率和可读性,让你在项目中脱颖而出。
18 5
|
5天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
11 2
|
7天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
20 4
|
8天前
|
缓存 开发者 Python
探索Python中的装饰器:简化和增强你的代码
【10月更文挑战第32天】 在编程的世界中,简洁和效率是永恒的追求。Python提供了一种强大工具——装饰器,它允许我们以声明式的方式修改函数的行为。本文将深入探讨装饰器的概念、用法及其在实际应用中的优势。通过实际代码示例,我们不仅理解装饰器的工作方式,还能学会如何自定义装饰器来满足特定需求。无论你是初学者还是有经验的开发者,这篇文章都将为你揭示装饰器的神秘面纱,并展示如何利用它们简化和增强你的代码库。
|
7天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
16 2