python
甘先了个生
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
跟你深入剖析可迭代对象和迭代器的区别和联系
导语可迭代对象和迭代器是经常碰到但又很容易混淆的两个概念,所以今天小编跟大家深入剖析一下可迭代对象和迭代器的区别。认真看完本文,你将收获:理解什么是可迭代对象理解检查可迭代对象的方法理解什么是迭代器可迭代对象和迭代器的关系事不宜迟,我们马上开始吧!可迭代对象要理解可迭代对象,那首先要搞清楚迭代的概念。关于迭代,维基百科是这样子定义的:迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代原创 2020-05-12 11:12:36 · 616 阅读 · 0 评论 -
特殊的分派机制和重载向量加法运算符
导语小编一直都觉自己公众号的排版很鸡肋,从这篇文章开始将使用了新的排版风格,还特意地做了一个卡通二维码(见文末),希望大家会喜欢(不要脸地假装有很多粉丝)。其实关于排版,小编要真心感谢一下景禹大佬的指导。好了,今天想跟大家谈谈如何重载运算符+,认真看完这篇文章,你将收获:了解中缀运算符特殊方法的分派机制了解向量类如何实现 __ add __ 方法了解向量类如何实现 __ rad...原创 2020-05-07 22:36:55 · 299 阅读 · 0 评论 -
若用多重继承,请考虑mix-in混合类
为什么要用mix-in混合类Python是面向对象的编程语言,它提供了一些内置的编程机制,使得开发者可以适当地实现多重继承,即一个子类可以继承多个父类,但是多重继承的设计经常被人诟病,因为它违背了“is-a”的关系。但是也存在需要多重继承的情况。例如,轿车是一个交通工具,所以轿车类应该继承交通工具这个父类。那民航飞机呢?它也属于交通工具的一种,所以也应该继承交通工具这个父类,但是交通工具这个类...原创 2020-05-04 10:40:17 · 332 阅读 · 0 评论 -
Python动态语言之魅力大揭秘
之前的文章跟大家讲解了鸭子类型,其实鸭子类型是编程语言中动态类型语言中的一种设计风格。今天跟大家一起谈谈动态语言的魅力。根据维基百科,动态编程语言是这样子定义的:动态编程语言是高级编程语言的一个类别,在计算机科学领域已被广泛应用。它是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言是一门在运行时可以改变其结构的语...原创 2020-04-30 11:01:54 · 307 阅读 · 0 评论 -
帮你举例说明什么是Python鸭子类型
学习python的时候,也知道鸭子类型(ducking typing)这个说法,“当你看到一只鸟走起来像鸭子,游泳起来鸭子,叫起来也像鸭子,那么这只鸟就被称为鸭子类型”,字面上理解了,但是在Python中是如何体验的?这一点还真不太懂。今天在看书,又再次碰到这个玩意,于是决定把这个鸭子类型给整明白。按照书上的解释,鸭子类型是多态一种形式,这这种形式中,不管对象属于哪个类,也不管声明的具体接口是什...原创 2020-04-27 11:15:26 · 591 阅读 · 0 评论 -
图解Python浅复制和深复制的
浅复制和深复制的区别在于,浅复制只复制引用到新的列表中(引用可以理解为地址),不会创建新对象。而深复制创建新的对象,并把对象保存在新的地址中。浅复制和深复制对可变和不可变序列的影响是不一样的。对可变序列的浅复制会带来意想不到的结果。看示例1示例1>>>a = [[1],2,3,4]>>>b = list(a)>>>a[0].append...原创 2020-04-21 10:05:37 · 737 阅读 · 0 评论 -
记录一个关于变量作用域的神奇例子
程序中的变量并不是说访问就能访问的,每个变量都有使用范围,也就是变量都有自己的作用域。看示例1示例1b = 3def f1(a): print(a,b)if __name__ == "__main__": f1(3) #输出结果: 3 3虽然函数f1中并没有定义b,但是可以使用全部变量b,再看示例2,可能会让你跌眼镜示例2b = 3def f1(a): p...原创 2020-04-20 10:39:14 · 227 阅读 · 0 评论 -
python函数传参方法超级大汇总
位置参数位置参数传递是最为简单的传递方式,按照函数参数的位置顺序逐个匹配传入,传入参数的个数必须与函数参数个数一致。见示例1,根据位置顺序进行匹配,a,b,c分别赋值为2,3,4#示例1def func(a,b,c): print("args:",a,b,c) if __name__ == "__main__": func(2,3,4) #输出结果 args: 2...原创 2020-04-17 21:25:46 · 343 阅读 · 0 评论 -
捋一捋字符串和字节序列的关系
Python3的一个新特性算是把文本和二进制数据清晰地区分开来了。我们看到的文本其实就是一连串的Unicode字符组成的str(下文文无特殊说明均指Unicode字符),最后计算机以二进制数据的形式存储起来。Python内置了两种二进制数据类型,分别是bytes和bytearray。每一个字符都有一个对应的标识,即码位,是0-1 114 111的数字(十进制),在Unicode标准中以4-6个十...原创 2020-04-15 21:48:44 · 1498 阅读 · 0 评论 -
对序列使用*操作,可要格外小心了
如果你对序列使用*操作符,要多加小心了。因为…,好吧,先看下面的代码…a1=[[1,2,3]]b1=a1*2b1[0][0]=0print(b1)#[[0, 2, 3], [0, 2, 3]]首先你想对a1的第一个元素进行了复制,然后你希望对a[0][0]进行修改,但是你发现了吗?你不但修改了a[0][0],还顺手修改了a[1][0],这也许是你不想要的结果!为什么会导致这种情况?...原创 2020-04-09 20:58:56 · 236 阅读 · 0 评论 -
可变序列有哪些坑?
先说点概念在解释可变/不可变序列之前,先要知道什么是序列?序列就一个个元素有序地排列在一起,像小朋友”排排坐,吃果果“一样。可变序列就是创建一个序列后,可以改变元素,可以比如成排好队小朋友之间位置可以换,可以插队等。可变序列包括列表和字典,集合。不可变序列就是序列一旦创建后,就不可以修改了,可以比如成排好队地小朋友都十分地”拽“,不让人插队,不给换位置等操作。不可变序列包括元组,数值,字符串...原创 2020-04-09 10:58:13 · 340 阅读 · 1 评论 -
python的map()和filter()函数
map()函数map()函数,顾名思义,用于映射,把一个序列的每一个元素映射到函数中,然后返回一个迭代对象。例如:def square(x): return x**2 print(list(map(square,[1,2,3]))) #[1,4,9] 这里注意要用list作转换当然也可以用匿名函数lambdaprint(list(map(lambda x:x**2,[1,2...原创 2020-04-07 09:09:09 · 216 阅读 · 0 评论 -
python格式化输出总结
%a = 3.14151617print('The number is %f'%a) #浮点数输出,小数点后保留6位有效数字print('The number is %.3f'%a) #浮点数,小数点后保留3位有效数字print('The number is %.3ef'%a) #指数形式输出,小数点后保留3位有效数字print('The number is %d'%a) #十进制整...原创 2020-03-29 22:01:57 · 238 阅读 · 0 评论 -
Python如何判断对象为空值?
首先我们要知道None,空列表[],空元组(),空字典{},0都是被程序判断为False,所以要判断对象是否为空,可以用if not x的方法:a={}if not a : print("Empty")else : print("Not Empty"另外,对于list,根据PEP8,不推荐用len(list)==0来判断。欢迎交流~...原创 2020-03-27 20:40:39 · 6953 阅读 · 0 评论 -
python中is和==的区别一定要搞清楚
is 是用于判断两个变量的引用对象是否相同,也就是说a is b等价于id(a)==id(b),引用对象相同,地址是相同的例如a=1b=1print(a is b)#Truea=1.1b=1.1print(a is b)#Truea=[1]b=[1]print(a is b)#Falsepython 为了性能考虑,对于值相同的不可变对象,都不会重新创建新的地址来存储对象,而...原创 2020-03-27 11:10:03 · 540 阅读 · 0 评论 -
理解python的with语句和上下文管理器
why with?先看这样子的程序myfile = open(r'C:\misc\data')try: for line in myfile: print(line) #...more code...finally: myfile.close()程序尝试打印myfile的每行数据,最后关闭myfile文件当然我们也有更加简单的写法,wi...原创 2020-03-25 21:55:47 · 194 阅读 · 0 评论 -
python如何分析程序性能
when use Profiler?有时候你觉得程序运行很慢,想对程序进行优化,但是你又不知道哪部分程序入手,这时候你就需要对程序整体性能进行分析,看看速度慢主要是哪部分程序导致的why use cProfile?cProfile,一个python程序性能分析模块。其实Python有两个profiler,Profile和cProfile,前者是纯Python写的,会产生比较大的开销,测试结果...原创 2020-03-24 10:48:49 · 529 阅读 · 0 评论 -
理解python中__init__.py和__all__
__ init __.pywhat is init.py?通常在一个工程文件里面,我可能会发现在某个文件夹下面会有一个命名为__init__.py的py文件why need init.py?在一个工程文件下面,我们可能会有很多的py文件(模块),文件太多,管理很不方便,这时候我们就可以创建一个包(package)对这些文件进行管理,把具有共同特征的文件放在同一个package里面,那该如何...原创 2020-03-15 15:16:29 · 1975 阅读 · 1 评论 -
python抽象基类理解
(what)什么是抽象基类?抽象基类它提供了接口,但是又没有去把接口实现的类,需要由子类完成。感觉它就是老板,只告诉你要完成项目A, 你接到项目A后(继承),你自己去把它完成。抽象基类特点:1.继承类必须实现抽象基类的方法2.抽象基类无法实例化(why)为什么要有抽象基类这玩意?1.why 抽象基类?譬如要开发一个项目,你要规定项目开发者要去完成某些接口,这时候抽象基类就帮上忙了,你...原创 2020-03-12 20:19:02 · 541 阅读 · 0 评论 -
python中private、protected&public
private:1.在类中的属性或者方法前加上两条下划线“__”,该属性或方法就变成了私有的了,只能在类内访问。2.如果想从外部访问私有属性或者方法(不建议访问),有两种方法,一是定义一个函数进行访问,二是对私有的属性或者方法的名字进行转换为:一个下划线“_”+类名+私有属性或者方法的名字。protected:1.在类中的属性或者方法前加上单下划线“_”,该属性或者方法就变成protect...原创 2020-03-11 21:44:34 · 2132 阅读 · 1 评论 -
python多态理解(多态有啥用)
什么是多态?多态顾名思义多种状态,在python中,不同的对象调用同一个接口,表现出不同的状态,称为多态。class Duck(): def who(self): print("I am a duck")class Dog(): def who(self): print("I am a dog")class Cat(): def ...原创 2020-03-11 11:04:45 · 2903 阅读 · 12 评论 -
生成器、迭代器、可迭代对象、迭代协议的区别与联系
迭代器协议:必须实现__next__()方法,要么返回迭代的下一项,要么引起StopIteration异常可迭代对象:实现了__iter__方法的对象,它能将所有可迭代对象转化成迭代器迭代器:不仅实现了__iter()方法,还实现了__next__()方法的对象可迭代对象:列表,字典,元素,字符串等,但可迭代对象并不一定是迭代器生成器:使用了yield的函数就是生成器,它是一个返回迭代器对...原创 2020-03-05 19:50:32 · 336 阅读 · 0 评论 -
yield函数生成器详解(例子分析)
定义:其实也没啥好说,只要函数中带有yield,那么该函数就是一个生成器了。特性:首先定义yield生成器函数,如下:def yield_func(): print("**") while True: result = yield 1 print("result:", result)运行以下代码:if __name__ == "__mai...原创 2020-03-03 22:26:21 · 1459 阅读 · 0 评论 -
告诉你python装饰器的来龙去脉
NOTE: python装饰器的作用在于让程序在没有任何代码变动的情况下可以额外添加功能,使得程序更加简洁。有了装饰器,就可以抽离出与函数功能本身无关的雷同代码并继续重用原来python装饰器就是这么回事def say_hello(): print("hello!")def say_goodbye(): print("goodbye!")if __name__ == "...原创 2020-03-01 22:16:33 · 254 阅读 · 0 评论
分享