
python论道
人生苦短,我用python
天元浪子
齐国土著,太公之后。少小离家,独闯江湖,后归隐于CSDN部落格。素以编写python代码为业,偶尔游戏于各网络对局室,擅长送财送分,深为众棋友所喜闻乐见。
-
原创 Python的random内置模块产生的随机数真的随机吗?
先说结论:不止Python的random内置模块,还包括numpy的随机抽样子模块random,以及其他编程语言的随机数生成器,例如java.Math.Random()函数,所有这些随机数生成器生成的随机数都不是真正的随机数,而是伪随机数。2021-03-04 17:43:1843
0
-
原创 元宵节就要到了,花灯要不要来一盏?3D的那种
说起元宵节,各位有没有觉得这是咱们中国人最浪漫的节日呢?国人向来拘谨古板,一年到头都是板着脸过日子,唯有元宵节这天可以纵情豪放一把。东风夜放花千树,宝马雕车香满路,火树银花霓虹闪烁,豪车遍地美女如云。细品,你甚至都能嗅到香奈儿的味道!月上柳梢头,人约黄昏后,这又是何等的浪漫!比起烛光晚宴、鲜花加持,这份浪漫更显纯真。晚至明清,民间元宵节的喜庆气氛,堪比西班牙的奔牛节、巴西的狂欢节、泰国的泼水节。2021-02-25 14:44:0424347
64
-
原创 Python四六级考试,快来测试一下自己的编程水平吧
不要当真,这是一套模仿英语四六考试的Python编程能力自测题,完全基于Python基础语法和标准模块,仅最后一题,用到了NumPy模块。参考答案附于文末,读者可自行核对。如果得分超过60分,相当于英语四级水平;得分超过80分,相当于英语六级水平。2021-02-09 14:53:362086
5
-
原创 理解了这三点,才敢说自己会写Python代码
某同学应聘Python岗位被录用。上班第一天,Leader吩咐他写一个获取次日日期信息的函数。该同学信心满满地写下了这样一段代码, 然后就没有然后了。当然,这只是一个段子,相信没有Python程序员真的会写出这样的代码。不过,很多时候,我们写出来的代码尽管功能满足需求,效率也还说得过去,但可读性较差,且难以维护,和人们通常所说的简洁优美相去甚远。2021-02-04 16:59:196287
24
-
原创 无所不能的NumPy:我用它弹奏出了CD音质的吉他名曲“爱的罗曼史”
在Python的世界里,没有一个模块能够像NumPy那样支撑并影响着整个生态系统:从科学计算到数据处理,从视觉识别到机器学习,从神经网络到虚拟现实,处处都有它的身影。无论是OpenCV/OpenGL,还是Pandas/Matplotlib,抑或是Scikti-learn/TensorFlow/Keras/Theano/PyTorch,无不依赖于NumPy,尤其是依赖它所创造的数组对象(numpy.ndarray)。2021-01-29 10:52:113791
5
-
原创 使用Python如何快速打开一个百万行级别的超大Excel文件?
知乎上有同学求助说,当他试图打开一个20M左右的excel文件时,无论是使用pandas的read_excel,还是直接使用xlrd或者openpyxl模块,速度都慢到无法忍受的程度,耗时大约1分钟左右。真的会这样吗?2021-01-22 15:14:311180
2
-
原创 如何用Python的标准print函数打印一个彩色的围棋局面?
尽管print函数是初学者最先接触到的第一个Python标准函数,但很多人并没有真正了解它。我曾经在《用 print() 函数实现的三个特效》一文中展示了print函数的一些实用技巧,受到读者热捧。今天,我再给大家介绍print函数的另一个技巧:打印彩色文字和图案,并在最后定义一个打印围棋局面的函数,可以打印出下图这样的效果。2021-01-08 15:55:277307
4
-
原创 如何用Python判断一个文件是否被占用?
今天有同学问,用os模块的access()能否判断一个文件是否被占用?直觉上,这是行不通的,因为access()返回的是文件的读写属性。后来,群里有同学建议说,不妨用try尝试着open文件,如果成功,表示文件没有被占用,如果抛出异常,则表示文件被占用。果真如此吗?还是用代码验证一下吧。2020-12-15 11:17:469215
16
-
原创 Python进程、线程和协程实战指归
前些日子写过几篇关于线程和进程的文章,概要介绍了Python内置的线程模块(threading)和进程模块(multiprocessing)的使用方法,侧重点是线程间同步和进程间同步。随后,陆续收到了不少读者的私信,咨询进程、线程和协程的使用方法,进程、线程和协程分别适用于何种应用场景,以及混合使用进程、线程和协程的技巧。2020-12-09 21:01:136226
9
-
原创 细说NumPy数组的四种乘法,带你走进向量运算的奇妙世界
当孔乙己说回字有四样写法的时候,相信各位都是这样的表情吧?但是,如果孔乙己说NumPy数组有四种乘法的时候,各位大约就是这样的表情了吧?实际上,NumPy数组乘法远不止四种。为了在写作和阅读时保持清晰的逻辑和清醒的头脑,本文仅对四种最常见的数组乘法给出详细说明,并用一道数学题来演示向量点乘和叉乘的用法。2020-12-07 17:12:111441
1
-
原创 二十年前,闭包爱上了语法糖,从此Python多了一个叫做装饰器的小伙伴
二十年前,大约也是这个时节,闭包(Closure),一个帅气的小伙子,无可救药地爱上了长相甜美的语法糖(Syntactic Sugar)姑娘。结果呢,后面的故事你们就都知道了,2004年11月30号,Python2.4为他们举行了隆重的婚礼,闭包和语法糖的爱情结晶,小帅哥装饰器作为花童,也参加了他们的婚礼。2020-11-26 15:14:572212
0
-
原创 从仁慈的独裁者到微软打工人,Python之父和Python将走向何方?
Python语言本身以及众多的使用者和支持者们似乎先天存在着一种深深的自卑和焦虑,对于Pyton未来发展的不确定性表现出异乎寻常的关注。即使在11月初,业界权威的TIOBE编程语言排行宣布20年来Python首次超越Java成第二最受欢迎的编程语言(第一位是C),也未能彻底打消他们的自卑和焦虑。尽管TIOBE官方使用了unstoppable(势不可挡)一词来形容Python的这次上位夺权,但是Python的拥趸却表现得极为冷静。2020-11-24 10:05:2020621
36
-
原创 魔幻离现实仅一步之遥:细说Python的循环调用、循环引用和循环导入
小时候,常被一些可笑的问题困扰——尽管成年以后面临的疑惑更多,但似乎是因为已经适应了在迷茫中前行,对于未解的问题反倒是失去了那种急于想知道答案的迫切感。比如,站在两面相对的镜子中间,会看到无数个自己吗?对于少时的我,这的确是一个非常魔幻的问题,直到理解了光量子能量衰减,才算找到了答案。2020-11-20 14:56:019474
18
-
原创 写在《Python高手修炼之道》发行之前:选择一本好书,即是少走弯路
一门编程语言,总有一些独一无二的特质,不会随着语言的演变而改变,我们姑且称其为语言的DNA。一本介绍编程语言的书,如果能够捕捉到这门语言的DNA,并准确传达给读者,那就称得上是一本好书。选择一本好书,可以少走很多弯路。2020-11-05 15:08:523553
5
-
原创 理解Python闭包,这应该是最好的例子
作为一种编程语言特性,闭包得到了很多编程语言的支持,Python也不例外。所谓闭包,在Python中指的是携带一个或多个自由量的函数。闭包函数的自由量不是函数的参数,而是生成这个函数时的环境变量。一旦闭包生成了,自由变量会绑定在函数上,即使离开创造它的环境,自由量依旧有效。2020-11-04 16:19:4318303
13
-
原创 危险的转变:Python正在从简明转向臃肿,从实用转向媚俗
简单和优雅,是Python创始人吉多 · 范罗苏姆(龟叔)开立山门之时为Python确立的哲学理念。现在,Pyton的发展显然已经背离了这一原则:不管有用无用,但凡别家有的,一概收入;不管是否适合,只要能充门面,悉数拿来。此情势正如当年Pandas之父韦斯·麦金尼面对Pandas的快速扩张时所表达出的无奈:“Pandas正在背离我最初所期望的简洁和易用,变得越来越臃肿和不可控制。”2020-10-24 08:04:2425015
55
-
原创 复合条件下的字典排序
知乎上有人说,Python3.6以后字典有序且更高效了。群里有同学推荐了这篇文章给我看,并咨询字典排序的问题。大致浏览了一下,我当即表示不能认同这个说法。这篇文章的作者,应该是一位资深的专业人士,对于Python解释器如何实现字典存储和检索有着深刻地理解。但他犯了一明显的常识性错误:在逻辑上,字典是数据的无序集合,仅依赖于键检索。我们说字典是无序,不是指字典在物理实体上实现的时候真的无序,而是指它的顺序对用户而言没有明确的界定,不能作为数据的特性使用。2020-10-09 15:15:024640
1
-
原创 Python非单向递归函数如何返回全部结果?这个经典的背包问题给出了答案
递归( recursion)是一种神奇的编程技巧,可以大幅简化代码,使之看起来更加简洁。然而递归设计却非常抽象,不容易掌握。通常,我们都是自上而下的思考问题, 递归则是自下而上的解决问题——这就是递归看起来不够直观的原因。2020-08-27 18:09:475118
1
-
原创 七夕节,我用Python写了一个婚介模型
先声明一下:本文纯属七夕应景娱乐之作。如果有人因为遵循本模型提出的择偶理论而导致失恋或单身,除了同情,我不能补偿更多。在中国的传统节日里,七夕可能是起源最神秘、内涵最深刻的一个了。当然,这不是本文的重点,我们的核心问题是:在七夕这个特有纪念意义的日子,你真的想好了要向TA表白吗?TA真的是你唯一正确的选择吗?这个婚介模型,也许对你有一些启发。2020-08-25 11:36:428664
7
-
原创 用了十几年才想明白:Python的精髓居然是方括号、花括号和圆括号!
和其他编程语言相比,什么才是Python独一无二的特色呢?很多程序员会说,缩进。的确,缩进是Python语言的标志性特点,但这只是外在的、形式上的。从语言特性层面讲,Python的特点是什么呢?我尝试着在知乎上搜索了一下,最具代表性的答案分别是语法简洁、简单易学、代码高效、功能强大等四项。仔细品味这四项,我还是觉得,这是Python语言表现出来的使用效果或用户感受,仍然不是语言特性层面的特色。2020-08-15 18:13:4620039
24
-
原创 不要对链式索引赋值!趟过了这个坑,才能真正迈入Pandas高手之列
实话实说,我一向不太喜欢Pandas,因为它的功能实在太过强大了,想要熟练地驾驭它,对于我这样的中老年人来说,学习成本偏高。不过,对于接受能力超强的年轻人而言,Pandas确实是数据处理方面不可或缺的利器,我的子侄辈中就有多人喜欢使用。正是因为他们在Pandas的使用过程中,不断地向我咨询问题,我在帮他们解决问题的过程中,也逐渐熟悉了Pandas。2020-08-03 18:06:085979
1
-
原创 如何提高Python编程能力?不妨试试这个经典的24点问题
暑假期间,办公室里经常会出现因无人看护而不得不跟随爸爸妈妈来上班的小朋友。如果不忙的话,我会陪他们一起玩,他们也都很喜欢和我玩。我们都喜欢玩数字游戏。这不,有位小朋友给我出了一道难题:三个5和一个1,只用加减乘除四则运算,每个数字只能且必须使用一次,如何让结果等于24?2020-07-31 11:26:3813598
10
-
原创 从Python对象的内建属性和方法谈Python的自省(Introspection)和反射机制(Reflection)
对于dir()这个Python的内置函数,Python进阶群里的小伙伴们一定不陌生。我不止一次地介绍过这个函数。每当想要了解一个类或类实例包含了什么属性和方法时,我都会求助于这个函数。读到这里,一定会有很多小伙伴会说,我的PyCharm(也可能是VSCode或者其他什么)也会告诉我,当前的对象有什么属性和方法,还是自动显示的,不需要我动手。没错,IDE的确为我们提供了很多便利,但是,你有没有想过IDE是如何实现这些功能的呢?假如你的任务就是设计一款类似的IDE,你真的不要深入理解Python内在的机制吗?2020-07-27 18:34:545968
2
-
原创 LaTex数学公式转图片,不依赖在线服务,真正Python实现
下午安装了一个pylatex模块,打算将LaTex语法描述的数学公式转为图片。磕磕绊绊读了半天文档,发现pylatex属于重型武器,写起来不够简洁。网上搜了一下,CSDN上现成的Python代码,只是不免费,要11个C币。摸摸兜里,还有些散碎银子,就顺手买了一个。下载之后,一读源码,居然只是封装了一个http请求,图片是在线生成的!这简直就是抢劫啊,太没有职业道德了!2020-06-29 17:59:196576
3
-
原创 作为Python程序员,你真的会用max()和min()函数吗?
在Python的七十多个内置函数中,max()和min()是比较常用的两个,用来查找一组数据中的最大值和最小值。这两个函数看似简单,实则暗藏了很多意想不到的功能,尤其是key参数,更为这两个函数增加了类似map()函数的功能。如果应用在代码中,必定产生鬼斧神工、匪夷所思的感觉,令人叹为观止!2020-06-23 15:22:575940
2
-
原创 一篇短文,尽除沉疴,彻底破解正则恐惧症!
正则表达式的规则之艰深晦涩,足令初学者望而却步。其实,只要理解了基本概念,稍微归纳一下知识点,掌握并熟练应用正则表达式,也不是什么难事儿,大约三十分钟就可以做到。我们可以把正则表达式的学习分成两部分:第一,如何写正则表达式?第二,怎么用正则表达式?2020-06-01 11:35:206164
1
-
原创 Pandas简明教程
简洁如斯,夫复何求!但是,对用户过分的迁就和溺爱,其实是一把双刃剑。正如Pandas之父Wes McKinney所说,Pandas正在背离他最初所期望的简洁和易用,变得越来越臃肿和不可控制。我非常认同Wes McKinney的观点,甚至觉得当Pandas抛弃了panel这个概念的时候,就已经走火入魔了。panel是Pandas最初为处理更高维数据提出的方案,非常接近HDF或者netCDF的理念。Pandas后来使用了“层次化索引”处理更高维数据,导致结构趋于复杂,使得程序员无法专注于事务逻辑的处理。2020-05-29 14:00:017851
2
-
原创 用机器学习的分类算法识别象棋棋子——兼论旋转不变性
文本识别早已经不是问题了,不过却不能直接应用于象棋棋子的识别,因为棋盘上的棋子是随机摆放上去的,不能保证棋子上的文字总是保持一个固定的角度。识别棋子的关键是找到具有“旋转不变性”的特征——无论棋子旋转多少度,其特征总是稳定的。2020-05-27 18:15:065862
7
-
原创 假期无聊,我用傅里叶变换做了一个频率计,吉他定调口哨定音,样样好使!
当年《数学分析》考试通过后,那个高兴啊,心想,这一辈子总算再也不用和数学打交道了。没成想,新学期又开了一门叫做《工程数学》的专业课,专门讲傅里叶变换和拉普拉斯变换。全班同学为此郁闷了多半个学期。转眼间,三十多年过去了,拉氏变换早就还给了我的数学老师,唯独留下了傅里叶变换,偶尔还能有用武之地。这不,无聊的假期里,我用它做了一个音频的频率计,通过电脑上的声卡采集声音,用傅里叶变换完成时域-频域的转换,最后确定声音的主频率。用这个简陋的频率计来给吉他定调,比专业的定音器还好玩。2020-04-05 15:36:227970
6
-
原创 有没有那么一道题,让你从此真正理解了Python编程?
写下这个题目的时候,脑海里无法抑制地响起了周华健那略带沙哑的歌声:远处传来那首熟悉的歌,那些心声为何那样微弱。很久不见,你现在都还好吗?有没有那么一首歌,会让你轻轻跟着和,随着我们生命起伏,一起唱的主题歌;有没有那么一首歌,会让你突然想起我,让你欢喜也让你忧,这么一个我……2020-03-31 11:45:2317478
49
-
原创 Python + ElasticSearch:轻松玩转跨越千年的两百三十万条地震数据
本文介绍了在网上地震数据的实现代码,并借助于 Python 和 ElasticSearch,分析了全球和中国的地震分布,对中国多个省区的历史地震数据做了对比分析。所有源码和示例数据已上传至GitHub,有兴趣的读者可以下载源码后,使用下载代码自行下载全部数据。2020-03-19 15:33:517790
3
-
原创 Python代码中的三大常见“愚形”,你中招了吗?
愚形,是围棋的专业术语,凡是效率低下且不美观的棋形,统称为愚形。比如空三角和团子,就是典型的愚形。低水平棋手经常会在无意中走出愚形,而那些高手平棋手,尽管在生死存亡的危机时刻也会用愚形求生或者逃命,但在正常局面下他们是不会走出愚形的。在Python代码中,初学者也会写出一些类似围棋愚形的写法,不仅臃肿繁琐,而且效率低下。本文总结了Python代码中的三大常见“愚形”,快来看看,你中招了吗?2020-03-16 12:27:159897
12
-
原创 3D库WxGL的demo——用3D给思维插上想象的翅膀
上周冒着零星小雨去附近的公园赏花,估计脑子里多少进了一些雨水,以至于连 z=xy 这样的曲面是什么样子,都想象不出来了。无奈之下,只好跑去问女儿。彼时,她正在ipad上整理课堂笔记。我凑近瞄了一眼,瞬间感觉头晕目眩,几乎晕倒。这个课堂笔记,将数学的险恶展示得一览无余!2020-03-15 14:24:217837
2
-
原创 B型超声设备图像处理:用二维数据生成扇形图像
昨晚,有同学私信咨询:如何将矩形数据转为扇扫图像?面对这个问题,我也是一脸懵逼,什么是扇扫?矩形数据又是啥?细问之下,才知道这是B型超声设备的数据处理问题。B超输出的数据保存在一个二维数组中,但显示在屏幕上的却需要转换为扇形。稍微思考一下,应该不难解决。比较直接的方法是,将二维数组的每一列旋转合适的角度,就可以拼成一副图像。我们用参数angle表示扇形夹角的一半,用参数k表示输出图像的高度与每一列数据数量的比值,很容易写出如下代码:2020-03-05 15:57:596728
6
-
原创 自己动手,打造一款适合 Python 程序员的 Html5 音乐播放器
近期断断续续读了一些 Web Audio API 和 WebRTC API 的文档,发现了很多好玩的东西,有一种“忽入桃花源”的感觉。这一款 Html5 音乐播放器,就是基于 Web Audio 技术实现的,原型来自于 Web Audio API 的例子。为什么说适合 Python 程序员呢?因为使用者需要理解下面这一行命令:python -m http.server2020-03-02 16:47:366777
0
-
原创 Python小技巧:将图像音视频等资源文件隐藏在代码中
下午有同学Python学习群里说,使用pyinstaller打包源码时,因为代码中使用了图像、音频、视频等资源文件,无法将程序打包成单一的可执行文件。有没有方法将这些资源文件按保存在代码中呢?我想了一下,应该是可以的。于是乎,花了一个小时,写出了下面的代码,算是抛砖引玉吧。2020-02-15 19:01:1612123
5
-
原创 Python + ElasticSearch:有了这个超级武器,你也可以报名参加诗词大会了!
正月十六,中国诗词大会第五季落下帷幕。从2016年2月12日第一季于开播,迄今恰好四周年。在这个舞台上,时年16岁的才女武亦姝、雨无阻的外卖小哥雷海为、端庄美丽的北京大学博士生陈更,不留遗憾的三季老将彭敏,都以精彩表现给我们留下了深刻印象。中国诗词大会潜移默化地影响了一大批中国人,激发了很多人对诗词的热爱。2020-02-13 17:12:2915783
14
-
原创 2020Pyton开发者日线上技术峰会主题:爬虫框架的技术实现与模块应用的经验分享
2月15日,CSDN 联合PyCon中国、wuhan2020、xinguan2020 等力量,举办以「抗击疫情,开发者在行动」为主题的2020 Python开发者日·线上技术峰会,围绕Python在疫情中的具体落地应用与项目,为广大Python开发者、爱好者揭秘代码的力量。2020-02-13 09:29:3614192
0
-
原创 开源我的3D库WxGL:40行代码将疫情地图变成三维地球模型
在自己动手写3D库之前,我一直使用VisPy应对三维需求。这是一个高性能的可交互的2D/3D可视化函数库,但在后端显示上,我始终不能得心应手地驾驭它。2019年的元旦假期,我萌生了自己写3D应用库的念头,并立即付诸行动。三周之后,WxGL诞生。WxGL是一个基于PyOpenGL的三维数据展示库,以wx为显示后端,以加速渲染为第一追求目标。借助于WxPython这个后端,WxGL可以很好的融合Matplotlib等其他数据展示技术。2020-02-07 17:36:4433581
68
-
原创 介绍一种有趣的数据抓取技术:可见即可抓
可见即可抓的实现,依赖于selenium模块。实际上,selenium并不是专门用于数据抓取的工具,而是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器。用selenium抓取数据,并不是一个通用的方法,因为它仅支持GET方法(当然,也有一些扩展技术可以帮助selenium实现POST,比如安装seleniumrequests模块)。2020-02-02 13:15:5611860
1