分享6 个值得收藏的 Python 代码
作者:秃头程序员 发布时间:2022-12-31 05:09:57
1、类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢?
class test(object): def __init__(self): print("test -> __init__") def __new__(cls): print("test ->__new__") return super().__new__(cls)a = test()
运行结果如下:
test ->__new__test -> __init__
再来看另一个例子:
class test2(object): def __init__(self): print("test2 -> __init__") def __new__(cls): print("test2 ->__new__") return object() b = test2()
运行结果如下:
test2 ->__new__
这里给出官方的解释:init
作用是类实例进行初始化,第一个参数为 self,代表对象本身,可以没有返回值。new 则是返回一个新的类的实例,第一个参数是 cls 代表该类本身,必须有返回值。很明显,类先实例化才能产能对象,显然是 new
先执行,然后再 init
,实际上,只要 new 返回的是类本身的实例,它会自动调用 init 进行初始化。但是有例外,如果 new 返回的是其他类的实例,则它不会调用当前类的 init。
下面我们分别输出下对象 a 和对象 b 的类型:
print( type(a))#<class '__main__.test'> print( type(b))#<class 'object'>
可以看出,a 是 test 类的一个对象,而 b 就是 object
的对象。
2、map 函数返回的对象
map()
函数第一个参数是 fun,第二个参数是一般是 list,第三个参数可以写 list,也可以不写,作用就是对列表中 list 的每个元素顺序调用函数 fun
。
>>> b=map(lambda x:x*x,[1,2,3])>>> [i for i in b][1, 4, 9]>>> [i for i in b][]>>>
有没有发现,第二次输出 b 中的元素时,发现变成空了。原因是 map()
函数返回的是一个迭代器,并用对返回结果使用了 yield,这样做的目的在于节省内存。
举个例子:
#encoding:UTF-8 def yield_test(n): for i in range(n): yield call(i) #做一些其它的事情 def call(i): return i*2 #使用for循环 x = yield_test(5)print([i for i in x])print([i for i in x])
执行结果为:
[0, 2, 4, 6, 8] []
这里如果不用 yield
,那么在列表中的元素非常大时,将会全部装入内存,这是非常浪费内存的,同时也会降低效率。
3、正则表达式中 compile 是否多此一举?
比如现在有个需求,对于文本
中国,用正则匹配出标签里面的“中国”,其中 class 的类名是不确定的。
有两种方法,代码如下:
>>> import re>>> text = '<div class="nam">中国</div>'>>> #方法一...>>> re.findall('<div class=".*">(.*)</div>',text)['中国']>>> #方法二...>>> regex='<div class=".*">(.*)</div>'>>> pattern = re.compile(regex)>>> re.findall(pattern,text)['中国']>>>
这里为什么要用 compile
多写两行代码呢? 原因是 compile
将正则表达式编译成一个对象,加快速度,并重复使用。
4、[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
>>> [j for i in [[1,2],[3,4],[5,6]] for j in i][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)<zip object at 0x000001A20201AA08>>>> for i in zip(a,b):... print(i)...(1, 3
来源:https://juejin.cn/post/7049251735210033189
猜你喜欢
- 引言Python 是一个强大的语言,提供了许多内置函数以帮助开发者编写高效、简洁的代码。在这篇文章中,我们将深入探讨三个内置函数:map、f
- 疫情终于有所好转了,感谢所有的为之奋斗的白衣天使们,你们是最棒的!赞!白衣天使们在前线奋战,我们也总不能总在家里躺着做贡献,也要加强学习,争
- python中break、continue 、exit() 、pass区分1、break:跳出循环,不再执行Python break语句,就
- 结合这个例子分析一下结果:结合以往C语言的基础,画了一张图来解释为什么会有上面这些值的出现。先查看下Go中的这两个运算符是啥吧。①对于所有带
- 本文实例讲述了微信小程序基于slider组件动态修改标签透明度的方法。分享给大家供大家参考,具体如下:1、效果展示2、关键代码index.w
- 本文主要介绍了OpenCV全景图像拼接的实现示例,分享给大家,具体如下:left_01.jpgright_01.jpgStitcher.py
- 分享一个python脚本,使用代理ip来访问网页,方便抓取数据什么的~并自动验证ip是否可以用什么情况下会用到 * ?比如你要抓取一个网站
- 将两个嵌套for循环写成一个列表生成式如,有一个嵌套列表,a=[[1,2],[3,4],[5,6]],要提取列表里的每一个元素用for循环处
- python的列表list可以用for循环进行遍历,实际开发中发现一个问题,就是遍历的时候删除会出错,例如l = [1,2,3,4]for
- 创建视图创建视图success.blade.php<!doctype html><html lang="{{ s
- 前言Python处理Excel的包是openpyxl,其支持操作的文件类型为:.xlsx, .xlsm, .xltx, .xltmpip i
- PHP Session 变量当运行一个应用程序时,你会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程
- 1.1 准备工作安装tableau安装MySQL数据库1.2 驱动包下载tableau连接MySQL数据库需要下载mysql对应的版本ODB
- 1 用mysql客户端登入 2 选择数据库 mysql>use test 3 查询当前数据库有哪些存储过程 mysql>show
- 问题: 1. 后台管理员只有一个用户: admin, 密码: admin 2. 当管理员登陆成功后, 可以管理前台会员信
- 今天写一个在windows下批量修改文件名的python脚本,用到文件的遍历。用python进行文件遍历有多种方法,这里列举并说明一下。os
- 上个星期,大佬分享了一个验证身份证号合法性的库:id_validator,没空去试着用一下看看,今天有点时间,来试着用下这个库。1、首先,要
- 一、分工和流程在土豆网,以项目开发为核心,谁都可以带项目,担任项目经理。一个典型的土豆网项目中,当进入正式开发阶段,通常参与者包括:1名设计
- 1.今天在看JavaScript学习指南的时候做的课后习题,也因此详细的对函数的传入参数进行比较深入的研究.题目如下:函数如何才能修改其作用
- 加上这句代码:print torch.cuda.is_available()判断完毕!说说在pytorch中如何查看gpu信息吧~为什么将数