0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一些值得玩味的python代码

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-30 17:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

选取了 6 个自己认为值得玩味的 python 代码,希望对正在学习 python 的你有所帮助。

1、类有两个方法,一个是 __new__,一个是 __init__,有什么区别,哪个会先执行呢?

classtest(object):
def__init__(self):
print("test->__init__")

def__new__(cls):
print("test->__new__")
returnsuper().__new__(cls)

a=test()

运行结果如下:

test->__new__
test->__init__

再来看另一个例子

classtest2(object):
def__init__(self):
print("test2->__init__")

def__new__(cls):
print("test2->__new__")
returnobject()

b=test2()

运行结果如下:

test2->__new__

这里给出官方的解释:__init__ 作用是类实例进行初始化,第一个参数为 self,代表对象本身,可以没有返回值。__new__ 则是返回一个新的类的实例,第一个参数是 cls 代表该类本身,必须有返回值。很明显,类先实例化才能产能对象,显然是 __new__ 先执行,然后再 __init__,实际上,只要 __new__ 返回的是类本身的实例,它会自动调用 __init__ 进行初始化。但是有例外,如果 __new__ 返回的是其他类的实例,则它不会调用当前类的 __init__。下面我们分别输出下对象 a 和对象 b 的类型:

print(type(a))
#

print(type(b))
#'object'>'__main__.test'>

可以看出,a 是 test 类的一个对象,而 b 就是 object 的对象。

参考文档:

https://docs.python.org/3/reference/datamodel.html?highlight=__new__#object.__new__

2、map 函数返回的对象

map()函数第一个参数是 fun,第二个参数是一般是 list,第三个参数可以写 list,也可以不写,作用就是对列表中 list 的每个元素顺序调用函数 fun 。

>>>b=map(lambdax:x*x,[1,2,3])
>>>[iforiinb]
[1,4,9]
>>>[iforiinb]
[]
>>>

有没有发现,第二次输出 b 中的元素时,发现变成空了。原因是 map() 函数返回的是一个迭代器,并用对返回结果使用了 yield,这样做的目的在于节省内存。
举个例子:

#encoding:UTF-8
defyield_test(n):
foriinrange(n):
yieldcall(i)
#做一些其它的事情

defcall(i):
returni*2

#使用for循环
x=yield_test(5)
print([iforiinx])
print([iforiinx])

执行结果为:

[0,2,4,6,8]
[]

这里如果不用 yield,那么在列表中的元素非常大时,将会全部装入内存,这是非常浪费内存的,同时也会降低效率。

3、正则表达式中 compile 是否多此一举?

比如现在有个需求,对于文本

中国

,用正则匹配出标签里面的“中国”,其中 class 的类名是不确定的。有两种方法,代码如下:

>>>importre
>>>text='中国'
>>>#方法一
...
>>>re.findall('(.*)',text)
['中国']
>>>#方法二
...
>>>regex='(.*)'
>>>pattern=re.compile(regex)
>>>re.findall(pattern,text)
['中国']
>>>

这里为什么要用 compile 多写两行代码呢?原因是 compile 将正则表达式编译成一个对象,加快速度,并重复使用。

4、[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]

>>>[jforiin[[1,2],[3,4],[5,6]]forjini]
[1,2,3,4,5,6]
>>>

5、一行代码将字符串 "->" 插入到 "abcdefg"中每个字符的中间

>>>"->".join("abcdef")
'a->b->c->d->e->f'
>>>

这里也建议多使用 os.path.join() 来拼接操作系统的文件路径。

6、zip 函数

zip() 函数在运算时,会以一个或多个序列(可迭代对象)做为参数,返回一个元组的列表。同时将这些序列中并排的元素配对。zip() 参数可以接受任何类型的序列,同时也可以有两个以上的参数;当传入参数的长度不同时,zip 能自动以最短序列长度为准进行截取,获得元组。

>>>a=[1,2]
>>>b=(3,4)
>>>zip(a,b)

>>>foriinzip(a,b):
...print(i)
...
(1,3)
(2,4)
>>>a="ab"
>>>b="xyz"
>>>foriinzip(a,b):
...print(i)
...
('a','x')
('b','y')
>>>objectat0x000001a20201aa08>

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66837
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73147
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89581
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    贴片电容精度J±5%的一些详细知识

    贴片电容精度J±5%表示电容的实际值与标称值之间的偏差范围在±5%以内 ,以下是关于贴片电容精度J±5%的一些详细知识: 、精度等级含义 J±5% :字母“J”在贴片电容的标识中通常表示标称精度
    的头像 发表于 11-20 14:38 135次阅读
    贴片电容精度J±5%的<b class='flag-5'>一些</b>详细知识

    对浮点指令扩展中一些问题的解决与分享

    出现无法写的情况。 结论 以上就是我们组在扩展浮点指令中出现的一些问题,这些问题总体上归结于对蜂鸟的代码没有整体性的把握,对内容的掌握程度还不够。在后续的工作中应注意理清功能的整体架构而对所有的相关部分进行修改。
    发表于 10-24 11:47

    Python中字符串逆序有几种方式,代码是什么

    对于个给定的字符串,逆序输出,这个任务对于python来说是种很简单的操作,毕竟强大的列表和字符串处理的一些列函数足以应付这些问题 了,今天总结了
    的头像 发表于 08-28 14:44 784次阅读

    求助,关于TC387使能以及配置SOTA 中一些问题求解

    你好, 之前我拿到贵司给个demo,里面有一些使能以及配置SWAP的代码, 这里有些疑问 问题1. 判断SOTA功能是否生效,demo中使用的是 SCU_STMEM1中的bit位, 代码
    发表于 08-08 07:31

    从初学到进阶:树莓派上最适合你的代码编辑器推荐!

    之前,你需要安装一些必备工具,代码编辑器便是其中之。树莓派系统自带了一些代码编辑器,它们功能良好,足以满足基本需求。不过,如果你需要更高级
    的头像 发表于 05-15 16:20 789次阅读
    从初学到进阶:树莓派上最适合你的<b class='flag-5'>代码</b>编辑器推荐!

    Debian和Ubuntu哪个好一些

    兼容性对比Debian和Ubuntu哪个好一些,并为您揭示如何通过RAKsmart服务器释放Linux系统的最大潜能。
    的头像 发表于 05-07 10:58 853次阅读

    如何添加一些网络上的库到mpy固件的说明或手册教程?

    下有没有关于如何添加一些网络上的库到mpy固件的说明或手册教程? 问题2: 关于mpy的image库在哪里能了解学习内部代码,只了解一些python,想知道怎么从c转换成mpy能调用的
    发表于 04-29 08:16

    树莓派在自动化控制项目中的一些潜在应用

    自动化控制项目中的一些潜在应用。之前,我们已经为Arduino平台探讨了相同的话题。我们确定Arduino是个出色的教育工具,但由于一些限制,它无法在工业环境中完全
    的头像 发表于 03-25 09:45 477次阅读
    树莓派在自动化控制项目中的<b class='flag-5'>一些</b>潜在应用

    零基础入门:如何在树莓派上编写和运行Python程序?

    种非常有用的编程语言,其语法易于阅读,允许程序员使用比汇编、C或Java等语言更少的代码行。Python编程语言最初实际上是作为Linux的脚本语言而开发的。Py
    的头像 发表于 03-25 09:27 1524次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    Python在嵌入式系统中的应用场景

    你想把你的职业生涯提升到个新的水平?Python在嵌入式系统中正在成为股不可缺少的新力量。尽管传统上嵌入式开发更多地依赖于C和C++语言,Python的优势在于其简洁的语法、丰富的
    的头像 发表于 03-19 14:10 1190次阅读

    在i.MX RT 1176上正常运行代码时与使用IAR调试代码时存在一些奇怪的差异,为什么?

    我在 i.MX RT 1176 上正常运行代码时的行为与使用 IAR 调试代码时的行为之间存在一些奇怪的差异,并注意到这是由于堆栈指针的初始化方式造成的。 我的重置向量表将其指向 DTC 的顶部
    发表于 03-17 07:26

    创建了用于OpenVINO™推理的自定义C++和Python代码,从C++代码中获得的结果与Python代码不同是为什么?

    创建了用于OpenVINO™推理的自定义 C++ 和 Python* 代码。 在两个推理过程中使用相同的图像和模型。 从 C++ 代码中获得的结果与 Python*
    发表于 03-06 06:22

    使用Python实现xgboost教程

    使用Python实现XGBoost模型通常涉及以下几个步骤:数据准备、模型训练、模型评估和模型预测。以下是个详细的教程,指导你如何在Python中使用XGBoost。 1. 安装XGBoost
    的头像 发表于 01-19 11:21 2214次阅读

    AN29-关于DC-DC转换器的一些想法

    电子发烧友网站提供《AN29-关于DC-DC转换器的一些想法.pdf》资料免费下载
    发表于 01-08 13:57 0次下载
    AN29-关于DC-DC转换器的<b class='flag-5'>一些</b>想法

    华为云 Flexus X 实例下的场景体验——小企业使用 Python 语言——超迅速搭建简单公网 API 接口服务

      前言 小企业为了快速搞定一些接口功能如果不使用 Python 的话相对来说复杂度还是很高的,这里我来通过【华为云 Flexus X 实例】来迅速的搭建Python 的 Web
    的头像 发表于 12-27 13:46 855次阅读
    华为云 Flexus X 实例下的场景体验——小企业使用 <b class='flag-5'>Python</b> 语言——超迅速搭建简单公网 API 接口服务