
python
文章平均质量分 57
嘟嘟ha
这个作者很懒,什么都没留下…
展开
-
Python 可变参数 关键字参数
可变参数在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。我们以数学题为例子,给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……。要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:def ca...转载 2020-04-02 16:31:02 · 132 阅读 · 0 评论 -
python的序列类型
本文摘自《流畅的python》Python 标准库用 C 实现了丰富的序列类型,列举如下。按照存放的数据类型的不同来分类: 容器序列 list、tuple和collections.deque,这些序列能存放不同类型的数据。 扁平序列 str、bytes、bytearray、memoryview和array.array,这类序列只能容纳一种类型。按照能否被修改来分类: 可变序列...原创 2018-05-27 16:47:41 · 753 阅读 · 0 评论 -
super真的是调用父类吗?
首先提出两个疑问:我们已经重写了构造函数,为什么还要调用父类? super的执行顺序是什么样的?对于第一个问题比较好理解,调用父类是避免代码重复,可以直接重用父类代码对于第二个问题 看个简单例子 这个例子中B继承了A,super直接调用了父类的__init__方法再看个例子:class A: def __init__(self)...原创 2018-05-27 10:34:25 · 414 阅读 · 0 评论 -
python中的抽象基类ABC
python中的抽象基类(ABC,Abstract Base Class)相当于是Java中的接口,抽象基类就是定义各种方法而可以不做具体实现的类,当然也可以实现,只不过子类如果想调用抽象基类中定义的方法需要使用super() 抽象基类的使用: 1、直接继承 直接继承抽象基类的子类就没有这么灵活,抽象基类中可以声明”抽象方法“和“抽象属性”,只有完全覆写(实现)了抽...原创 2018-05-27 09:48:30 · 872 阅读 · 1 评论 -
python中的str、list、tuple、dict
01 str 字符串str是不可变的,双引号或者单引号中的数据,就是字符串str可进行的操作:下表索引、切片下标索引name = "abcdef"print(name[0])print(name[1])切片 切片的语法:[ 起始:结束:步长 ] 注意:选取的区间属于左闭右开型,即从”起始”位开始,到”结束”位的前一位结束(不包含结束位本身)name = 'abcde...原创 2018-05-25 11:33:43 · 1279 阅读 · 0 评论 -
python中的__new__和__init__
当执行xtq=Dog()时相当于要做三件事: 1、调用__new__方法创造对象,然后找一个变量来接收__new__的返回值,这个返回值表示创建出来的对象的引用 2、__init__(刚刚创建出来的对象的引用) 3、返回对象的引用给xtq 最后程序结束调用__del__进行内存释放操作,__new__和__init__方法加起来的作用相当于构造函数的作用,完成创建于初始化操作 注...原创 2018-05-21 20:34:18 · 215 阅读 · 0 评论 -
特殊方法(魔法方法)
特殊方法以及如何使用特殊方法?(此篇部分摘自书籍《流畅的python》,推荐下这本书,写的挺好的)魔法方法(dunder method)是特殊方法的昵称。有些Python开发者在提到__getitem__这个特殊方法的时候,会用诸如“下划线-下划线-getitem”这种说法,但是显然这种说法会引起歧义,因为像__x这种命名在 Python 里还有其他含义,但是如果完整地说出“下划线-下划线...原创 2018-05-18 17:41:45 · 413 阅读 · 1 评论 -
type、object、class的关系
图中虚线代表实例关系,实线表示继承关系,从这个图中得出几点: 1、list、str、dict、tuple、type都继承了object,所以object是最顶层的基类 2、type是本身的对象(实例),object、list、str、dict、tuple都是type的对象,所以type创建了所有的对象 3、综合1、2可知,一切皆对象的同时又继承了object类,这就是python的灵活之...原创 2018-05-18 12:15:56 · 511 阅读 · 0 评论 -
实例方法 静态方法 类方法
首先新建一个日期Date类,属性为年,月,日,tomorrow()是实例方法,这个最常见,比较简单,实例方法的第一个参数是实例对象self 当我们传入的年月日是2018-6-4这样的形式,我们就需要先进行字符串处理,在这里使用了元组的拆包 这是最基本的方式,但是这样写会有一个问题,每次传参都需要进行字符串预处理,所以我们可以将其写成静态方法 在这里,使用静态方法有一个缺点就是...原创 2018-06-04 11:36:32 · 918 阅读 · 0 评论 -
属性函数property
属性函数 属性描述符原创 2018-06-05 16:56:32 · 453 阅读 · 0 评论 -
python2 和 python3共存的常见使用
1、安装好python2和python3,配置好全部环境变量环境变量修改后,需要重新启动命令行才有效2、如何启动不同版本的python启动的时候会执行python.exe,python2和pythin3都有这个执行文件,到底启动哪一个,看环境变量,哪个在前面就先执行哪个不同版本共存第一种方法:将python.exe分别改成python2.exe和python3.exe,在命令行...原创 2018-07-20 16:23:38 · 3641 阅读 · 1 评论 -
python中的+和+=操作
先看一个简单的例子 从程序分析,进行直接+操作后,python会重新生成一个对象,而进行+=操作并不改变原来的对象,是在原来对象的基础上进行操作,所以+=也称为就地加除此之外+和+=还有不同: 从程序运行结果知道,+=后面的对象可以是元组,而+则不行,事实上,+=是通过魔法函数__iadd__实现的 在__iadd__中调用了extend()方法,extend的参数是一个可迭...原创 2018-05-27 17:39:39 · 3984 阅读 · 0 评论 -
bisect管理已排序的序列
bisect管理已排序的序列,这里的是可变的序列类型,bisect模块包含两个主要函数,bisect和insort,两个函数都利用二分查找算法来在有序序列中查找或插入元素。以下是pycharm中查看的bisect模块的结构 bisect默认作用和bisect_right相同, insort默认作用和insort_right相同在查找方面,python中有list.index()的方法,此...原创 2018-05-27 21:02:24 · 256 阅读 · 0 评论 -
string中的intern机制
今天我们来看看python中一个非常重要的机制,intern机制,首先我们来举个例子,如下: a1=”HelloWorld” a2=”HelloWorld” a3=”HelloWorld” a4=”HelloWorld” a5=”HelloWorld” a6=”HelloWorld” a7=”HelloWorld” a8=”HelloWorld” a9=”HelloWorld” ...转载 2018-05-28 16:39:56 · 310 阅读 · 0 评论 -
python 鸭子类型 多态
鸭子类型:When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck. (可以查看维基百科) 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。鸭子类型是动态类型的一种风格,不是由继承特定的类或实...原创 2018-05-25 20:29:33 · 680 阅读 · 0 评论 -
类变量 实例变量 属性查找顺序
看例子class A: # 类变量 b = 1 def __init__(self, x, y): # 实例变量 self.x = x self.y = y# 实例化对象a = A(2,3)# 通过实例化对象访问 实例属性print(a.x, a.y) # 2 3# 通过实例化对...原创 2018-06-03 21:56:03 · 296 阅读 · 0 评论 -
python中的深拷贝和浅拷贝
在看下面内容之前,先推荐几个易懂的文章: 1、Python中变量、赋值、浅拷贝、深拷贝https://www.cnblogs.com/LetMe/p/6724555.html 2、 Python中深拷贝与浅拷贝的区别: https://blog.youkuaiyun.com/u014745194/article/details/70271868 3、 http://greybea...转载 2018-05-28 12:02:31 · 270 阅读 · 0 评论 -
属性描述符
属性描述符原创 2018-06-07 20:02:23 · 226 阅读 · 0 评论 -
__getattr__和__getattribute__
__getattr__当属性查找不到时会报错 ___getattr__是在查找不到属性时调用,重写___getattr__就可以知道 我们可以在__getattr__写自己的逻辑,以下是两个应用场景 1、当我们写错属性名字时,可以通过__getattr__修正过来 2、例子中我们调用user.company,但是company在info里面,不能直接被访问,这样我们可以在_...原创 2018-06-05 18:05:27 · 1501 阅读 · 0 评论 -
python中一切皆对象
相对于静态语言,python的面向对象更加彻底,变量、函数、类等皆是对象,表现如下: 1、赋值给变量 函数赋值给变量 类赋值给变量 2、可以添加到集合对象中、可以作为参数传递给函数 3、可以当做函数的返回值、装饰器就是此原理 ......原创 2018-05-18 10:29:05 · 636 阅读 · 0 评论 -
可迭代对象Iterable 迭代器Iterator
什么是迭代?如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。在Python中,迭代是通过for … in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的可以看出,Python的for循环抽象程度要高于Java的for循环,因为Python的for循环不仅可以用在list或tuple上...原创 2018-05-29 17:08:37 · 622 阅读 · 0 评论 -
python 一个经典的参数错误
直接上例子 首先我们新建了Company类,它有两个属性公司的名字name和员工staffs,默认是一个可变的列表,类有两个方法,增加员工和删除员工,接下来新建了三个对象进行测试,com1中传递了name和可变的员工list,com2和com3传递name,不传递可变的员工list,运行结果发现com2和com3的员工列表staffs一样,用is判断com2.staffs和com...原创 2018-05-28 18:47:03 · 720 阅读 · 0 评论 -
python中的==和is
先看个is在程序中的运用 从这两个小例子可以看到,变量赋值和=号赋值是不一样的,变量赋值是改变了变量的指向,而等号赋值是重新开辟了一块内存,所以第二个例子中a和b的地址不同,对于is和==,is用来判断内存地址是否相同即为是否为同一个对象,而==是判断值是否相等,接着再看下面的例子 奇怪了,刚刚=赋值时说明是新开辟了一块内存,这里的例子怎么内存地址是一样的??先不急,继续往下看 ...原创 2018-05-28 16:59:38 · 281 阅读 · 0 评论