#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 换行\n 续行\ s[:i] + s[i:] 等于 s
#转义 \e 空 \000 八进制 \oyy 十六进制 \xyy
# 颜色控制 \033 格式:\033[显示方式;前景色;背景色;m正文 使用终端默认颜色:\033[0m
#unicode字符 用u或U表示 如u'test',原始字符 用r或R 如r'test\n\r',转义字符直接显示,如换行 回车 ,表示字节 用b,如 b'test' 多行用\连接
# Numbers 数字型 不可变 整型 int (二进制:0b或0B 八进制:0o或0O 十六进制:0x或0X)、
# 浮点型 float(尾数e解码或尾数E解码 1个符号位 52位尾数+11位解码) 高精度浮点数用Decimal()
# 复数型 complex(ae+bj) ae表示实数 通过复数变量.real获得 bj表示虚数 通过复数变量.image获得
# String 字符串型 '' "" 不可变
# 将序列转成对应的类型:tuple(s) list(s) set(s) frozenset(str) dict(d)
# 将整数转成字符:chr(x) unichr(x) 将字符转成整数:ord(str) 将对象转成字符串 str(x) repr(x)
# bytes 字节型 bytes() 或 b'' 负责处理二进制,跟编码有关系 网络传输 图片 文件等
# List 列表型 [] 将序列转成列表:list(seq) 可变 有序可重复 查找和插入慢,占用内存小
# Tuple 元组型 () 将序列转成元组:tuple(seq) 指向不可变 有序
# Sets 集合型 set() 无序不重复 可变
# Dictionaries 字典型 {} 无序 键值对 键不重复 可变 dict.fromkeys(seq[, val]) 有序字典:collections.OrderedDict 查找和插入快,占用内存大
# bool 布尔型 通过bool()判断 True False 为False:None、0、0.0、-0.0、空集合、空字符串、空列表、空元组、空字典 为True:-1 非零、非空
# None 空类型
# 布尔型进行算术运算会被转换为整形
# 在混合运算中,简单类型的操作数会被转换为与他运算的复杂类型操作数的类型
# or 左操作数布尔值为True,则返回左操作数,否则返回右操作数或其计算结果
# and 左操作数布尔值为True,则返回右操作数,否则返回左操作数或其计算结果
# 运算符优先级通过()来限制,,多个括号,最内层括号部分先执行,一般自左向右顺序结合
# ascii 占1个字节8位 pyton默认编码 unicode 占2个字节 16位 utf-8 英文占1个字节 8位 中文占3个字节 24位
# 无法显示为ascii的字节用 \x##表示 中文经UTF-8编码占3个字节 英文占1个字节
# 字符串类型 String 在内存中读写字符串 用StringIO 在内存中读写字节用 BytesIO
# 在网络上传输 或磁盘中存放字符,需要将字符转换成字节 即 String->bytes 英文:编码操作 encode('ascii') 中文 encode('utf-8')
# 从网络上传输 或磁盘中读取字符,需要将字节转换成字符 即 bytes->String 英文:解码操作 decode('ascii') 中文 decode('utf-8',errors='ignore')
# 计算字符长度 len('test')
# 计算字节长度 len(b'test')
# 作用域的范围按如下方式搜索执行 L(本地) –> E(闭包) –> G(全局) –>B(内建)
# 把变量从内存变成可存储或进行网络传输,则被认为是进行了序列化处理,序列化后,可存到磁盘 或通过网络传输到别的机器
# 从变量内容从序列化的对象重新读到内存 成为反序列化
# 将已安装的库导出到文件
# pip freeze >pythonlib.txt
# 从已有的库导入
# pip install -r pythonlib.txt
# 搭建python虚拟环境
# pip install virtualenv
#
# where virtualenv
#
# mkdir 虚拟环境目录
# virtualenv –p python.exe路径 –-no-site-packages 虚拟环境路径
#
# 进入Scripts,执行activate 启用虚拟环境 ,退出虚拟环境 deactivate
#列表可以包含列表 元组 集合 字典
#listb=[lista,tuplea,seta,dicta]
#元组可以包含列表 元组 集合 字典
#tupleb=(lista,tuplea,seta,dicta)
#集合可以包含列表 元组 集合 字典
#setb=(lista,tuplea,seta,dicta)
#print(lista,tuplea,seta,dicta)
#字典中的值可以包含列表 元组 集合 字典
#dictb={1:lista,2:tuplea,3:seta,4:66,5:'dd',6:dicta}
#dictc={'lista':1,'tuplea':2,'seta':3,'dicta':4}
# 字典通过deepcopy()复制生成新的字典对象,对新字典对象改动,不影响原字典对象
#元组、集合、字典->列表
#la=list(dicta)
# 对列表进行 + * sorted() 操作会生成新列表
#列表、集合、字典->元组
#la=tuple(dicta)
#列表、元组、字典->集合
#la=set(dicta)
# 集合1-=集合2,从集合1中删除与集合2中相同的元素
# set集合与frozenset集合,可以进行比较操作 判断子集 严格 < 非严格:<= 判断超集 严格:> 非严格>=
# 并& 交集操作 intersection(),联合|:并集操作 union()
# 差补-:补集操作 difference() 结果的元素符合左边的集合,对称差分^:交集取反操作 symmetric_difference()
# 差补更新-= 并集更新&= 联合更新|= 对称差分更新^= 为对应的集合更新操作
# 相同类型的集合操作,还是相同类型,不同类型的集合操作,结果为左侧集合类型
# isdisjoint() 用于判断集合1与集合2是否存在相同元素
# 遍历多个序列时,可将序列打包到zip()中
# sotred()会生成新的序列
# 身份运算符 is is not 用于比较2个对象是否相等,id() 相等则为相同对象,== 用于比较2个对象的值是否相等
# 成员运算符 in not in 判断元素是否存在某个序列中
#类中定义了 __call__()方法后,可通过 对象() 或者 类()() 访问该call方法
#方法前加@staticmethod表示为静态方法 @classmethod表示为类方法 ,建议用类.方法名访问
#@property装饰器可以把类的方法伪装成属性调用的方式 或 property()函数
#__dict__ 列出类或对象中的所有成员的字典 dir() 返回一个模块里定义的所有模块,变量和函数的列表
#用__slots__限制实例的变量 __slots__ = ("name", "age") 这样类只能有 name age实例变量
#函数内部调用 locals(),返回的是所有能在该函数里访问的命名,是个字典
#如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字,是个字典
#反射的应用 func = getattr(commons,inp) 通过方式调用commons模块中与inp同名的函数
#动态导入模块
# obj = __import__("包." + 模块1, fromlist=True)
# obj = __import__('包.模块1',fromlist = ('模块1',))
# 根据modules字符串导入同名的模块 到执行该python脚本中
#断言可以通过 python -O 关闭
#调试分析代码的方式 print assert loggin pdb 4种
# 设置tab为4个空格 对于不是一目了然的代码,需要结尾添加注释 一行较长的代码或文本,可通过()包含起来
# print 通过在sep中设置,使多个值之间插入字符串 通过在end中设置,使多个后面的值追加字符串 一次打印输出多个用,号分隔 print(a,b,c)
# 通过help() 进入来查看关键字信息界面
# 正数的符号位为0 负数的符号位为1
# 原码 整数的原码由其二进制转换而来
# 反码 正数的反码与原码相同 负数的原码为其原码的数值部分按位取反、符号位保持不变
# 补码 正数的补码与原码相同 负数的原码为其原码的数值部分按位取反、再加1、符号位保持不变
#json与python转换
# json.dumps demjson.encode() 将Python对象编码成JSON字符串
# json.loads demjson.decode() 将已编码的JSON字符串解码为Python对象
#json与python对应关系
# objcet dict
# array list
# string unicode
# number(int) int,long
# number(real) float
# true True
# false False
# null None
# 位置参数:传递值时,按顺序接收,调用函数时,指定的参数名与位置参数一致
# 默认参数:默认参数在位置参数后面,当有多个默认参数时,更常用的默认参数尽量放在默认参数区域的前面
#
# 动态参数:可变参数(*args) 命名参数(**kwargs)、关键字命名参数,需放在所有位置参数、默认参数后面
#
# 可变参数(*args):定义函数时:入参数被封装为一个元组,如果参数为列表,则将整个列表当作参数传入 调用函数时:被当作元组或列表
#
# 命名参数(**kwargs):定义函数时:入参数被封装为一个字典 调用函数时:被当作字典
#
# 关键字参数:可以将默认参数、位置参数 与 关键字参数分割开来,通过加 * 号控制,如:(位置参数,默认参数,*,关键字参数),调用关键字参数,必须指定参数名,或者传入关键字参数的缺省值
# 类:具有相似特征和行为对象的集合,即同一类型的事物,对某类事物的抽象描述,描述多个对象的共同特征
# 对象:现实中该类事物的一个个体,用于描述现实中的个体
# 对象是根据类创建的,一个类可对应多个对象,一个对象只能对应一个类
# 属性:为描述事物的特征,方法:为描述类的行为特征
# 属性包括:类属性(在类的内部 方法的外部),通过类和对象访问,只能通过类修改,通过类属性或在类方法中修改
# 对象属性:描述对象特征的数据属性,在类定义方法代码里添加或在调用实例代码里添加,对象属性只能被对象调用,不能被类调用,对象属性为类对象所共有
# 同名的对象属性会覆盖类属性,对象方法可以被对象调用 类要调用对象方法,需要传入类或对象做为参数,类方法、静态方法,可以被类、对象访问