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

    文章

    4422

    浏览量

    67859
  • 代码
    +关注

    关注

    30

    文章

    4977

    浏览量

    74397
  • python
    +关注

    关注

    58

    文章

    4888

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用 powerquad 加速器中的一些功能以及 CMSIS 原始实现中的一些功能?

    )。 如何使用 powerquad 加速器中的一些功能以及 CMSIS 原始实现中的一些功能。 Example: I do not want to call arm_mat_trans_q15 powerquad
    发表于 04-03 06:37

    [VirtualLab] 使用Python运行VirtualLab Fusion光学仿真

    摘要 VirtualLab Fusion允许Python外部访问其建模技术、求解器和结果。这个用例介绍了种使用路径变量和Visual Studio代码Python连接到Virtu
    发表于 03-31 09:39

    S32 Design Studio 有一些代码文件示例,但它在本地计算机中不存在,为什么?

    S32 Design Studio 有一些代码文件示例,但它在本地计算机中不存在。
    发表于 03-17 07:28

    爬壁机器人磁铁的一些常见问题

    爬壁机器人近几年比较火,它是类能够在垂直墙面、天花板、倾斜表面上移动和作业的特种机器人,今天我们不聊其它,只聊下关于磁吸附应用中的磁铁,以下是小编整理的关于爬壁机器人中磁铁的一些常见问题。
    的头像 发表于 01-09 10:06 449次阅读
    爬壁机器人磁铁的<b class='flag-5'>一些</b>常见问题

    C语言中一些令人震惊的结构介绍

    C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么? int a = 5, b = 7, c; c = a+++b; 考察点: 这个问题将作为这个测验的个愉快的结尾
    发表于 12-23 08:15

    关于六类网线一些问题的解答

    今天我们就围绕网友一些常见的关于六类网线的问题进行下汇总式解答: 问 六类网线可以当电源用吗? 答 六类网线并不是设计用于传输电力的电缆,因此般不建议将其用于电源传输。 尽管六类网线的线芯可以
    的头像 发表于 12-09 11:13 771次阅读

    Termux中调试圣诞树Python代码

    在Termux中调试Python代码(以圣诞树立例)非常简单,核心分为环境准备、代码编写、运行调试三个步骤,下面步步教你操作: 、环境准
    发表于 12-09 09:02

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

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

    如果将蜂鸟的risc-v移植到其他的fpga中想实现一些外设功能有什么办法?可以不用操作系统直接添加verilog代码吗?

    请问如果将蜂鸟的risc-v移植到其他的fpga中想实现一些外设功能有什么办法?可以不用操作系统直接添加verilog代码吗?
    发表于 11-10 06:35

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

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

    termux如何搭建python游戏

    termux如何搭建python游戏 Termux搭建Python游戏开发环境的完整指南 、Termux基础环境准备 Termux是款无需root即可在安卓设备上运行的L
    发表于 08-29 07:06

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

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

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

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

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

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

    Debian和Ubuntu哪个好一些

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