首页 > 编程语言 >Python从进阶到高级—通俗易懂版(五)

Python从进阶到高级—通俗易懂版(五)

时间:2022-10-27 15:56:28浏览次数:53  
标签:__ None 进阶 推导 Python list 通俗易懂 print my

# ==================================
# Author : Mikigo
# Env    :deepin 20.4 os
# ==================================

自定义序列

1、可切片对象

切片大家都很熟悉,在 Python 基础里面是必学的,对列表使用中括号取值,正切、反切、加步长等都没问题,这里我们主要讲怎么实现一个可切片对象。

隆重请出魔法函数:__getitem__ ,它是我们实现可切片对象的关键。

class AutoTest:

    def __init__(self, name_list):
        self.name_list = name_list

    def __getitem__(self, item):
        return self.name_list[item]
    
AT = AutoTest(["mikigo", "lt", "jjb", "hhz"])

咱们对实例对象切片试试

print(AT[1])
print(AT[2])
lt
jjb

简直没难度哈,对象可以切片了。

这里再补充一点没有用的小知识,实现了 __getitem__ 方法实际上也是一个可迭代的对象了,也就是说可以使用 for 循环。

for i in AT:
    print(i)
mikigo
lt
jjb
hhz

这其实是可迭代对象的一种退而求其次的处理,它找不到迭代协议,但是找到了 __getitem__ ,也可以进行迭代,这点相信 99% 的同学都不知道,没关系哈,关于可迭代对象和迭代器咱们后面会专门讲。

2、列表推导式

列表推导是 Python 提供的一种独有特性,可以用一行代码生成一个列表。

普通操作:

my_list = []
for i in range(10):
    my_list.append(i)

这样生成一个列表,至少需要3行,来看看列表推导式:

my_list = [i for i in rang(10)]

一行就搞定,多么的简洁优雅,而且可读性和性能都非常高,爱了。

还可以加一些逻辑判断和数据处理,以下是项目实例:

app_id_list = [int(_id) for _id in app_id if _id]  # to int

这里要提醒一下,不要为了推导而推导,如果你的逻辑很复杂,加了多重判断和处理,不建议使用推导式,老老实实分开写,因为这样写出来的表达式会很复杂,就失去了我们编码最重要的一点,就是可读性。

3、生成器表达式

前面讲了列表推导式,是用中括号里面写表达式,那把中括号换成小括号是什么呢?好多同学聪明的小脑袋肯定想到了,元组推导式 ... 。

注意元组是不可变序列,没法推导的,小括号的表达式实际上是生成器表达式。

my_gen = (i for i in range(10))

验证一下:

from collections.abc import Generator

print(isinstance(my_gen, Generator))
print(my_gen)
True
<generator object <genexpr> at 0x7f5676c57390>

你看,确实是一个生成器吧。生成器细节,咱们也放到后面讲哈。

4、字典推导式

理解了列表推导式,再来看字典推导式就很简单了。

my_dict = {i: None for i in range(10)}

第一个元素就是字典的 key 和 value,注意字典的key 是唯一的(可哈希),值无所谓。

打印看下

print(my_dict)
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}

就这,简直没难度,还是要注意一点,代码可读性哈,别整复杂了。

tag_dict = {f"{int(i[0]):0>3}": i[1:] for i in ReadCsv.read_csv_by_str(csv_dict.get(app), from_data=False)}

这是项目中的一个实例,感受下,如果再复杂点就建议拆开写了。

标签:__,None,进阶,推导,Python,list,通俗易懂,print,my
From: https://www.cnblogs.com/mikigo/p/16832533.html

相关文章

  • python | 算法-最短路径-dijikstra改进算法
    写在前面:我自己用python练习算法与数据结构的典型算法汇总在这里:汇总-算法与数据结构-python版,欢迎翻阅!1️⃣参考链接:https://github.com/algorithmzuo/algorithmbasic......
  • Python之JSON用法解析
    前景Python编写HDFS服务安装的过程中,需要将构建好的JSON对象输出到文件,采用那种方式更便捷方案1open函数defwriteExecCmdCheckActionsFile(self,out_res,che......
  • Python在接口测试中的应用
    1.介绍接口测试的方式有很多,可以使用的工具有jmeter,postman,soapUI等,也可以自己写代码进行接口测试(Python,java,go等等),工具的使用相对来说都比较简单,开箱即用。但如果接口中定......
  • 一文带你了解 Python 中的继承知识点
    1类继承Python是面向对象的编程语言,因此支持面向对象的三大特性之一:继承。继承是代码重用的一种途径,Python中的继承就像现实生活中的继承一样,子类可以顺利继承父类的属性......
  • Python7-实战
    实战01(修改手机默认语言)1classPhone:2'''手机类'''3def__init__(self,language='英文'):4iflanguage=='英文':5print("智能手......
  • conda管理python环境
    Anaconda使用教程Anaconda详细安装使用教程condacreate-nlearnpython=3//创建一个名为learn的环境并指定python版本为3(最新版本)condaactivatelearn//激活l......
  • python遇到IndexError: only integers, slices (`:`), ellipsis (`...`)……
    完整错误信息如下:IndexError:onlyintegers,slices(​​:​​​),ellipsis(​​...​​​),numpy.newaxis(​​None​​)andintegerorbooleanarraysarevalid......
  • python获取文件夹、文件大小&hiberfil.sys
    跑了个很简单的程序,c盘突然爆炸增加,顿时SSD120G的盘只剩下几个G,所以有需求看看那些文件占用了大量空间。(事先通过360大文件扫描、日期排序分析未发现异常)importosimportsy......
  • python的开源微信接口
    开源微信接口文档地址:​​https://itchat.readthedocs.io/zh/latest/​​​github地址:​​​https://github.com/littlecodersh/itchat​​如下举例:importitchatitchat.......
  • OpenCV-Python learning-13.人脸检测
    如下,调用opencv使用摄像头或视频进行人脸检测,也可以在函数​​recognize(img)​​​传入​​img=cv2.imread('face.jpg')​​​。其中,人脸级联分类器xml文件我引用的是anaco......