分享6 个值得收藏的 Python 代码

目录
  • 1、类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢?
  • 2、map 函数返回的对象
  • 3、正则表达式中 compile 是否多此一举?
  • 4、[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
  • 5、一行代码将字符串 "->" 插入到 "abcdefg"中每个字符的中间
  • 6、zip 函数

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

到此这篇关于分享6 个值得收藏的 Python 代码的文章就介绍到这了,更多相关值得收藏的 Python 代码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python扑克牌21点游戏实例代码

    废话还是说太多了 直接上代码 import random import sys # 牌面列表 card_code = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] # 花色列表 card_symbol = ['', '', '', ''] # 游戏初始化 def init(player_count): # 根据玩家数来生成玩家记牌器 player_group = [[] for _ in range(play

  • Python自动爬取图片并保存实例代码

    目录 一.准备工作 二.代码实现 三.总结 一.准备工作 用python来实现对百度图片的爬取并保存,以情绪图片为例,百度搜索可得到下图所示 f12打开源码 在此处可以看到这次我们要爬取的图片的基本信息是在img - scr中 二.代码实现 这次的爬取主要用了如下的第三方库 import re import time import requests from bs4 import BeautifulSoup import os 简单构思可以分为三个小部分 1.获取网页内容 2.解析网页 3.保存

  • 基于python opencv单目相机标定的示例代码

    相机固定不动,通过标定版改动不同方位的位姿进行抓拍 import cv2 camera=cv2.VideoCapture(1) i = 0 while 1: (grabbed, img) = camera.read() cv2.imshow('img',img) if cv2.waitKey(1) & 0xFF == ord('j'): # 按j保存一张图片 i += 1 u = str(i) firename=str('./img'+u+'.jpg') cv2.imwrite(firename

  • Python 3行代码提取音乐高潮部分

    目录 1.原理简介 2.代码编写 2.1 安装所需要的项目 2.2 编写代码 3.效果检验 4.批量提取 前言: 有些时候,为了设定手机铃声或者发抖音视频,我们会耗费大量时间在剪辑音乐高潮部分上.那么这个音乐高潮的提取能不能自动化呢?当然可以. 先来看看,怎么样来提取孤芳自赏提取高潮后的部分: 1.原理简介 不知道大家有没有这样的体会,大部分时候,歌曲的高潮部分通常是重复次数最多的部分.因此我们可以根据这一个特征,提出我们的算法: 1.遍历整首歌曲. 2.将选定长度的部分与其他部分比较并计算相似

  • python爬取豆瓣评论制作词云代码

    目录 一.爬取豆瓣热评 二.制作词云 总结 一.爬取豆瓣热评 该程序进行爬取豆瓣热评,将爬取的评论(json文件)保存到与该python文件同一级目录下注意需要下载这几个库:requests.lxml.json.time import requests from lxml import etree import json import time class Spider(object): def __init__(self): #seif.ure='https://movie.douban.co

  • python爬取气象台每日天气图代码

    目录 前言 1.安装Selenium 2. 安装chromedriver 3.代码 前言 中央气象台网站更新后,以前的爬虫方式就不太能用了,我研究了一下发现主要是因为网站上天气图的翻页模式从点击变成了滑动,页面上的图片src也只显示当前页面的,因此,按照网络通俗的方法去爬取就只能爬出一张图片.看了一些大佬的教程后自己改出来一个代码. 1.安装Selenium Selenium是一个Web的自动化(测试)工具,它可以根据我们的指令,让浏览器执行自动加载页面,获取需要的数据等操作. pip inst

  • 分享6 个值得收藏的 Python 代码

    目录 1.类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢? 2.map 函数返回的对象 3.正则表达式中 compile 是否多此一举? 4.[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6] 5.一行代码将字符串 "->" 插入到 "abcdefg"中每个字符的中间 6.zip 函数 1.类有两个方法,一个是 new,一个是 init,有什么区别,哪个会先执行呢? class test(obj

  • 25个值得收藏的Python文本处理案例

    目录 1提取PDF内容 2提取Word内容 3提取Web网页内容 4读取Json数据 5读取CSV数据 6删除字符串中的标点符号 7使用NLTK删除停用词 8使用TextBlob更正拼写 9使用NLTK和TextBlob的词标记化 10使用NLTK提取句子单词或短语的词干列表 11使用NLTK进行句子或短语词形还原 12使用NLTK从文本文件中查找每个单词的频率 13从语料库中创建词云 14NLTK词法散布图 15使用countvectorizer将文本转换为数字 16使用TF-IDF创建文档术

  • 10个超级有用值得收藏的PHP代码片段

    尽管PHP经常被人诟病,被人贬低,被人当玩笑开,事实证明,PHP是全世界网站开发中使用率最高的编程语言.PHP最大的缺点是太简单,语法不严谨,框架体系很弱,但这也是它最大的优点,一个有点编程背景的普通人,只需要学习PHP半天时间,就可以上手开始开发web应用了. 网上有人总结几种编程语言的特点,我觉得也挺有道理的: 复制代码 代码如下: PHP 就是: Quick and Dirty Java 就是: Beauty and Slowly Ruby 就是: Quick and Beauty pyt

  • 值得收藏,Python 开发中的高级技巧

    Python 开发中有哪些高级技巧?这是知乎上一个问题,我总结了一些常见的技巧在这里,可能谈不上多高级,但掌握这些至少可以让你的代码看起来 Pythonic 一点.如果你还在按照类C语言的那套风格来写的话,在 code review 恐怕会要被吐槽了. 列表推导式 >>> chars = [ c for c in 'python' ] >>> chars ['p', 'y', 't', 'h', 'o', 'n'] 字典推导式 >>> dict1 =

  • 分享13个非常有用的Python代码片段

    目录 1.将两个列表合并成一个字典 2.将两个或多个列表合并为一个包含列表的列表 3.对字典列表进行排序 4.对字符串列表进行排序 5.根据另一个列表对列表进行排序 6.将列表映射到字典 7.合并两个或多个字典 8.反转字典 9.使用 f 字符串 10.检查子串 11.以字节为单位获取字符串的大小 12.检查文件是否存在 13.解析电子表格 Lists Snippets 我们先从最常用的数据结构列表开始 1.将两个列表合并成一个字典 假设我们在 Python 中有两个列表,我们希望将它们合并为字

  • 值得收藏的10道python 面试题

    Q1:PEP8是什么?Python之禅(import this)是什么? 这题是考察你对编码规范的认识,无论是自己写代码还是在团队中写代码,了解并遵循代码规范是很基础的要求.企业中在提交代码后都会有对应的工具来对代码进行检查,比如 pep8.flake8.pylint 等,但是 PEP 8 是什么一定要了解. 即 Style Guide for Python Code(Python编码风格指南).如果面试时不知道什么是 PEP 8 ,那聊起来想必不会很愉快.速战速决的面试,如果不是你把面试官"秒

  • Python制作数据预测集成工具(值得收藏)

    大数据预测是大数据最核心的应用,是它将传统意义的预测拓展到"现测".大数据预测的优势体现在,它把一个非常困难的预测问题,转化为一个相对简单的描述问题,而这是传统小数据集根本无法企及的.从预测的角度看,大数据预测所得出的结果不仅仅是用于处理现实业务的简单.客观的结论,更是能用于帮助企业经营的决策. 在过去,人们的决策主要是依赖 20% 的结构化数据,而大数据预测则可以利用另外 80% 的非结构化数据来做决策.大数据预测具有更多的数据维度,更快的数据频度和更广的数据宽度.与小数据时代相比,

  • 15个Pythonic的代码示例(值得收藏)

    Python由于语言的简洁性,让我们以人类思考的方式来写代码,新手更容易上手,老鸟更爱不释手. 要写出 Pythonic(优雅的.地道的.整洁的)代码,还要平时多观察那些大牛代码,Github 上有很多非常优秀的源代码值得阅读,比如:requests.flask.tornado,这里小明收集了一些常见的 Pythonic 写法,帮助你养成写优秀代码的习惯. 01. 变量交换 Bad tmp = a a = b b = tmp Pythonic a,b = b,a 02. 列表推导 Bad my_

  • 值得收藏的9个提高代码运行效率的小技巧(推荐)

    我们写程序的目的就是使它在任何情况下都可以稳定工作.一个运行的很快但是结果错误的程序并没有任何用处.在程序开发和优化的过程中,我们必须考虑代码使用的方式,以及影响它的关键因素.通常,我们必须在程序的简洁性与它的运行速度之间做出权衡.今天我们就来聊一聊如何优化程序的性能. 1. 减小程序计算量 1.1 示例代码 for (i = 0; i < n; i++) { int ni = n*i; for (j = 0; j < n; j++) a[ni + j] = b[j]; } 1.2 分析代码

  • 二十种Python代码游戏源代码分享

    学Python中,自我感觉学的还不错的亚子~想做点什么来练练手,然后我疯狂的找各种小游戏的教程源码什么的,于是我就疯狂的找呀找呀,就找到了一大堆,哈哈哈 毕竟我是从小就有一个游戏梦,现在就弥补一下自己小时候没有玩过瘾的游戏补上叭~ 提示:爱学习哦,不要沉迷游戏,平时打发一下无聊时间最好啦 拿走源码的还请留言说一下好吗?不管是想学习的想转发的想干啥的,还请都点个赞说一下不,我也找的不容易呀 1.21点数字小游戏展示: 首先配置文件的源码: '''配置文件''' import os # 一些常量 R

随机推荐