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

1
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

再来看另一个例子:

1
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 的类型:

1
print( type(a))​​​
#<class '__main__.test'>​ ​​
print( type(b))
​​​#<class 'object'>

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

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

1
>>> 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,这样做的目的在于节省内存。

举个例子:

1
#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 的类名是不确定的。

有两种方法,代码如下:

1
>>> 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]

1
>>> [j for i in [[1,2],[3,4],[5,6]] for j in i]​​​[1, 2, 3, 4, 5, 6]​​​>>>

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

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

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

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

1
>>> a=[1,2]​​​
>>>> b=(3,4)​​​
>>>> zip(a,b)​​​<zip object at 0x000001A20201AA08>​​​
>>>> for i in zip(a,b):​​​...     print(i)​​​...​​​(1, 3

到此这篇关于分享6 个值得收藏的 Python 代码的文章就介绍到这了.

分享6 个值得收藏的 Python 代码相关推荐

  1. 几个有趣又值得学习的 python 代码,分享给大家一起学习

    先选取了 几个自己认为值得玩味的 python 代码,希望对正在学习 python 的你有所帮助. 1.类有两个方法,一个是 __new__,一个是 __init__,有什么区别,哪个会先执行呢? 运 ...

  2. 推荐|45个值得收藏的Python优质资源(附链接)

    热门资源博客 Mybridge AI 比较了18000个关于Python的项目,并从中精选出45个最具竞争力的项目.我们进行了翻译,在此一并送上. 这份清单中包括了各不相同的20个主题,以及一些资深程 ...

  3. 6 个值得玩味的 Python 代码

    先选取了 6 个自己认为值得玩味的 python代码,希望对正在学习 python 的你有所帮助. 1.类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢? class tes ...

  4. (盘点)25个值得收藏的Python文本处理案例

    今天主要跟大家整理了25个值得收藏的Python文本处理案例.Python 处理文本是一项非常常见的功能,可以收藏起来,总会用到的,想要了解更多的关于python知识的,领取免费资源的,可以点击这个链 ...

  5. 分享几段祖传的 Python 代码,拿来直接使用!

    作者 | 周萝卜 来源 | 萝卜大杂烩 今天分享几段工作生活中常用的代码,都是最为基础的功能和操作,而且大多还都是出现频率比较高的,很多都是可以拿来直接使用或者简单修改就可以放到自己的项目当中 日期生 ...

  6. 百余个实用网站,一次性分享出来,值得收藏。

    文章目录 1.搞学习 2.找书籍 3.冷知识 / 黑科技 4.写代码 5.资源搜索 6.小工具 7.导航页(工具集) 8.看视频 9.学设计 10.搞文档 11.找图片 12.版权声明 130余个实用 ...

  7. 顶级黑客分享的30个极简Python代码,拿走就能用!

    学 Python 怎样才最快,当然是实战各种小项目,只有自己去想与写,才记得住规则. 本文是 30 个 Python 小任务,初学者可以尝试着自己实现. 同样也是 30 段代码,Python 开发者也 ...

  8. 分享几段祖传的Python代码,拿来直接使用!

    今天分享几段工作生活中常用的代码,都是最为基础的功能和操作,而且大多还都是出现频率比较高的,很多都是可以拿来直接使用或者简单修改就可以放到自己的项目当中 日期生成 很多时候我们需要批量生成日期,方法有 ...

  9. 分享几段祖传的Python代码,拿来直接使用

    今天分享几段工作生活中常用的代码,都是最为基础的功能和操作,而且大多还都是出现频率比较高的,很多都是可以拿来直接使用或者简单修改就可以放到自己的项目当中 日期生成 很多时候我们需要批量生成日期,方法有 ...

最新文章

  1. iOS 11开发教程(十九)iOS11应用视图美化按钮之设置按钮的外观
  2. Saltstack 介绍、安装、配置(一)
  3. 架构 php_十年PHP架构师的成长之路,程序员必备
  4. 字符大小端aix linux,long, unsigned long不是跨平台的(慎用)
  5. 【转】.NET Remoting
  6. mysql导出数据 程序_mysql导出数据
  7. SLAM的前世今生 终于有人说清楚了 | 硬创公开课
  8. Python绘制柱状图显示中国式过马路方式
  9. Java为什么不允许覆盖静态方法?
  10. matlab 计算矩阵a的离散余弦变换
  11. 【2020.2.29更新】高通蓝牙芯片QCC3003,QCC3008 学习视频教材
  12. 三级等级保护之安全管理中心
  13. 图中奇度点的数量不可能有奇数个的证明
  14. 电子元器件识别(图解)
  15. iApp免费后台:云A后台
  16. keil5新建STM32工程文件--实践篇手把手教学(以STM32F103为例)
  17. 微信,支付宝支付,微信公众号小程序授权等
  18. Windbg 调试内存泄漏
  19. 电脑数据信息安全常识
  20. Kettle--java代码组件实现密码加密(BCryptPasswordEncoder)

热门文章

  1. 66篇论文入选CVPR 2021,商汤的秘籍竟是“大力出奇迹”
  2. 准确率可提升50%以上,Facebook用迁移学习改进代码自动补全
  3. 基于Python分析深圳程序员工资有多高?
  4. 你听过Oracle中rownum用法吗?
  5. Django源码分析9:model.py表结构的初始化概述
  6. 刷墙(左蓝右红或同一色)
  7. pandas案例分析
  8. 爬虫之利用requests.session进行状态保持
  9. 前沿 | 一文详解自动驾驶激光雷达和摄像头的数据融合方法
  10. 一份火爆国外的PyCharm快捷键和Python代码速查表