python零散知识点
子类继承父类时初始化方法
情况一:子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()的方法。
情况二:子类不需要自动调用父类的方法:子类重写__init__()方法,实例化子类后,将不会自动调用父类的__init__()的方法。
情况三:子类重写__init__()方法又需要调用父类的方法:使用super关键词:
super(子类,self).__init__(参数1,参数2,....)
class Son(Father):
def __init__(self, name):
super(Son, self).__init__(name)
tensor.view()
torch中的tensor的view一般是x.view(-1,288),相当于numpy的reshape,-1表示不知道几行但是一定288列
解决相对目录路径读取问题
#解决相对目录路径读取问题,和vscode有关
import os, sys
os.chdir(sys.path[0])
path.glob()
函数功能:匹配所有的符合条件的文件,并将其以list的形式返回。
list.items()
Return a new view of the dictionary’s items ((key, value) pairs). See the documentation of view objects.
json.dumps()和json.loads()
json.dumps()将python字典对象转化为json
json.loads()将json转化为字典
json.load()将json文件转化为字典
logging.getLogger(name)
logging.getLogger(__name__)
logger:日志对象,logging模块中最基础的对象,用logging.getLogger(name)方法进行初始化,name可以不填。通常logger的名字我们对应模块名,如聊天模块、数据库模块、验证模块等。
py2neo
node分为两种,一种是绑定了数据库中的,另一种没有绑定,判定两个node是否相等,就是用数据库中node的唯一id判断,若id相等,则相同,如果没有绑定的的话没有id,则只和他自己相等
pd.isna()
pd.isna().sum()可以返回dataframe中nan的数值,返回series
neo4j清空所有节点和关系命令如下:
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
__call__
该方法的功能类似于在类中重载 () 运算符,使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用。
glob
- glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,类似于Windows下的文件搜索,支持通配符操作,*,?,[]这三个通配符,*代表0个或多个字符,?代表一个字符,[]匹配指定范围内的字符,如[0-9]匹配数字。
- glob方法: glob模块的主要方法就是glob,该方法返回所有匹配的文件路径列表(list)。
- iglob方法: 获取一个迭代器( iterator )对象,使用它可以逐个获取匹配的文件路径名。
tensor.shape
输出tensor形状
张量的形状
张量的最左边的左中括号的个数是张量的维数, 比如 [[2,3], [4,5]]
是二维张量(矩阵).
张量的形状(shape)的第一个数值看第一个 [
包含的元素的个数, 第二个数值看第二个 [
包含的元素的个数, 以此类推, 比如 [[2,3,4], [4,5,6]]
的 shape 就是(2,3).
廖雪峰的ptython
面向对象编程
- 如果想让类定义的属性不被外部访问,在定义时前面加双下划线__。
- 需要注意的是,在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名。
- 然可以通过_Student__name来访问__name变量。(大师不同版本的python解释器加的前缀不一样,所以强烈建议用封装的方法)。
- 继承的好处是子类获得了父类的全部功能,还可以子类方法覆写父类方法,实现多态。
5 .判断一个变量是否是某个类型可以用isinstance()判断。 - “开闭”原则:对扩展开放,对修改封闭。
- 动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。
- 用type()函数可以知道对象的类型,并且可以判断,比如int,str,FunctionType,BuiltinFunctionType。
- isinstance()还可以判断继承类型,比type更好用。
- 获得一个对象的所有属性和方法可以使用dir()函数。
- 类似__xxx__的属性和方法在Python中都是有特殊用途的,比如__len__方法返回长度。在Python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法。
- 仅仅把属性和方法列出来是不够的,配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态
- 由于Python是动态语言,根据类创建的实例可以任意绑定属性,给实例绑定属性的方法是通过实例变量,或者通过self变量。
- 对于类属性绑定的话直接在类中定义,而不通过self,这样的属性归类所有,但类的所有实例都可以访问到,如果实例的属性名和类的属性名一样的话,实例的属性将屏蔽掉类的属性。
面向对象高级编程
- 动态绑定允许我们在程序运行的过程中动态给class加上功能
- 使用__slot__变量可以限制类允许绑定的属性名称
《Python学习手册》
《Python学习手册》笔记第4章
为什么使用内置类型:
- 内置类型使编程更加简单高效
python的核心数据类型:
- 核心数据类型:数字,字符串,列表,字典,元组,集合,其他类型(类型,NONE,布尔),编程单元类型(函数,模块,类)
- python语言是动态类型语言(不要求声明变量类型而自己跟踪)和强类型语言。
数字:
- +,-,*,/和**(平方)
- 引入数学库import math就可以使用其方法:math.pi,math.sqrt(56)
- import random和random.random()可以生成随机数字
- python还有复数,固定精度十进制数,有理数,集合和布尔值,第三方的矩阵和向量等数学类型
字符串:
字符串是单个字符的字符串的x序列,其他类型的序列还包括列表和元组。
序列的操作
- 切片
- +号对于不同的对象类型有着不同的作用,比如字符串就是连接,而数字是数学加。
不可变性
- python的每一个对象都分为不可变性或者可变性。
- 在核心数据类型中,数字,字符串,元组都是不可变的,而列表和字典是可变的。
类型特定的方法
- S.replace(),S.find(),S.upper(),S.isalpha()等为字符串的特定方法
- 字符串还支持一个叫做格式化的高级替代操作
- 可作用于多种类型的通用型操作都是以内置函数或者表达式出现的,而类型特定的操作都是以方法调用的形式出现的。
寻求帮助
- dir(aString)可以给出这个类型属性
- 双下划线是用来表示python实现细节的命名模式,而无下划线的是方法。
- help(aString.method)可以查看方法的具体使用方法。
编写字符串的其他方法:
- 用反斜线\进行转义
- “和‘没有差别
- “””和’’’可以用来保持里面字符串的格式
- 去掉反斜线转移机制用r开头的字符串常量
模式匹配:
- import re用来导入正则表达式
- match的用法
列表:
列表是最通用的序列,可以通过偏移量进行赋值。
序列操作:
索引和切片
类型特定的操作
**L.append(elem),L.pop(location)#移除给定偏移量的一项,L.sort(),L.reverse()。
边界检查:
列表不允许引用不存在的元素,如果列表下标越界,则会报错。
嵌套:**列表可以嵌套列表,元组等任意类型及其深层嵌套。
列表解析:
- 通过对序列中的每一项运行一个表达式来创建一个新列表的方法。
- 在python3中,解析越发也可以用来创建集合和字典。
字典:
字典是一种map,具有可变性,不是序列(所以没有可靠的从左到右的顺序)。
映射操作:
字典编写在大括号中。
字典的索引操作使用的是和序列相同的语法,但是在方括号中的元素是键,而不是相对位置。
字典定义的两种方法:
- D={‘name’:’yanpengbo’,’color’:’pink’}
- D={},D[‘name’]=’yanpengbo’,D[‘color’]=’pink’
嵌套:字典也可以嵌套字典或者列表**
键的排序:for循环
字典没有顺序,所以我们定义的时候是一种顺序,显示的时候可能是另一种顺序,如果我们想使字典有序得显示出来,可以先用列表收集字典得键,然后对其排序,然后用for循环利用列表和字典显示新序的列表。
迭代和优化:
从左到右扫描对象的可以简单称为迭代,迭代工具包括for循环、列表解析、in成员关系测试以及map内置函数等。可迭代对象基本上就是序列观念的通用化,如果对象是实际保存的序列或者说可以在迭代工具环境中一次产生一个结果的对象就看做是可迭代的(iterable),可迭代对象包括实际序列和按照需求而计算的虚拟序列。
我的理解就是类似于C++中迭代器实现的规则。
不存在的键:
不存在的键可以用if else语句搭配in来除错。
元组:
元组是序列,不可变性,写在()里面,支持任意类型,任意嵌套和常见的序列操作(leng,+,T[0])。
元组的专有方法:T.index(elem):显示elem所在位置,T.count(elem)统计elem出现的次数。
元组一旦创建之后就不能改变。
为什么要使用元组:元组提供了不可变性(完整性约束),所以在编写要求更高的程序时是非常有用的。
文件:
写:
f=open('text.txt','w')
f.write('hello\n')
f.wirte('world')
f.close
读:
text=f.read()
text
print(text)
其他文件类工具:
Python还有其他类文件工具:管道,FIFO,套接字,数据等。
其他核心类型:
集合:
用set或者花括号{}创建。集合之间可以交&,并|,差-。并且可以用列表解析来创建集合或者对集合进行元素操作。
《Python学习手册》第5章数字
Python的数字类型
Python中数字并不是一个真正的对象类型,而是由以下组成:整数和浮点数,复数,固定精度十进制数,集合,有理分数,集合,布尔类型,无穷的整数精度。
数字常量:
基本的数字常量:整数,浮点数,八进制,十六进制,二进制,复数
*内置数学工具和扩展:+,-,*,/,>>,*,&,pow,abs,round,int,hex,bin。
表达式操作符:
floor除法把结果截断到下次,直接效果是向下舍入。
括号分组的子表达式:括号优先级高
混合类型自动升级:自动转换
运算符重载:多态
在实际应用中的数字:
变量和基本的表达式:变量不需要声明,变量在第一次赋值时创建
数字显示的格式:print和自动回显可以显示数字的位数,并且还可以使用字符串格式化。
比较:pyhton可以比较连续的表达式:a<b<c 等价于a < b and b <c,其中,个数可以很多个。
除法:
- python3****中,/为真除法,不论操作数类型都返回包含任何余数的浮点结果,而//为Floor出发,截除掉余数并向下取整的整数,而如果操作数中有浮点数,则返回浮点数。
- *floor***和trunc的不同之处:
整数精度:支持无穷大
复数:x+yj
各种进制数:
- 0o1,0x10,0bFF,分别为八进制,十六进制,二进制数。
- oct(),hex(),bin()为转换函数
- int(‘s’,num)可以将字符串转化为数字,并且num确定进制。
- eval函数可以将字符串转化为Python代码
位操作:<< | & >>
其他的内置函数工具:math.pi,math.e,math.sin(),math.sqrt(),pow(2,4),min(),max(),sum(序列)
其他数字类型:
小数数字:
- 可以弥补浮点数运算在精度方面内在的缺陷。
- 引入小数模块import decimal后用decimal.getcontext().prec设置全局精度。
- 小数上下文管理器:with decimal.getcontext().prec as ctx,ctx=4就可以管理精度了
分数类型:
- 引入用from fractions import Franction
- 定义用Franction(1,2)
- (2.5).as_integer_ratio()可以转换称一个元组,这个元组时分子和分母比,而这个元组再用Franction构造,则可以产生分数。
集合:
可以用set(列表)和{}创建集合(3.0v),set()(2.6v)
集合解析
布尔型:Ture And False
数字扩展:Numpy和SciPY
欢迎在评论区中进行批评指正,转载请注明来源,如涉及侵权,请联系作者删除。