【黑马程序员】Python编程学习之常用标准库_第1页
【黑马程序员】Python编程学习之常用标准库_第2页
【黑马程序员】Python编程学习之常用标准库_第3页
【黑马程序员】Python编程学习之常用标准库_第4页
【黑马程序员】Python编程学习之常用标准库_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

I窗3黑马程序员L传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动【黑马程序员】Python编程学习之常用标准库Python入门教程完整版(懂中文就能学会)完整视频:/course/273.html71912sxkqq课程资料:https://pan.baidu.eom/s/12-dymJ8FjWzh6b5NKJuP3Q提取码:gqly 系统内建函数 1■字符串str=’这是一个字符串数据测试数据‘对应str[0]:获取str字符串中下标为0的字符。str[3]:获取str字符串中下标为3的字符。str[0:3]:获取到字符串中从下标为0到下标为3的字符串。str.find():返回指定str字符串中是否存在指定的字符串数据信息;如果存在则返回字符串首字母的下标,如果不存在则返回-1。str.index():返回指定str字符串中是否存在指定的字符串数据信息;如果存在则返回字符串首字母的下标,如果不存在进行错误异常处理。str.count():返回指定str字符串中被查找字符串存在的个数信息。len(str):返回指定str字符串的字符总长度;如果字符串为空,则返回值为0。str.replace(替换前字符','替换后字符',指定替换的次数):进行指定str字符串中指定字符数据的替换操作,并将替换后的数据进行返回。str.split("",切割次数):进行指定字符串的切割,返回被切割后的字符串列表数据信息;如果切割次数不填,默认进行最大的切割次数。str.capitalize():将指定str字符串的第一个字符进行大写。str.startswithg配字符串数据):返回boolen类型,匹配指定str字符串是否以指定字符串数据开头。资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动str.endswithg配字符串数据):返回boolen类型,匹配指定str字符串是否以指定字符串数据结尾。str.lower():将指定的字符串数据信息进行统一的小写转换并返回转换后的数据。str.upper():将指定的字符串数据信息进行统一的大写转换并返回转换后的数据。str.ljust(指定返回的字符串长度):返回一个字符串,将指定str进行左对齐,如果str字符串长度小于指定的长度,则进行右侧的空格补充操作。str.rjust(指定返回的字符串长度):返回一个字符串,将指定str进行右对齐,如果str字符串长度小于指定的长度,则进行左侧的空格补充操作。str.center(制定返回的字符串长度):返回一个字符串,将制定str进行中间对齐,如果str字符串长度小于指定的长度,则进行两边的空格的补充操作。str.lstrip():返回字符串,删除左侧的空格。str.rstrip():返回字符串,删除末尾的空格。str.rfind():类似find函数,从指定字符串的右侧开始进行查找,返回查找到的字符串第一个字符的下标。str.rindex():类似index函数,从指定str字符串的左侧开始进行查找,返回查找到的字符串第一个字符串下标。str.partitionG指定分割的字符串):从指定str字符串中,查找制定分割的字符串,返回一个列表包含它的前面部分,它自身和它的后面部分;如果字符串的匹配没有成功,则返回它自身和前后两个空字符。str.rpartitionG指定分割的字符串):类似partition函数,只是指定的分割字符串是从右开始查找的。str.splitlines():进行行分割,返回一个列表,以每行数据作为一个元素进行保存。str.isdigit():返回boolen类型,判断指定str字符串中的数据是否为字母或数字。str.isalpha():返回boolen类型,判断指定str字符串中的数据是否为纯字母。str.isalnum():返回boolen类型,判断指定str字符串中的数据是否为纯数字。资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动str.isspace():返回boolen类型,判断指定str字符串中的数据是否只包含空格。str.isupper():返回boolen类型,判断指定str字符串中的数据是否为纯大写。str.islower():返回boolen类型,判断指定str字符串中的数据是否为纯小写。mystr.join(str):将类表mystr中的数据,根据指定的str字符串进行拼接操作;返回拼接后的字符串数据信息。print("%0.1f",float(result*1.0)):进行浮点数的转换,并打印小数点后一位的数据print("%d*%d=%d"%(j,i,i*j),end=''):结束最后的换行2.^件流文件流对应的基础操作:f=open('文件名'/访问模式');iff:返回boolen类型,判断文件是否打开。w:打开一个文件只用于写入;如果该文件已经存在则将其覆盖;如果该文件不存在,则创建一个新的文件。r:以只读的方式打开文件;文件的指针将会放在文件的开头;这个是默认模式。a:打开一个文件用于追加;如果该文件已存在,文件指针将会放在文件的结尾;也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。rb:以二进制格式打开一个文件用于只读,文件指针将会放在文件的开头。这是默认模式。wb:以二进制格式打开一个文件用于写入,如果该文件已存在则将其进行覆盖。如果该文件不存在则创建新文件。ab:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后;如果该文件不存在,创建新文件进行写入操作。资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动r+:打开一个文件用于读写;文件指针将会放在文件的开头。w+:打开一个文件用于读写;如果噶文件已存在则将其覆盖。如果该文件不存在,创建新文件a+:打开一个文件用于读写;如果该文件存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。rb+:以二进制格式打开一个文件用于读写;文件指针将会放在文件的开头。wb+:以二进制格式打开一个文件用于读写;如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。ab+:以二进制格式打开一个文件用于追加;如果该文件已存在,文件指针将会放在文件的结尾;如果文件不存在,创建新文件用于读写。f.close():文件流操作结束后进行关闭。f.wirte(写入的内容):打开文件后,将指定内容写入文件中。f.read(读取数据的长度):使用read可以从文件中读取指定长度的数据,并将指针移到这条数据之后;默认读取全部数据。f.readline():读取文件中一行数据的信息,指针移动的下一行。f.readlines():读取整个文件的数据信息信息,返回一个歹I」表,歹I」表中每个元素为一行数据的信息。f.tell():查看当前位置,就是指针对应的位置。seek(offset,from):将指针定位到某个位置from:方向0:表示文件的开头。:表示文件的当前位置。:表示文件的末尾。offset:偏移量测试f.seek(5,0):文件开头,向后偏移5个位置资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动f.seek(-3,2):文件结尾,向前偏移3个位置3■列表.字典.元组操作1、列表:strList=['']:列表的创建。str='字符串’newStr='新的字符串‘。strList.叩pend:进行列表数据信息的添加操作。strList[0]=newStr:根据下标,进行列表指定元素数据信息的修改操作strinstrLsit:返回boolen类型,指定字符串信息是否在列表中存在。foriteminstrList:进行列表数据的遍历操作,item为元素值delstrList[0]:根据列表下标,删除指定的列表元素。strList.pop():删除列表最后一个元素的数据信息。strList.remove('元素的值'):根据元素的值进行删除操作。2、字典:修改元素:根据Key值进行修改添加元素:infor['age']=18删除元素:del清空字典中的数据信息:infor.clear3、字典的常见操作dic={1:'xiaohao',2:'xiaodong'}:创建一个字典对象。dic.keys():获取字典所有对应的键,以歹I」表的形式进行返回。dic.valuses():获取字典所有对应的值,以歹I」表的形式进行返回。dic.items():获取字典中的键值数据,以列表的形式返回,每个元素都一个元组,分别存放着键和值。dic.has_key(1):返回boolen类型,判断键值是否存在4、元组:tuple=(123,4,5):创建一个元组。资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动tuple[2]:根据下标读取到第三个元素。tuple[-2]:根据下标读取到倒数第二个元素。tuple[1:]:截取元组第二个元素到最后。cmp(tuple1,tuple2):比较两个元组中的元素。max(tuple):返回元组中元素的最大值。min(tuple):返回元组中元素的最小值。tuple(seq):将列表转换为元组。5、运算符操作列表、字典、元组的技巧:1、len((123,4)):获取到元组中元素的个数。2、(1,2,3,4)+(123,4,5);进行两个元组的合并,获取到一个新的元组。3、['Hi']*4:创建一个新的列表,并将列表中的数据进行复制四次。4、1in(1,2,3,4):判断元素是否存在;返回boolen类型。4■异常捕获定义:某些错误操作导致程序无法正常运行异常捕获:try:except(NameError,IOError),result:print(result)#返回具体的错误信息else:print("我是else")finally:print("我是finally")5、range:获取1、help(range):range(stop)->listofintegersrange(start,stop[,step])->listofintegers2、参数分析:1、start:计数从start开始。默认是从0开始。例如range(5)等价于资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动range(0,5)。2、stop到stop结束,但不包括stop.例如:range(0,5)是[0,1,2,3,4]没有5。3、step:每次跳跃的间距,默认为1。例如:range(0,5)等价于range(0,5,1)。3、示例:a=range(5)list(a)6、map:函数1、help(map):m叩(...)map(function,sequence[,sequence,...])->list2、参数分析:1、function:是一个函数2、sequence:是一个或多个序列,取决于function需要几个参数3、返回值是一个list3、语法:参数序列中的每一个元素分别调用function函数返回包含每次function函数返回值的list。4、示例函数需要一个参数map(lambdax:x*x,[1,2,3])[1,4,9]函数需要两个参数map(lambdax,y:x+y,[1,2,3],[4,5,6])[5,7,9]函数为None,相当于合并参数为元祖map(None,[1,3,5,7,9],[2,4,6,8,10])资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动[(1,2),(3,4),(5,6),(7,8),(9,10)]#两个序列参数个数不一致时,个数少的补Nonem叩(None,[1,3,5,7,9],[2,4,6])[(1,2),(3,4),(5,6),(7,None),(9,None)]7、filter:「1、help(filter):filter(...)filter(functionorNone,sequence)->list,tuple,orstringReturnthoseitemsofsequenceforwhichfunction(item)istrue.IffunctionisNone,returntheitemsthataretrue.Ifsequenceisatupleorstring,returnthesametype,elsereturnalist.2、参数分析:1、function:接受一^个参数,返回布尔值True或False2、sequence:序列U可以是str,tuple,list3、3、语法filter函数会对序列参数sequence中的每个元素调用function函数,最后返回的结果包含调用结果为True的元素。返回值的类型和参数sequence的类型相同4、示例filter(lambdax:x%2,[1,2,3,4])[1,3]filter(None,"she")'she'8、8、reduce:函1、help(reduce):视频库网址:1、help(reduce):视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动reduce(...)reduce(function,sequence[,initial])->valueApplyafunctionoftwoargumentscumulativelytotheitemsofasequence,fromlefttoright,soastoreducethesequencetoasinglevalue.Forexample,reduce(lambdax,y:x+y,[1,2,3,4,5])calculates((((1+2)+3)+4)+5).Ifinitialispresent,itisplacedbeforetheitemsofthesequenceinthecalculation,andservesasadefaultwhenthesequenceisempty.2、参数分析:1、function:该函数有两个参数2、sequence:序歹U可以是str,tuple,list3、initial:固定初始值3、3、语法reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function.第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial作为参数调用function,否则会以序列sequence中的前两个元素做参数调用function。注意function函数不能为None。4、示例reduce(lambdax,y:x+y,[1,2,3,4])10reduce(lambdax,y:x+y,[1,2,3,4],5)15reduce(lambdax,y:x+y,['aa','bb','cc'],'dd')资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动'ddaabbcc'9、sorted:函数1、help(sorted):sorted(...)sorted(iterable,cmp=None,key=None,reverse=False)-->newsortedlist2、参数分析:自定义cmp比较函数,返回三种情况:x<y返回-1x>y返回1x==y返回03、示例defcmp_ignore_case(s1,s2):u1=s1.upper()u2=s2.upper()ifu1<u2:return-1ifu1>u2:return1return系统库函数,帮助文档查找1、库函数:print。、raw_input()系统给的叫库函数2、用户自定义函数:如果系统中,没有需要的功能,那么此时就需要自己开发一个,这就是自定义函数3、ipython下:dir(包名):查看该包下的对应的函数信息资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动help(包名):查看该包中的分装的函数信息包名.path:可以获取到指定包对应的文件路径 builtins:内建函数默认加载 os:操作系统接口 importos引用系统的包():判断现在正在使用的平台,widows返回'nt';Linux返回'posix'。os.getcwd():得到当前工作的目录。os.listdir():指定所有目录下所有的文件和目录名。os.remove():删除指定文件。os.rmdir():删除指定目录。os.mkdir():创建目录,只能建立一层。os.makedirs():递归创建目录。os.path.isfile():判断制定对象是否为文件。是返回True,否则False。os.path.isdir():判断指定对象是否为目录。是True,否则False。os.path.exists():检验指定的对象是否存在。是True,否则False。os.path.split():返回路径的目录和文件名。os.getcwd():获得当前工作的目录。os.system():执行shell命令。os.chdir():改变目录到指定目录。os.path.getsize():获得文件的大小,如果为目录,返回0。os.path.abspath():获得绝对路径。os.path.join(path,name):连接目录和文件名。os.path.basename(path):返回文件名。os.path.dirname(path):返回文件路径。sys:Python自身的运行环境资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动importsys引用系统的包sys.stdinsys.argv:获取到执行文件时,对应的参数信息 functools:常用的工具 1、概念:functools是python2.5被引人的,一些工具函数放在此包里。2、操作:1、importfunctools:引用对应的包2、dir(functools):查看包中对应的工具函数1、partial函数(偏函数):1、概念:把一个函数的某些参数设置默认值,返回一个新的函数,调用这个新函数会更简单。2、示例:importfunctoolsdefshowarg(*args,**kw):print(args)print(kw)p1=functools.partial(showarg,1,2,3)p1()p1(4,5,6)p1(a='python',b='itcast')p2=functools.partial(showarg,a=3,b='linux')p2()p2(1,2)资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动p2(a='python',b='itcast')2、wraps函数:1、概念:使用装饰器时,有一些细节需要被注意。例如,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变)。Python的functools包中提供了一个叫wraps的装饰器来消除这样的副作用2、示例:importfunctoolsdefnote(func):"notefunction"@functools.wraps(func)defwrapper():"wrapperfunction"print('notesomething')returnfunc()returnwrapper@notedeftest():"testfunction"print('Iamtest')test()print(test.__doc__)json:编码和解码JSON对象logging:记录日志,调试资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动 fork/multiprocessing:多进程 importos:1、pid=os.fork():程序执行至I」os.fork()时,操作系统会创建一个新的进程(子进程),然后复制父进程的所有信息到子进程中;然后父进程和子进程都会从fork()函数中得到一个返回值,其进程中这个值一定是0,而父进程中是子进程的id号;主:fock()函数只能在Unix/Linux/Mac上运行,windows不可以运行。importos#注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以pid=os.fork()ifpid==0:print('哈哈1')else:print('哈哈2')os.getpid():获取到当前进程的PID号os.getppid():获取到父进程的PID号2、进程创建的第二种方式:frommultiprocessingimportProcess:引用对应的包。p=Process(target=run_proc,args=('test',)):调用Process类,进行进程对象的创建操作。为参数target赋值进程要实现的方法,为参数args赋值方法中传入对应的参数。p.start():开启执行对应的进程操作。资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动p.join():等待当前进程执行结束,可以等待子进程结束后再继续向下运行,通常用于进程间的同步。multiprocessing.cpu_count():获取到进程执行的所使用的cpu的内核个数。pipe=multiprocessing.Pipe():管道实现进程间的通讯。一个管道有两个端口,分别为pipe[0]与pipe[1]pipe[0].send(向管道中添加的数据):管道的添加操作。pipe[0].recv():从管道中取出对应的数据信息、。3、frommultiprocessingimportProcess,Queue:应用对应的包,为实现进程之间的通信操作;管道的俩个端一个是负责向里面写入数据,一个是负责向外面读取数据。q=Queue():创建一个队列对象。4户仇(要添加到队列中的数据信息):将制定的数据添加到队列当中去。q.get(True):从队列1」中要提取出的队列媵攵据信息。q.empty():判断当前队列是否为空。 threading:多线程 1、线程应用的第一种模式thread模块是比较底层的模块importthread:引用对应的模块包。thread.start_new_thread(defName,())创建开启一个新的线程;第一个参数为新线程要执行的方法,第二个参数为元组传递执行方法对应需要参数注:python元组为一个时需要(元素,)一个元素加一个‘,’进行表示。thread.exit_thread():主线程调用该方法表示所有的线程结束操作;子线程通过调用exit.thread()的方法来表示实现当前子线程的结束操作。thread.join():python的Thread类中还提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行。这个方法还可以设定一个timeout参数,避免无休止的等待。因为两个线程顺序完成,看起来象一个线程,资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员传智播客旗下高端黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动所以称为线程的合并thread.setDaemon(True):默认情况主线程退出时会等待子线程的结束,如果希望主线程不等待子线程,可以设置子线程为后台线程,主线程退出,子线程随即结束。2、线程应用的第二种模式threading模块是对thread模块进行了一定的封装,可以更方便我们的使用。importthreading:引用对应的模块包。myThread=threading.Thread(target=defName,args=('Alice',))创建一个线程,target赋值要执行线程的方法,args复制执行方法需要的参数信息。myThread.start():线程开始执行。num=len(threading.enumerate):查看当前执行的线程的数量。3、线程的应用的第三种方式创建一个线程类,继承基类threading.Thead;重写基类的defrun(self):方法,将该线程要执行的程序写在该方法中。classMyThread(threading.Thread):创建一个线程类进行基类构造函数的创建操作def__init__(self,name,time):threading.Thread.__init__(self,name='可以为线程的名字进行复制')myThread=MyThread():线程对象的创建。myThread.start():该线程执行。4、threading模块中定义了Lock()类,可以方便的处理锁定。mutex=threading.Lock():互斥锁对象的创建。ifmutex.acquire([blocking]):进行锁定,锁定成功后返回true;锁定方法acquire。可以有一^个blocking参数。如果设定blocking为True,则当前线程会堵塞,直到获取到这个锁为止(如果没有指定,那么默认为True);如果设定blocking为False,则当前线程不会堵塞。资料领取:+Q1679806262视频库网址:资料领取:+Q1679806262黑马程序员黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动mutex.release():执行完程序内容后进行锁的释放操作。5、支持同一线程多次请求同一资源,python提供了可重入锁。RLock对象中,同时维护着一个Lock和一个counter变量;counter变量存储acquire的次数,从而使得资源可以多次被acquire;直到一个线程中的所有的acquire被release,其他的线程才可以获得资源mutex=threading.RLock():创建可重入锁对象。mutex.acquire():进行上锁。mutex.release():进行释放。6、python提供的Condition对象提供了对复杂线程同步问题的支持;Condition被称为条件变量;Condition维护着一个锁和一个waiting池。con=threading.Condition():创建条件变量对象;可以接受一^个Lock/RLock对象作为参数,如果没有指定则内部默认创建一个RLockcon.acquire():进行加锁。con.wait():线程会释放Condition内部的锁并进入blocked(堵塞)状态,同时在waiting池中记录这个线程。con.notify():Condition对象会从waiting池中挑选一^个线程,通知其调用acquire方法尝试取到锁。con.notifyAll():Condition对象通知waiting池中所有的线程,尝试acquire内部锁。作用防止有的线程永远处于沉默状态。con.release():进行释放。threading.Event可以是一个线程等待其他线程的通知。其内置了一个标志,初始值为False。线程通过wait()方法进入等待状态,直到另一个线程调度set()方法将内置标志设置为True是,Event通知所有等待状态的线程回复运行。还可以用isSet()方法查询Event对象内置状态的当前值。event=threading.Event():进行对应Envent对象的创建。def__init__(self,threadName,event):self.threadEvent=event:重构对应threading.Thread基类中__init__的方法。资料领取:+Q1679806262资料领取:+Q1679806262黑马程序员传智播客旗下高端IT教育品牌改变中国IT教育,我们正在行动self.threadEvent.wait():使线程进入等待状态。event.set():启动waiting池中等待的线程。 Queue:队列 fromQueueimportQueue:引用对应的模块包。queue=Queue():创建一个队列对象。queue.qsize():获取队列I」中元素的数量。queue.put(向队列I」中添加的数据):想队列I」中添加元素。queue.set():从队列中取出元素。queue.empty():判断队列I」是否为空。 copy:拷贝 time:时间 datetime:日期和时间 calendar:日历 hashlib:加密算法 random:生成随机数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论