相关文章推荐
闷骚的蛋挞  ·  学术交流 | ...·  2 月前    · 
憨厚的香烟  ·  C#反射和特性 - 知乎·  1 年前    · 

python note

python语言特点

解释性语言 、动态型语言(运行时确定数据类型)、一切皆对象(数据、容器、类、模块)

python运行机制 (python解释器):

源代码(.py) 编译后生成pythonCodeObject存在于内存中(.pyc文件是pythonCodeObject在硬盘中的表现形式),将编译后的.pyc文件传入python虚拟机中运行

虚拟机会从编译得到的PyCodeObject对象中一条一条执行字节码指令,并在当前的上下文环境中执行这条字节码指令

python.jobbole.com/8459

python中的数据结构 cnblogs.com/myworld7/p/

列表和元组:

python中的列表是对其他对象的引用组成的连续数组,指向这个数组的指针及长度被保存在一个列表头结构中。

list.insert o(N) list.delete o(N) 修改/获取 o(1) 查询 o(N)

操作 复杂度

复制 O(N)

添加元素(在尾部添加) O(1)

插入元素(在指定位置插入) O(N)

获取元素 O(1)

修改元素 O(1)

删除元素 O(N)

遍历 O(N)

获取长度为k的切片 O(k)

删除切片 O(N)

列表扩展 O(k)

测试是否在列表中 O(N)

min()/max() O(n)

获取列表长度 O(1)


字典

CPython使用伪随机探测(pseudo-random probing)的散列表(hash table)作为字典的底层数据结构。由于这个实现细节,只有可哈希的对象才能作为字典的键。

操作 平均复杂度 平摊最坏情况复杂度

获取元素 O(1) O(n)

修改元素 O(1) O(n)

删除元素 O(1) O(n)

复制 O(n) O(n)

遍历 O(n) O(n)


set集合

CPython中集合和字典非常相似。事实上,集合被实现为带有空值的字典,只有键才是实际的集合元素。此外,集合还利用这种没有值的映射做了其它的优化。


函数:

传递实参:位置实参、关键字实参、默认值

返回值:简单值、列表/字典等复杂数据结构

传递列表,在函数中修改列表,传递列表副本fun(L[:])(防止被修改)

传递任意数量实参 fun(*args) args为一个元组

传递任意数量关键字实参 **args

函数变量作用域:函数中定义的参数和变量属于局部变量,作用域为函数内部

在函数内部不要修改全局变量(python使用屏蔽方式保护全局变量),修改时会创建一个副本。若要修改全局变量,需用在函数中global关键字修饰全局变量

内嵌函数

闭包:在一个内部函数中对外部作用域的变量进行引用,这个内部函数成为闭包

外部函数的局部变量对应内部函数的局部变量,不可对外部局部变量进行修改。若要修改,使用容器类型 python3中使用nonlocal修饰外部局部变量

filter map lambda函数



python类:

类名首字母大写 self相当于C++中的this指针

魔法方法__init__()构造方法

公有和私有:私有变量加__两下划线 _类名__变量名访问私有变量

继承:class 类名(被继承的类) 相同方法或属性会发生覆盖

super函数

组合:在类中使用类

类对象(类属性和类对象绑定)和实例对象

魔法方法:__fun__()


迭代器和生成器

iterable: 实现了__iter__()方法的对象

iterator:实现了__iter__()和__next__()方法的对象

generator:生成器是一种特殊的迭代器,实现:生成器函数(yield)和生成器表达式



python装饰器:

为已经存在的函数或对象添加额外的功能

编写一个函数,返回封装原始函数调用的一个子函数

当装饰器需要参数时,必须使用第二级封装

类实现装饰器:让类的构造函数__init__()接受一个函数,然后重载__call__()并返回一个函数,也可以达到装饰器函数的效果

内置的装饰器:内置的装饰器和普通的装饰器原理是一样的,只不过返回的不是函数,而是类对象 @property @stasticmethod @classmethod


函数式编程

map(function,iterable)

reduce(function, iterable[, initializer])

filter(function,iterable)

sorted(L,key)

lambda

decorator

编辑于 2019-05-09 21:05