python补充扩展知识点
复习Python时,将遇到的一些有疑问的知识点进行了简单总结,大家一起学习。文章有什么问题欢迎大家指正!
文章目录
- python补充扩展知识点
- 1.@classmethod
- 2.小知识点
- 3.file文件相关
1.@classmethod
1.可以返回一个类
class Data(object):
def__int__(self,year=0,month=0,day=0):
self.day=day
self.month=month
self.year=year
@classmethod
def get_data(cls,string_data):
year,month,day=map(int,string_data.split('-'))
data1=cls(year,month,day)
return data1
def out_data(self):
print "year:"
print self.year
print "month"
print self.month
print "day"
print self.day
#如何调用
r=Data.get_data("2021-12-1")
r.out_data
2.定义类时,在一个方法前面使用@classroom进行修饰,则该方法属于类方法
2.小知识点
- 对于Python类中的私有成员,可以通过“对象名._类名__私有成员名”的方式来访问。
- Python定义私有变量的方法为使用__xxx定义变量名
id(ls1)=1
ls2=ls1
ls3=ls1.copy()
#则id(ls2)=id(ls1)≠id(ls3)
#ls2的值改变,ls1也会变,而ls3的值改变,ls1的值不变
x=[1,2]
y=x#y=[1,2]
print(id(x)==id(y))#True
z=x[:]#z=[1,2]
print(id(x)==id(z))#False
p=x.copy()#p=[1,2]
print(id(x)==id(p))#False
- random.choice() && random.sample()
import random
seq=(1,2,3,4,5)
print([random.choice(seq)for i in range(5)])#有放回选择e.g[1,1,2,3,3]
print(random.sample(seq,5))#无放回选择,且sample(seq,n)中n<=len(seq)e.g[5,3,2,4,1]
- 将list转化为字符串 && 字符串转为list
lst=['1','2','3','4']#不能写[1,2,3,4]
print("".join(lst))#1234
ss="123"
print(list(ss))#['1','2','3']
ss="123,123"
print(ss.split(','))#['123','123' ]
ss="madam madammm"
print(ss.strip('m').split())#['adam','mada']
#strip('r')用于开头结尾所有连续包含r的字符
- sort && sorted
ls=[1,3,2,4]
#sorted()不改变ls原list值
print(sorted(ls))#[1,2,3,4]
print(ls)#[1,3,2,4]
#.sort()改变原list顺序
print(ls.sort())#None
print(ls)#[1,2,3,4]
dic={1:'b',3:'c',2:'a'}
#sorted(dict)是按key排序,同时返回key列表,同时不改变原dict顺序
print(sorted(dic))#[1,2,3]
print(dic)#{1:'b',3:'c',2:'a'}
#用dic.items()指定dict[key:value]排序方式
print(sorted(dic.items(),key=lambda d:d[0]))#[(1, 'b'), (2, 'a'), (3, 'c')],按key排序,且默认从小到大
print(sorted(dic.items(),key=lambda d:d[1]),reverse=True)#[(3, 'c'), (1, 'b'), (2, 'a')],按value,且从大到小排
- x.sort(Reverse=True)&&x.reverse()
ls=[3,1,2]
ls2=[3,1,2]
ls.reverse()#颠倒列表
ls2.sort(reverse=True)#排序后颠倒列表
print(ls,ls2)#[2, 1, 3] [3, 2, 1]
- 正则表达式元字符“^”一般用来表示从字符串开始处进行匹配,用在一对方括号中的时候则表示反向匹配,不匹配方括号中的字符。
- 组合数据类型可以分为 3 类:序列类型、集合类型和映射类型,Python 的 str、tuple 和 list 类型都属于序列类型
[1,2]*2 or 'ab'*2#True
{'a','b'}*2 or (1,2)*2 #False
- 静态语言采用编译方式执行,脚本语言采用解释方式执行
- Python采用的是基于值的自动内存管理方式
- eval()函数:将输入的字符串转为python语句
print(eval('2+3*4'))#14
# print(eval("hello"))#hello is not defined
print(eval("'hello'"))#'hello' is not defined
print(eval('"hell0"'))#'hello'
- Python中的同一种序列互相之间可以进行比较,按照字典序进行排序,例如 (1, 2, 3, 4) < (1, 2, 4) 的运算结果是True。
print((1,2,3)<(2,3,4))#True
print([1,2,3]<[2,3,4])#True
- 神奇的递归
ls=[1,2,3]
ls.append(ls)
print(ls)#[1,2,3,[...]]
- math
import math
x=1.23
print(math.ceil(x))#2,向上取整
print(math.floor(x))#1,向下取整
print(math.trunc(x))#1,返回整数部分
- round()
#round(x,y)#函数x四舍五入,保留y位小数
x=3.53
print(round(x,1),round(x))#3.5 4
- uniform()
import random
#uniform(x,y) 随机生成[x,y]的浮点数,其中x=min(x,y) y=max(x,y)
print(random.uniform(1,5),random.uniform(5,1))
print(round(random.uniform(1, 5),2))#生成[1,5]两位随机小数
- format()
- {}不限参数个数,可指定位置,也可以设置参数
print("{1}{0}{1}".format('a','b'))
print("姓名:{name},学校{university}".format(name="红橙",university="DHU"))
- 通过字典设置参数
dic={"name":"红橙","university":"DHU"}
print("姓名:{name} 学校:{university}".format(**dic))
- 通过列表索引设置参数
lst=['红橙','DHU']
print("姓名:{0[0]},学校:{0[1]}".format(lst))#0不能省略
- 常用格式化方式
print("{:+.2f}".format(3.14))#+3.14 带符号保留小数点后两位
print("{0:0^5d},{1:x>6d}".format(5,3))#00500 xxxxx3
# 多个变量格式化时“:”前面的0,1不能省略
# >右对齐 ^居中对齐 <左对齐
#{1:x<5d}表示位置为1的整数变量左对齐,宽度为5,剩余位置用x填充
- 正则表达式
相关推荐:pyhon正则表达式 - {}==None (x)
3.file文件相关
- 当文件以文本方式打开时,读写按照
字节流字符串 方式 - 文件对象的tell()方法用来返回文件指针的当前位置。
- Python文件读取方法read(size)的含义是从文件中读取指定size大小的数据,如果size为负数或者空,则读取到文件结束
- 假设已成功导入os和sys标准库,那么表达式 os.path.dirname(sys.executable) 的值为Python安装目录。
- open函数参数模式
- ‘a’从文件末尾写入字符
- ‘w’从文件开头写入字符,并覆盖原文本,若文件不存在则创建文件
- ‘x’新建文件并写入,若文件存在,则报错
- ‘+’既可以读又可以写
- readlines,读所有行,每行作为一个列表元素
f=open('tmp.txt',mode='r',encoding='utf-8')
data_list=f.readlines()
f.close()
print(data_list)
- 循环读文件
f=open('tmp.txt',mode='r',encoding='utf-8')
for line in f:
print(line.strip())
f.close()
- flush 手动将写的内容刷到硬盘
file_object = open('tmp.txt',mode='a')
while True:
user=input("用户名:")
if user.upper()=="Q":
break
pwd=input("密码:")
data="{}-{}\n".format(user,pwd)
file_object.write(data)
file_object.flush()
file_object.close()
- 光标设置 f.seek()&&f.tell()
#移动光标位置
f=open('tmp.txt',mode='r+',encoding='utf-8')
f.seek(5)#移动到指定字节位置
f.write(10)
#注意:a模式下不会写到光标位置,只会写到文件尾部
pos=f.tell()#获取当前光标位置
f.close()
- with上下文管理
- 可以实现自动关闭文件,且支持同时多个文件的上下文进行管理
with open('tmp1.txt',mode='r')as f1,open('tmp2.txt',mode='r')