Python导图
2017-12-04 14:14:04 36 举报
AI智能生成
登录查看完整内容
Python思维导图, Python基础知识
作者其他创作
大纲/内容
常用类型
特点
字符串不能修改
列表可以嵌套任何东西
字典是无序的(用key来寻找)
字典也可以嵌套很多层
基本操作
转成字典
str(dict)
元组
str(tup)
list(tup)
列表
str(nums)
tuple(nums)
字符串
tuple(eval(str))
list(eval(str))
eval(str_dic)
判断某个元素是否在里面
isIn= 1 in list_1
集合数据类型
列表生成式
[ i*2 for i in range(10)] #动态生成列表
字典
无序
集合
去重复
关系测试
交集,差集,并集,反向(对称)差集
项目相关
软件目录规范
常用模块
标准库
time
struct_time-asctime-> Tue Dec 5 10:57:26 2017
Timestamp-ctime-> Tue Dec 5 10:57:26 2017
random
os
sys
shutil
shelve
configparser
hashlib
类相关
类创建以及调用
创建方式
普通方式
class Foo(object): def func(self): print(\"Hello world\")
特殊方式
#type第一个参数:类名#type第二个参数:当前类的基类#type第三个参数:类的成员
调用顺序
__new__ --> __init__ --> __call__
参考链接
http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python
变量
类变量
共用属性
节省内存
实例变量
方法
静态方法
静态方法里不能访问类或实例中的任何属性
语法
@staticmethoddef eat(): print(\"%S is eating\" %(\"ddd\"))
类方法
类方法只能访问类变量,不能访问实例变量
@classmethod #类方法只能访问类变量def eat(self): print(\"%s is eating\" %(self.name))
实例方法
必须是类的实例来进行方法的绑定
属性方法
方法->静态属性
调用一个对象的属性直接使用
特殊成员方法
__doc__
__module__
__class__
__call__
__dict__
__str__
__getitem__、__setitem__、__delitem__
其他特性
反射
字符串->对象属性/方法
hasattr
判断一个对象里是否有对应的字符串的方法
getattr
根据字符串获取obj对象里的对应的方法的内存地址
setattr
delattr
断言
动态导入模块
import day7.lib.aa as aobjc = a.C()print(objc)
modname = \"day7.lib.aa\"mod = __import__(modname) # 导入到day7层级cls_c = mod.lib.aa.Cprint(mod.lib.aa)print(mod.lib.aa.C)objc = cls_c()print(objc)
# 官方建议import importlibaa = importlib.import_module(\"day7.lib.aa\")objc = aa.C()print(objc)
面向对象特点
封装
继承
2种方式
class People:经典类
class People(object): # 新式类
多继承顺序问题
只会走一个父类的构造函数
继承策略
Python3.x
新式类:广度优先
经典类:广度优先
Python2.x
新式类:深度优先
经典类:深度优先
多态
接口重用
实例
len()
sorted()
单例模式
Python
基础概念
编程语言
解释型
需要解释器才能运行,要解释并运行源代码,机器上需要安装解释器程序
可移植
面向对象,对象的类,实现继承关系
交互式
开源
便于理解和使用
解释过程
1.以单词为单位逐行扫描代码
2.组织成逻辑结构的树状结构
3.转化为字节码
4.由python虚拟机执行
图示
万物皆对象
不可变对象
自动复制
种类
Strings,tuples,numbers
示例
>>> id(x)4418510432
>>> x *= 4>>> id(x)4418511296//其实地址发生了变化
可变对象
对象引用
list
dict
数据结构
标量
整数
浮点数
序列
主要方法
多个单个字符合并而来的
>>> s = r'E:\ote\\Python.doc'>>> s'E:\\\ote\\\\Python.doc'>>> print(s)E:\ote\\Python.doc
不可变性
unicode字符串
字节数组
缓冲区
xrange对象
映射
通过键值存储数据,内部实现基于二叉树(Binary Tree)
效率比列表差很多
特殊数据结构
既不是序列也不是映射类型,更不是标量
唯一的
不可变的对象
运算
常用操作符
算术操作符
赋值操作符
比较操作符
逻辑操作符
操作符优先级
命名规则
字母,数字或下划线
第一个不能使数字
不能以关键字命名
常量
局部变量
全局变量
编码规则
ASCII
1bytes->255
gb2312
gbk
gb18030
Unicode
2bytes
UTF编码
UTF-8
en->1byte
zh->3bytes
utf-32
4bytes
UTF-16
转码规则
先decode
变成unicode
再encdoe
注释
单行注释-># xxxx
多行注释->'''xxx'''
输出格式方式
Python3
bytes类型
文本总是unicode,由str类型表示
二进制数据, 由bytes类型表示
作用域
一个变量的作用域总是由在代码被赋值的地方所决定的
本地作用域(Local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)
常规语法
基本语法
ifelse判断
强制缩进
if _username == username and _password == password: print(\"Welcome user {name} login...\".format(name=username))else: print(\"Invalid username or password!\")
while语句
可以用break,跳出循环
for循环
自定义步长
for i in range(3): print(i)
可以通过else,当for迭代循环列表后或while循环条件变为假时,循环并非通过break语句终止时,便会执行这个else语句
range()函数
for i in range(5):for i in range(len(L)):
异常
#2.7
#3.x
自定义异常
with语句
with open(\"xx.xx\
文件的读取
readline()和readlines()
常见格式
txt格式
csv格式
json格式
dumps方法
loads方法
其他语法
生成器(generator)
只有在调用的时候才会生成相应的数据
只记录当前位置
只有一个__next___方法
可以用作于for循环
迭代器(Iterable)
list,tuple,dict,set,str
generator
包括生成器和带yield和generator func
判断方法
isinstance() 判断一个对象是否是Iterable对象
函数
语法及特性
特性
可扩展性
一致性
易维护
返回值
参数
def func(name) #一般参数
def func(*args) #接受n个位置参数
递归
匿名函数
高阶函数
概念
一个函数可以接受另一个函数作为参数
内置函数
装饰器
1.不能修改被装饰得函数的源代码2.不能修改被装饰的函数的调用方式
装饰器的作用就是为已经存在的对象添加额外的功能
必要知识
函数即“变量”
嵌套函数
高阶函数+嵌套函数
*args and **kwargs
*args-不确定函数里要传递多少个参数时候
**kwargs-允许你使用没有实现定义的参数名字
文件相关
打开文件方式
f=open(\"xxx.txt\
with open(\"xxx.txt\
+模式
r+: 往后追加
w+: 写的模式打开文件(覆盖,写完后读)
a+: 追加写读
二进制模式
rb,wb,ab(二进制格式)
其他方法
seek
tell
truncate
flush
实时性较高
编码风格
分号
不要用分号作为你的行结束符,也不要利用分号在同一行放两个指令。
每行长度为80字符
遇到文本示例
x = ('This will build a very long long ' 'long long long long long long string')
圆括号
\b不能用情况
return语句
在条件判断语句中
在元组(tuple)周围
可以使用情况
暗示两行是连在一起的
用来括起长表达式中的子表达式
缩进
空格
Python解释器
#!/usr/bin/python2.5
版本和许可声明
模块头及作者信息
\"\"\"用一行文字概述模块或脚本,用句号结尾。留一个空行。本 __doc__ string 的其他部分应该包括模块或脚本的全面描述。作为可选项,还可以包括导出的类和函数的简要描述。 ClassFoo: 一行概述。 functionBar(): 一行概述。\"\"\"__authors__ = [ # 请按照姓氏字母顺序排列: '\"John Smith\
函数和方法
__doc__ string 应该包括函数能做什么、输入数据的具体描述(“Args:”)输出数据的具体描述(“Returns:”、“Raises:”、或者“Yields:”)
类
class SampleClass(object): \"\"\"这里是类的概述。 详细的描述信息…… 详细的描述信息…… Attributes: likes_spam: 布尔型,表示我们是否喜欢垃圾邮件。 eggs: 整数,数我们下了多少蛋。 \"\"\
应该明确的从object基类继承
应该用 % 运算符来格式化字符串,即使所有的参数都是字符串也可以使用+
多行字符串
使用 \"\"\" 而不是 '''
注意
避免在循环中用 + 或 += 来连续拼接字符串。因为字符串是不变型,这会毫无必要地建立很多临时对象,从而二次方级别的运算量而不是线性运算时间。相反,应该把每个子串放到 list 里面,然后在循环结束的时候用 ''.join() 拼接这个列表。
TODO style
# TODO(someuser): 这里应该用 \"*\" 来做级联操作。# TODO(anotheruser) 用 relations 来修改这儿。
# Fix by November 2008
import分组及顺序
import sysimport os
分组顺序
import 标准库import 第三方库import Google App Engine 相关库import Django 框架相关库import SoC framework 相关库import 基于 SoC 框架的模块import 应用程序特有的内容
import a_standardimport b_standardimport a_third_partyimport b_third_partyfrom a_soc import ffrom a_soc import gimport a_socimport b_soc
命名
避免以下情况
使用单个字符命名,除非是计数器或迭代器
在任何包或模块的名字里面使用减号
__double_leading_and_trailing_underscore__ 在变量开头和结尾都使用两个下划线(在 Python 内部有特殊含义)
Packages
公开
lower_with_under
Modules
内部
_lower_with_under
Classes
CapWords
_CapWords
Exceptions
Functions
firstLowerCapWords
_firstLowerCapWords()
Global/Class Constants
CAPS_WITH_UNDER
_CAPS_WITH_UNDER
Global/Class Variables
Instance Variables
_lower_with_under (protected) or __lower_with_under (private)
Method Names *
firstLowerCapWords()
内部
_firstLowerCapWords() (protected) or __firstLowerCapWords() (private)
Function/Method Parameters
Local Variables
程序入口
所有的 Python 源代码文件都应该是可导入的
你的代码应该总是在执行你的主程序之前检查if __name__ == '__main__': 这样就不会在模块被导入时执行主程序。
大写 main() 是故意要和命名约定的其他部分不一致,也就是说建议写成 Main()
自省
运行时候能够获得对象的类型
推导式comprehensions(又称解析式)
列表推导式
基本格式
variable = [out_exp_res for out_exp in input_list if out_exp == 2] out_exp_res: 列表生成元素表达式,可以是有返回值的函数。 for out_exp in input_list: 迭代input_list将out_exp传入out_exp_res表达式中。 if out_exp == 2: 根据条件过滤哪些值可以。
使用()生成generator
将俩表推导式的[]改成()即可得到生成器
multiples = (i for i in range(30) if i % 3 is 0)print(type(multiples))print(multiples.__next__()) #0print(multiples.__next__()) #3# Output: <type 'generator'>
字典推导式
字典推导和列表推导的使用方法是类似的,只不中括号该改成大括号
集合推导式
跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}
1. object # 公用方法
2. __object__ # 内建方法,用户不要这样定义
特殊方法专用的标识
3. __object # 全私有,全保护
4. _object # 半保护
只有类对象和子类对象自己能访问
不能通过from xxx import *导入
class Foo(): def __init__(self): pass def public_method(self): print('This is public method') def __fullprivate_method(self): print('This is fullprivate_method') def _halfprivate_method(self): print('This is halfprivate_method') f = Foo()f.public_method() # OKf.__fullprivate_method() # Error occurf._halfprivate_method() # OKf._Foo__fullprivate_method() # OK
_object和__object的作用域限制的本模块内
class A(object): def __init__(self): self.__private() self.public() def __private(self): print('A.__private()') def public(self): print('A.public()')class B(A): def __private(self): print('B.__private()') def public(self): print('B.public()')b = B()#output:#A.__private()#B.public()
私有变量矫直private name mangling
print('\'.join(dir(A)))_A__private #__private消失了__init__public
2点注意
因为矫直会使标识符变长,当超过255的时候,Python会切断,要注意因此引起的命名冲突。
当类名全部以下划线命名的时候,Python就不再执行矫直
class ____(object): def __init__(self): self.__method() def __method(self): print '____.__method()' print '\'.join(dir(____))#__method 没有被矫直
__new__vs__init__区别
__new__是一个静态方法
__init__是一个实例方法
GIL线程全局锁
解决办法
多进程
协程
是进程和线程的升级版
进程和线程都有面临内核态和用户态的切换问题而耗费许多切换时间
用户自己控制切换的时机,不需要陷入系统的内核态
闭包
必要条件
必须有一个内嵌函数
内嵌函数必须引用外部函数中的变量
外部函数的返回值必须是内嵌函数
函数运行完继续保留在内存空间里
深拷贝和浅拷贝
引用
copy() 浅拷贝
deepcopy() 深拷贝
垃圾回收机制
主要使用引用计数来跟踪和回收垃圾。
引用计数
标记-清除机制
分代技术
is和==
is对比地址,==对比值
编译与链接
预处理
编译
汇编
链接
创建字典
直接创建
工厂方法
fromkeys()方法
0 条评论
回复 删除
下一页