您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

让你的Python代码更加Pythonic

时间:2022-01-25 09:37:59  来源:  作者:Python林路

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

让你的Python代码更加Pythonic

 

这就是著名的“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

让你的Python代码更加Pythonic

 

 

语法风格

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
让你的Python代码更加Pythonic

 

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)]
让你的Python代码更加Pythonic

 

 

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的写法,可以参考Python官网的代码规范要求
https://www.python.org/dev/peps/pep-0008/。

原文链接:
https://mp.weixin.qq.com/s/fiqV_X7Aoeeq_gLEivDwLg



Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  Tags: Python  点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  Tags: Python  点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  Tags: Python  点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  Tags: Python  点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  Tags: Python  点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  Tags: Python  点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  Tags: Python  点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  Tags: Python  点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  Tags: Python  点击:(28)  评论:(0)  加入收藏
假设某日我开了一家空调公司,暂且就叫他天强空调安装设备公司吧,假装自己有公司,接了一单大生意,就是给甘肃省的各个高校安装空调(其实这边的气候基本用不到空调,就是假想一下),那么...【详细内容】
2022-07-01  Tags: Python  点击:(33)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
站内最新
站内热门
站内头条