-
理解Python中is 与 == 的区别
在Python中,有一个问题会被经常问到,那就是运算符is与==有什么区别? 很多人都知道他们都是比较两个对象是否相等,说起来都是比较对象,但是分不清什么时候用哪个,其实非常容易区分只要记住一点。 ==是比较运算符,它比较的是两个对象中的值是否是相等的。而is是同一性运算符,比较的是两个对象的id值是否相等或者说比较的是对象的内存空间地址是否相等。 为了更好更深刻的理解,我们还是从几个例子出发: a = 1, 2, 3 b = 1, 2, 3 print(f'The result…
-
numpy.where的用法
在用Python处理大量数据时,Python的数据科学库极为有用,这里要提到的就是Numpy库。在Numpy库里有个where函数,它是Python中三元表达式 x if condition else y的另一种版本。为了更好的理解numpy.where函数,我们来看几个where函数的使用例子。 传统三元表达式 有种情况,假设我们有xarr和yarr两个NumPy数组,还有一个cond的包含布尔值的数组。当cond值为True时,选取xarr对应的值,否则选取yarr。 xarr = np.a…
-
Python标准库itertools模块
我们知道,迭代器在Python中是一种非常高效又好用的数据结构,迭代器的特点是可以做到惰性求值(lazy evaluation的概念) ,什么意思呢?就是只有当迭代到某个值的时候它才会被计算产生,比如要遍历一个大文件或者庞大的数据集时,使用传统的遍历就需要将它们一次性全部储存在内存中,而使用迭代器显而易见的好处则是每次只从对象中读取一条数据,不会造成内存的过大开销。 itertools中的函数大多是返回各种迭代器对象,其中很多函数的作用我们平时要写很多代码才能达到,而在运行效率上反而更低,所以直…
-
Python另类格式化f-strings特性
我们都知道在Python中字符串格式化常用的有百分号操作符(%)和 str.format()方式,前者最早是在Python 2.5版本以前所支持的,之后便推出了后者。而在Python3.6发布之后,在PEP 498提案或建议书中提出了一种新型字符串格式和机制,被称为(Literal String Interpolation) 字符串插值,也就是f-strings,他的特点是进行字符串格式化时都是以 f 字母开头的。 而不得不说的是,f-strings的运行速度很快。比%-string和str.f…
-
实用的(named tuple)命名元组
Python的创始人Guido van Rossum曾经提过一个建议:“不要过度的自己去构建数据结构,尽量去使用命名元组 (named tuple) 而不是对象,尽量使用简单的属性域,因为内置数据类型是你最好的朋友。” 那么什么是命名元组呢,要解释什么是命名元组时我觉得很有必要说明下为什么我们需要它以及它可以提供什么功能,那就自然明白什么是命名元组了。 我们知道在一些编程语言里,都有struct结构体这类数据类型,当我们对结构体对象进行赋值或者取值的时候可以直接使用"."运算符来操作。 但…
-
Python标准库collections模块
Python中最常用的几种数据结构是list、tuple、dict、 set,但是当我们处理一些特定数据结构场景时就显得有些不方便或者效率低,不过Python丰富的类库已经帮我们解决了这个问题,今天要提到的就是collections库,该库里包含了许多非常有用的集合方法,熟练掌握这些方法可以让我们平时写代码时更加Pythonic而不是绞尽脑汁把简单的代码复杂化。 先来看看几个非常有用的collections库里的方法。 defaultdict() defaultdict()方法其实有点类似于字典…
-
使用setdefault方法处理字典缺失值
在处理字典集合的时候经常会去访问字典的键,由于场景有很多种比如有时候访问的字典键并不存在,那么如何很好的处理缺失值呢,这里要提到的就是字典的setdefault()方法,setdefault()方法其实也类似于字典里的get()方法。 get()方法会判断字典的键是否存在,如果存在则返回值否则不做任何返回也不会导致任何异常,当然用get(key, default=None)其实也可以设定默认值,一旦设置了默认值,那么在没有找到键的情况就返回设定的默认值。 而用setdefault()方法直接访问…
-
Python的魔术方法(Magic Method)
在Python中,我们时常会用到对象,而对象又包含许多方法,尤其是一些内置的方法都以"__"双下划线开头和结束,而这些方法在Python中都被统称为Magic Method,即魔术方法。 在魔术方法中比较常见和多用的一个方法就是__init__,它可以根据类的定义以及传入的参数对之后实例化的对象进行初始化。所以使用魔术方法最大的优势可以自定义的使用Python内置方法去达到某些功能。 举几个魔术方法使用例子: _str_(self) _str_(self)方法是用于处理打印实例对象本身的输出内容…
-
Python读取数据编码排错
在Python开发中,当需要读取某些数据文件或者获取某些数据时,很有可能会遇到因为编码不匹配而报错的情况。这类问题其实非常常见,主要原因,还是因为没有选择正确的编码来识别所导致的。 为了很好的说明并解决这个问题,我以一个实际场景为例。当前,有一个csv格式的excel数据文件,为了确保数据文件的编码与我们假设的一致,我手动打开将此csv文件并明确以UTF-8编码另存为再次保存了一遍,默认情况下这个文件理应当以UTF-8的编码格式保存了。 下面简单的使用pandas库并以显式地方式设置以UT…
-
使用Splatting方法来传递参数
转载请注明出处,不胜感激!关于PowerShell的文章,我也同步发布在我的微信公共订阅号里,欢迎关注:[一起PowerShell] 所谓一年之计在于春,一日之计在于晨,那一周之计可在于周一。上班的第一天,还是一起看个简单的小技巧功能轻松一下吧。 我将要探讨如何在PowerShell中使用Splatting方法来传递参数。 首先什么是Splatting呢?简单的说,Splatting是一种用来打包传递参数值到一个命令的传参方法,Splatting里存储着相关的参数名以及对应的参数值,使用S…