Python
文章平均质量分 91
qiwsir
老农,耕耘在代码的田野上。
展开
-
用Python进行单元测试
Python编程语言,不仅仅在机器学习、数据分析等领域大放异彩,在web开发中等软件开发中,使用者也越来越多。在软件开发中,有一种被提倡的开发范式:测试驱动开发。在这种开发范式中,编写单元测试是必不可少的。如果不实施严格的测试驱动开发,编写单元测试程序也是必要的。对于单元测试而言,最基本的模块是pytest,在本文中会对这个模块给予简要介绍。此外,还有一个现在很流行的模块fizz buzz,本文也会向读者推荐。为什么要自动化测试并非所有人都理解自动化测试的必要性,有人甚至认为纯粹是个负担,他们认为原创 2021-04-02 10:30:17 · 4469 阅读 · 0 评论 -
深入理解循环和迭代
循环,特别是for循环,是Python中常见的语句,甚至于Guido van Rossum(Python创始人)在评论递归的时候说过在Python中“递归已死”,我想这句话的意思不是说在Python中不能用递归,而是说因为Python中的for循环语句足够强大,可以不考虑递归,而是用for循环实现原本用递归做的事情。本来,在《Python大学实用教程》和《跟老齐学Python:轻松入门》两本书中都对for循环语句做了很完整地介绍,并且在这两本书中也有关于可迭代等概念,但是,如何将两者融合起来理解,从而能够原创 2021-03-19 09:21:11 · 1201 阅读 · 0 评论 -
Python虚拟环境
导言本文是针对《Python大学实用教程》和《跟老齐学Python:轻松入门》两本书的基础内容之后的提升。通常,在不同的项目中,会用到不同的Python版本——如果有必要的话,也包括一些库的版本,并非总是最新的就是最适合的或者最好的。对此,解决之道就是创建虚拟环境。一个项目创建一个虚拟环境,在每个虚拟环境之中,就相当于一个“裸机”,里面所需要的东西任你根据当前的需要自由配置,并且不会影响到其他项目。特别是在诸如Linux系统上,有时候安装某些东西还需要root权限,此时虚拟环境的好处就更明显了。创原创 2021-03-10 10:46:25 · 766 阅读 · 0 评论 -
必须升级pip,为什么?!
在《Python大学实用教程》和《跟老齐学Python:轻松入门》两本书中,都介绍了如何安装第三方库的方法:pip install package-name在用pip安装第三方库或者模块的时候,如果检测到本地的pip版本过低,会提示升级。有的人觉得升级比较麻烦,就放弃了。本文就要重点讲一讲,为什么要必须升级pip。先说结论,如果该升级的时候不升级,结果是:可能会导致安装某些东西的时候失败;或者安装进程很慢,或者给你带来其他麻烦。所以,如果不升级,后果很严重。老版本的问题下面是在Docker.原创 2021-03-03 11:34:21 · 2637 阅读 · 0 评论 -
编程的黄金时代结束了吗?
注: 本文内容主要源自参考文献[1],但是,翻译的时候并未完全直译,做了表述上的适当润色和修改,但主要观点未变。文章中的观点,仅供读者参考,也并不代表老齐本人的观点。O’Reilly公司,对开发者而言,无人不知,它出版了很多非常棒的图书。此公司的创始人不久前语出惊人,他以自己对编程行业的未来发展之深思熟虑,做出了如下判断:“我认为您可以成为一名程序员并找到一份工作,但编程这个职业,像最近几十年这样的黄金时代已经过去了。编程,现在更像是读写,每个人都要会。”听起来很合逻辑,同时也让准备进入这个行业翻译 2021-02-23 14:43:52 · 191 阅读 · 0 评论 -
Python中`__name__`有什么用
注: 有的读者在学习《Python大学实用教程》第7章模块和包[2]^{[2]}[2]时,对变量__name__感到困惑,现补充解释。与本书更多的有关资料,请访问:http://www.itdiffer.com/python_course.html在Python程序中,你会经常看到__name__,例如:if __name__ == '__main__': main()本文将介绍如何正确使用和理解这个变量。请注意,__name__在程序中是一个变量,只不过这个变量的命名有点奇怪,用双原创 2021-02-18 09:45:57 · 574 阅读 · 0 评论 -
如何使用Python的filter函数
介绍Python内置的filter()函数能够从可迭代对象(如字典、列表)中筛选某些元素,并生成一个新的迭代器。可迭代对象是一个可以被“遍历”的Python对象,也就是说,它将按顺序返回各元素,这样我们就可以在for循环中使用它。filter()函数的基本语法是:filter(function, iterable)返回一个可迭代的filter对象,可以使用list()函数将其转化为列表,这个列表包含过滤器对象中返回的所有的项。filter()函数所提供的过滤方法,通常比用列表解析更有效,特别是当原创 2020-10-19 13:38:56 · 14737 阅读 · 1 评论 -
如何实现四元数的运算
如何实现四元数的运算在前面的一篇文章《Python中的5对必知的魔法方法》中所介绍的“魔法方法”,或者说是特殊方法,其命名均是双下划线开始和结束。英文中称为“dunder methods”。为了更充分理解这类方法,本文通过一个示例,专门介绍此类方法的特点。构建四元数对象四元数是一个代数概念,通常用于描述旋转,特别是在3D建模和游戏中有广泛的应用。Q=w+xi^+yj^+zk^Q = w + x\hat i + y\hat j + z\hat kQ=w+xi^+yj^+zk^其中 w,x,y,z∈原创 2020-10-12 16:31:18 · 774 阅读 · 0 评论 -
【译】Python中5对必知的魔法方法
引言在Python中,我们可以使用下划线、字母和数字来命名函数。单词之间的下划线并没有太大的意义——它们只是通过在单词之间创建空格来提高可读性。这就是众所周知的s蛇形命名风格。例如,calculate_mean_score比calculatemeanscore更容易阅读。你可能知道,除了这种使用下划线的常见方式,我们还在函数名之前加上一个或两个下划线(例如:_func,__func) 来表示类或模块内的私有化函数,那些没有以下划线为前缀的名称被认为是公共 API。下划线在方法命名中的另一用途就是定义“魔翻译 2020-09-15 08:31:26 · 140 阅读 · 0 评论 -
数据科学的软件工程技巧和最佳实践
如果你对数据科学感兴趣,你可能对这个工作流程很熟悉:用jupyter创建一个项目,然后开始编写python代码,运行复杂的分析,训练一个模型。当notebook文件随着函数、类、绘图和日志的增加而增大时,你会发现自己面前有一个庞大的代码块。如果幸运的话,项目有可能进展顺利,这再好不过了!然而,jupyter中隐藏了一些深坑,不小心掉进去,就如同进入地狱。下面先看看这些坑是什么样的,然后探讨如何避免。隐藏的问题下面这些情况,不知道你是否遇到过:在某个地方定义了一类,然后实例化。后来又想修改它了,于原创 2020-09-11 09:57:33 · 289 阅读 · 0 评论 -
用Python读写文件的方法
在文中,我们将研习如何用Python读取文件,然后,向文件写入内容并再次保存它。使用Python读写某种特别类型的文件,例如:JSON、CSV、Excel等,一般会有专门的模块。但是,在这里,我们将用Python打开文本文件(.txt)。若使用Python的open函数,它将返回一个文件对象,此对象将包含一些方法和属性。我们可以使用这些方法和属性获得已打开文件的相关信息,并且,可以使用这些方法来更改所打开的文件。用 open()读取文件在本节中,我们将学习如何使用open()函数在Python中加载文原创 2020-09-04 18:54:49 · 14834 阅读 · 0 评论 -
【译】初学者指南:利用SVD创建推荐系统
作者:Mayukh Bhattacharyya翻译:老齐序言你是否有过这样的经历:前一天晚上登录Netflix,观看了《星际穿越》,他们会建议你看《地心引力》。或者你在亚马逊上购买了东西,看到了网站推荐给你可能感兴趣的产品。你是否想知道在线广告代理商是如何根据我们的浏览习惯向我们推送广告的?这一切都归结为一种被称为推荐系统的东西,它根据我们与产品互动的历史,预测我们可能对哪些产品感兴趣。本文中,我们将建立一个很酷的推荐系统。我们将使用SVD(Sigular Vector Decomposition翻译 2020-08-26 10:39:57 · 292 阅读 · 0 评论 -
将Python中的字典数据转化为DataFrame的方法
编译:老齐与本文相关的图书推荐:《数据准备和特征工程》在数据科学项目中,通常用Pandas的read_csv或者read_excel从相应文件中读入数据,此外,对于数据量不大的时候,可能还有下面的情形出现:import pandas as pddata = {‘key1’: values, ‘key2’:values, ‘key3’:values, …, ‘keyN’:values}df = pd.DataFrame(data)这里是将一个Python中的字典data转化为了Pandas原创 2020-08-17 11:19:18 · 16142 阅读 · 0 评论 -
根据条件增加DataFrame的列
编译:老齐与本文有关的图书推荐:《跟老齐学Python:数据分析》当我们使用Python进行数据分析时,有时可能需要向DataFrame添加列,所添加的列要基于DataFrame的其他列的值。虽然这听起来很简单,但是,不少初学想到的是用if-else条件语句来实现,这就把问题搞复杂了。有一个简单又有效的方法,下面就来看看这种方法如何使用。加载一个数据集。import pandas as pdimport numpy as npdf = pd.read_csv('dataquest_twee原创 2020-08-14 17:07:28 · 6914 阅读 · 1 评论 -
Python中的命名空间和作用域(1)
编译:老齐相关图书推荐:《Python大学实用教程》这是一本针对零基础的初学者学习Python的书,强调开发实战,在学习中体会了解真实的开发需要。本文将介绍Python命名空间和作用域,它们用于分配Python程序中的对象。Python语言是一种能够实现面向对象编程的高级语言,或者说,在Python中,“万物皆对象”。例如,x = 'foo'中的x是一个变量,它应用了字符串对象'foo'。在一个复杂的程序中,会创建成百上千个这样的变量名称或者函数名称、类名称等,每个名称都指向特定的对象。Pyt原创 2020-08-10 09:14:55 · 174 阅读 · 0 评论 -
range函数小应用
作者:老齐与本书相关的图书推荐:《Python大学实用教程》本书是面向零基础学习者的Python入门读物,包含完整的Python语法知识、针对性的练习题,本书强调学习中的实战,案例和习题均从开发实践的角度进行设计。在Python语言中,有很多方式能够生成序列类对象。range函数就是这样一个,现在用的都是Python3了,但是,这个函数从Python2开始就已经有了,显然它是多么被重视吧。r = range(5000)上面的代码是在Python3中调试的,如果你这样做,会返回一个range类原创 2020-07-21 14:14:44 · 225 阅读 · 0 评论 -
EOF是不是字符
编译:老齐与本文相关的图书推荐:《Python大学实用教程》本书是面向零基础学习者的Python入门读物,包含完整的Python语法知识、针对性的练习题,本书强调学习中的实战,案例和习题均从开发实践的角度进行设计。什么是 EOF?百度百科上这样解释:EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。在这个解释中,认为EOF是表示文件结束的字符——这就是本文要重点讨论的,EOF是不是翻译 2020-07-20 15:20:13 · 1459 阅读 · 0 评论 -
比较NaN和数字
作者:老齐与本文相关的图书推荐:《数据准备和特征工程》本书适合即将或者已经从事数据科学、机器学习、人工智能等方向工作的朋友。书中详细梳理了各种获取数据、数据清洗、特征工程等方向的技术和方法。先看下面的代码,有何感悟?>>> import numpy as np>>> min(2, np.nan)2>>> min(np.nan, 2)nan是不是有点意思?怎么解释?首先要理解Python中的min函数,根据它的官方文档,有这样一原创 2020-07-15 10:35:24 · 1781 阅读 · 0 评论 -
二分查找算法的Python实现
问题二分查找list.index()无法应对大规模数据的查询,需要用其它方法解决,这里谈的就是二分查找思路说明在查找方面,python中有list.index()的方法。例如:>>> a=[2,4,1,9,3] #list可以是无序,也可以是有序>>> a.index(4) #找到后返回该值在list中的位置1>>原创 2014-06-25 21:56:10 · 1321 阅读 · 0 评论 -
索引查找
问题索引查找索引查找的定义,来源百度百科索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找。 索引查找的过程是:首先根据给定的索引值K1,在索引表上查找出索引值等于K1的索引项,以确定K1对应的子表在主表中的开始位置和长度,然后再根据给定的关键字K2,在对应的子表中查找出关键字等于K2的元素(结点)。思路说明对于一个list或者d原创 2014-07-09 18:19:18 · 389 阅读 · 0 评论 -
[零基础学python]集成开发环境(IDE)
当安装好python之后,其实就已经可以进行开发了。下面我们开始写第一行python代码。值得纪念的时刻:Hello world如果是用windows,请打开CMD,并执行python。如果是UNIX类的,就运行shell,并执行python。都会出现如下内容:Python 2.7.6 (default, Nov 13 2013, 19:24:16) [G原创 2014-07-09 22:48:50 · 429 阅读 · 0 评论 -
要继续看Python写算法的内容请到那里去
因为在这里发文章的时候,莫名其妙的出现发布出去的问题,客服告知是因为链接或者敏感词。能不能告诉我哪里出了问题?我可以修改,以便再发。但是,没有人告诉我,只是告诉我不能发。另外,能不能公布一下敏感词?以后我在遣词造句的时候,才可以避免。但是,没有看到敏感词列表。以后我的文章将发布在https://www.github.com/qiwsir/algorithm里面,有兴趣的可以到那原创 2014-06-20 12:36:52 · 461 阅读 · 0 评论 -
[零基础学python]python中的四则运算
一提到计算机,当然现在更多人把她叫做电脑,这两个词都是指computer。不管什么,只要提到她,普遍都会想到她能够比较快地做加减乘除,甚至乘方开方等。乃至于,有的人在口语中区分不开计算机和计算器。那么,做为零基础学习这,也就从计算小学数学题目开始吧。因为从这里开始,数学的基础知识列为肯定过关了。复习还是先来重温一下伟大时刻,打印hello world.打开电脑,原创 2014-07-10 11:57:01 · 1530 阅读 · 0 评论 -
全文索引搜索whoosh
问题Whoosh是python中解决索引查找的模块,在讨论索引查找的文章已经对有关索引查找进行了阐述,此处详细说明Whoosh模块的应用。思路说明Whoosh的安装这里有详细内容(链接被被阉割!)whoosh的使用步骤whoosh在应用上划分三个步骤:建立索引和模式对象写入索引文件搜索下面依次阐述各步骤建立索引和模式对象建原创 2014-07-10 18:06:06 · 591 阅读 · 0 评论 -
为什么总是“待审核”
不知道这篇文章哪里犯忌讳了,发布出去,总处于待审核的状态,只能烦请看官移步到github上了。https://github.com/qiwsir/algorithm/blob/master/prim_algorithm.md也烦请高手指点?我哪里没有符合?原创 2014-06-20 11:27:11 · 705 阅读 · 0 评论 -
[零基础学python]啰嗦的除法
除法啰嗦的,不仅是python。整数除以整数看官请在启动idle之后,练习下面的运算:>>> 2/50>>> 2.0/50.4>>> 2/5.00.4>>> 2.0/5.00.4看到没有?麻烦出来了,如果从小学数学知识除法,以上四个运算结果都应该是0.4。但我们看到的后三个符合,第一个居然结果是0。why?因为,在python里面有一个规定,像2/原创 2014-07-11 13:45:54 · 595 阅读 · 2 评论 -
全文索引搜索whoosh(2)
承接前面对whoosh的文章,继续:写索引文件下面开始写入索引内容,过程如下:writer = ix.writer()writer.add_document(title=u"my document", content=u"this is my document", path=u"/a", tags=u"firlst short", icon=u"/icons/star.p原创 2014-07-11 16:49:51 · 260 阅读 · 0 评论 -
无向图最小生成树Prim算法
无向图最小生成树的Prim算法,在实现上方法各异。本文演示了用Python是实现的方法,特别是应用了Python有的一个heapq排序方法,让代码更简洁。原创 2014-06-20 11:12:14 · 734 阅读 · 0 评论 -
python的collections.Counter()计数器
python模块collections提供了内置容器类型dict,list,set,tuple更专业的容器数据类型。原创 2014-06-20 22:20:55 · 1308 阅读 · 0 评论 -
Python高效编程技巧
我已经使用Python编程有多年了,即使今天我仍然惊奇于这种语言所能让代码表现出的整洁和对DRY编程原则的适用。这些年来的经历让我学到了很多的小技巧和知识,大多数是通过阅读很流行的开源软件,如Django, Flask,Requests中获得的。下面我挑选出的这几个技巧常常会被人们忽略,但它们在日常编程中能真正的给我们带来不少帮助。1. 字典推导(Dictionary compre转载 2014-06-21 20:28:08 · 166 阅读 · 0 评论 -
最短路径问题的Dijkstra算法
问题最短路径问题的Dijkstra算法是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出。迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树> 。该算法常用于路由算法或者作为其他图算法的一个子模块。 这个算法的python实现途径很多,网上能够发现不少。这里推荐一个我在网上看到的,本来打算自己写,看了这个,决定自己不写了,因为他的已经太原创 2014-06-21 08:18:46 · 432 阅读 · 0 评论 -
[零基础学python]初识永远强大的函数
函数,对于人类来讲,能够发展到这个数学思维层次,是一个飞跃。可以说,它的提出,直接加快了现代科技和社会的发展,不论是现代的任何科技门类,乃至于经济学、政治学、社会学等,都已经普遍使用函数。下面一段来自维基百科(在本教程中,大量的定义来自维基百科,因为它真的很百科):函数词条[函数这个数学名词是莱布尼兹在1694年开始使用的,以描述曲线的一个相关量,如曲线的斜率或者曲线上的某一点。莱原创 2014-07-15 15:43:01 · 295 阅读 · 0 评论 -
用递归方式遍历二叉树
问题用递归方式遍历二叉树思路说明遍历二叉树的方法有广度优先和深度优先两类,下面阐述的是深度优先。以下图的二叉树为例:先定义三个符号标记:访问结点本身(N)遍历该结点的左子树(L)遍历该结点的右子树(R)有四种方式:前序遍历(PreorderTraversal,NLR):先访问根结点,然后遍历其左右子树中序遍历(InorderT原创 2014-07-13 22:28:45 · 475 阅读 · 0 评论 -
寻找完全数
问题寻找完全数。思路说明所谓完全数,从维基百科的完全数词条中得到:[完全数,又称完美数或完备数,是一些特殊的自然数:它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身,完全数不可能是楔形数。 例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6,恰好等于本身。第二个完全数是28,它有约数1、2、4、7、14、28原创 2014-07-15 17:19:22 · 1797 阅读 · 0 评论 -
[零基础学python]开始真正编程
通过对四则运算的学习,已经初步接触了Python中内容,如果看官是零基础的学习者,可能有点迷惑了。难道在IDE里面敲几个命令,然后看到结果,就算编程了?这也不是那些能够自动运行的程序呀?的确。到目前位置,还不能算编程,只能算会用一些指令(或者叫做命令)来做点简单的工作。并且看官所在的那个IDE界面,也是输入指令用的。列位稍安勿躁,下面我们就学习如何编写一个真正的程序。工具还是那个I原创 2014-07-13 17:41:48 · 757 阅读 · 1 评论 -
无向图最小生成树Kruskal算法
问题最小生成树的Kruskal算法描述:有A、B、C、D四个点,每两个点之间的距离(无方向)是(第一个数字是两点之间距离,后面两个字母代表两个点):(1,'A','B'),(5,'A','C'),(3,'A','D'),(4,'B','C'),(2,'B','D'),(1,'C','D') 生成边长和最小的树,也就是找出一种连接方法,将各点连接起来,并且各点之间的距离和最小。原创 2014-06-18 11:51:14 · 1080 阅读 · 0 评论 -
将一个整数分拆为若干个整数的和
将一个整数分拆为若干个整数的和,并且将分拆结果全部打印出来。用Python来解决这个问题。原创 2014-06-09 15:41:55 · 1795 阅读 · 2 评论 -
[零基础学python]玩转字符串(3)
字符串是一个很长的话题,纵然现在开始第三部分,但是也不能完全说尽。因为字符串是自然语言中最复杂的东西,也是承载功能最多的,计算机高级语言编程,要解决自然语言中的问题,让自然语言中完成的事情在计算机上完成,所以,也不得不有更多的话题。字符串就是一个话题中心。给字符串编号在很多很多情况下,我们都要对字符串中的每个字符进行操作(具体看后面的内容),要准确进行操作,必须做的一个原创 2014-07-18 16:43:24 · 323 阅读 · 2 评论 -
将一个数组中的偶数放前面奇数放后面
一个数组由若干个整数组成,现要求:将偶数放到前面,奇数放到后面,并输出数组。提供了两种PYTHON的解法和一个RACKET解法。原创 2014-06-10 09:51:14 · 3641 阅读 · 0 评论 -
获取时间的方法
python提供了time模块,用它可以得到任何想得到的时间,随心所欲不越矩。原创 2014-06-28 21:34:48 · 269 阅读 · 0 评论