基础知识1.列举5个常用的Python标准库?importosimportsysimportreimportmathimporttimeimportdatetimeimportrandomimportthreadingimportmultiprocessing2。Python的内置数据类型有哪些?int,float,complex#Numericalbool#Booleanstr#Stringlist#Listtuple#Tupledict#Dictionary3.简述with方法为我们打开和处理文件做了什么?with语句适用于访问资源,保证无论在使用过程中是否发生异常,都进行必要的清理操作,释放资源,例如使用后自动关闭文件,自动获取和释放线程中的锁等。;with语句是上下文管理器,在程序中用来表示代码执行的上下文。上下文管理器:具有__enter__和__exit__方法的对象是上下文管理器。enter():在执行with语句之前,先执行该方法,通常返回一个实例对象,如果with语句有as目标,则将该对象赋值给as目标。exit():with语句执行后,自动调用__exit__()方法,用户释放资源。如果此方法返回布尔值True,程序将忽略该异常。使用环境:文件读写,自动释放线程锁等withcontext_expression[astarget(s)]:with-bodywherecontext_expression应该返回一个contextmanager对象,该对象没有赋值给target(s)中的as子句,但会将上下文管理器的__enter__()方法的返回值分配给目标。4.Python的可变和不可变数据类型?不可变数据类型:数据创建后,数据的值将不再改变。有数字、字符和祖先类型。可变数据类型:数据创建后,数据的值可以改变。有列表、字典、集合类型。5.Python获取当前日期?#-*-编码:UTF-8-*-importdatetimeimporttimeif__name__=="__main__":print(time.time())#时间戳print(time.strftime("%Y-%m-%d%H:%M:%S%w",time.localtime()))#年、月、日、时、分、秒print(datetime.datetime.now())#年、月、日、时、分、秒6.计算字符串中每个单词出现的次数。defword_amount(sentence):split_list=sentence.split()dict_result={}forword_nameinsplit_list:ifword_namenotindict_result.keys():dict_result[word_name]=1else:dict_result[word_name]+=1returndict_resultif__name__=='__main__':sentence="Icanbecauseithinkican"dict_result=word_amount(sentence)print(dict_result)或者:if__name__=='__main__':sentence="Icanbecauseithinkican"result={word:sentence.split().count(word)forwordinset(sentence.split())}print(result)或者:fromcollectionsimportCounterif__name__=='__main__':sentence="Icanbecauseithinkican"counts=Counter(sentence.split())print(counts)7.用python删除文件和用linux命令删除文件方法。importosos.remove("demo.txt")rmdemo.txt8.编写自定义异常代码?类printException(Exception):passdeftestRaise():raiseprintException('printErr')if__name__=='__main__':try:testRaise()exceptprintException,e:printe9.exception模块中tryexceptelse的例子finally的相关含义。#-*-coding:UTF-8-*-defread_filedata(file_name):file_obj=""try:#待检测的异常代码片段file_obj=open(file_name,"r")result_data=file_obj.read()exceptIOError,e:#处理“IOError”异常的代码片段file_obj="Thefiledoesnotexist:"+str(e)else:#不触发“IOError”异常并返回读取数据的代码片段returnresult_datafinally:#不管是否出错都会执行的代码片段,isinstance()用于判断数据类型ifisinstance(file_obj,str):returnfile_objelifisinstance(file_obj,file):file_obj.close()else:return"Unknownerror,pleasecheckyourcode..."if__name__=='__main__':result=read_filedata("abc.txt")print(result)10.如何处理错误?首先查看错误信息,根据错误信息找到对应的代码。通常,一般的数据结构或算法错误只要找到错误代码就可以顺利解决;如果遇到暂时无法解决的错误,不要惊慌,我们可以使用编译器的Debug模式或者在代码中添加断点来检查代码;如果仍然无法解决bug,我们可以复制错误信息到搜索引擎中搜索。没有人会写出没有错误的代码。如果在一个bug上花费的时间超过半小时,可以和其他同事一起讨论(注意适度,可能会花费同事);另辟蹊径:方法总比困难多。在做快速开发的时候,我们应该优先实现功能,而不是拘泥于运行效率,所以遇到一些暂时解决不了的BUG可以考虑另一种实现方式。语言特点1.谈谈理解Python和其他语言的区别?Python是一种强类型的动态、可移植、可扩展、可嵌入的解释型编程语言,语法简洁优美,功能极其强大,应用范围广泛。拥有强大而完善的第三方库。强类型语言和弱类型语言的区别:如果语言经常隐式转换变量的类型,那么该语言就是弱类型,如果很少这样做,就是强类型。Python很少隐式转换变量类型,因此Python是一种强类型语言。强类型语言和弱类型语言的原因是基于语言类型转换是否会隐式执行。强类型语言可能比弱类型语言稍微慢一些,但是强类型定义带来的严谨避免了不必要的错误。强类型语言包括:Java、.net、Python、C++等语言。其中,Python是动态语言、强类型定义语言、类型安全语言;Java是一种静态语言,一种强类型定义语言,一种类型安全的语言;弱类型语言包括:VB、PHP、JavaScript等语言。其中,VBScript是一种动态语言,这是类型不安全的一个原因。动态语言和静态语言的区别:动态类型语言:动态语言是指在运行时做数据类型检查的语言,也就是说,用动态类型语言编程时,永远不需要为任何类型指定数据类型。变量,而语言会在第一次赋值给变量时在内部记录数据类型。Python和Ruby是典型的动态类型语言,其他各种脚本语言如VBScript或多或少都是动态类型语言。静态类型语言:静态类型语言与动态类正好相反。它的数据类型是在编译时检查的,也就是说,在编写程序时必须声明所有变量的数据类型。C/C++是静态类型语言的典型代表。其他静态语言还包括C#、Java等。动态语言和静态语言的根本区别在于数据类型是在运行时检查还是在编译时检查。编译型语言和解释型语言的区别:编译型语言:程序需要直接翻译成机器码(非跨平台语言如C/C++)或中间代码(跨平台语言如Java需要一个虚拟机然后将中间代码打印成机器码)。一般需要经过编译和链接两个步骤。编译是将源代码编译成机器码,链接是将机器码和各个模块的依赖库连接起来生成可执行文件。解释型语言:使用解释器将源代码逐行解释成机器码并立即执行,无需整体编译和链接处理,相比编译型语言节省了一个过程。一种像吃饭,等所有的菜上完才开始,另一种像吃火锅,边涮边吃,时间不一样。解释型语言的优点:容易跨平台,只需要提供平台特定的解释器;缺点:每次运行都需要重新解释,性能不如编译型语言。2.Python的解释器有哪些类型和相关特性?CPython:解释器的官方版本。这个解释器是用C语言开发的,所以叫CPython。在命令行上运行python会启动CPython解释器。CPython是使用最广泛的Python解释器。IPython:IPython是基于CPython的交互式解释器,也就是说IPython只是在交互方式上有所增强,但执行Python代码的功能与CPython完全一样。CPython使用>>>作为提示符,IPython使用In[序列号]:作为提示符。PyPy:它的目标是执行速度。PyPy使用JIT技术动态编译Python代码(注意不是解释型的),因此可以显着提高Python代码的执行速度。大部分的Python代码都可以在PyPy下运行,但是PyPy和CPython存在一些差异,导致同样的Python代码在两种解释器下执行会出现不同的结果。Jython:Jython是运行在Java平台上的Python解释器,可以直接将Python代码编译成Java字节码执行。3.说说你知道的Python3和Python2的区别?编码:Python2默认的编码是asscii,这也是Python2经常遇到编码问题的原因之一。至于为什么使用asscii作为默认编码,原因是Python语言诞生时Unicode并没有出现。Python3默认使用UTF-8作为默认编码,不再需要在文件顶部写#coding=utf-8。String:Python2中的字符类型,str:编码后的字节序列,unicode:编码前的文本字符;以及Python3中的字符类型,str:编码后的unicode文本字符,bytes:编码序列前的字节。字符串可以认为有两种状态,即文本状态和字节(二进制)状态。Python2和Python3中的两种字符类型分别对应这两种状态,然后在它们之间进行编解码转换。编码就是把一个字符串转换成字节码,这涉及到字符串的内部表示;解码是将字节码转换为字符串,并将位显示为字符。在Python2中,str和unicode都有encode和decode方法。但是不建议对str使用encode,对unicode使用decode,这是Python2设计上的一个缺陷。Python3进行了优化。str只有一种encode方法可以将字符串转换为字节码,bytes也只有一种decode方法可以将字节码转换为文本字符串。print:Python2中的print是一个语句;Python3中的print是一个函数。例如:#py2>>>print("hello","world")('hello','world')#py3>>>print("hello","world")helloworld这个例子比较明显,在py2中,print语句后面跟着一个元组对象,而在py3中,print函数可以接收多个位置参数。如果要在Python2中将print作为函数使用,可以在future模块中导入print_function。import:python2默认通过相对路径导入模块和包,python3默认通过绝对路径导入。import的理解:python2和python3通过importinput导入模块和包的区别:Python3:input将输入解析为str字符类型;Python2:input将输入解析为int类型,raw_input将输入解析为str类型。算法:Python2中,/进行传统除法,对整数进行截断除法,对浮点数进行浮点数除法(保留小数部分,即使可以整除);//执行Floor除法,截断余数并返回整数操作数的值Integer,如果任何操作数是浮点数,则返回浮点数。在Python3中,无论操作数的类型如何,/始终执行真正的除法,并返回包括任何余数的浮点结果;//执行Floor除法,截断余数并返回整数操作数的整数(如果有)如果操作数是浮点数,则返回浮点数。int/long:在Python3中,只有一种整数类型int。在大多数情况下,它与Python2中的长整数非常相似。Python2具有用于非浮点数的int和long类型。int类型的最大值不能超过sys.maxint,这个最大值是平台相关的。True和False:在Python2中,True和False是两个全局变量(名称),在值上分别对应1和0。因为它们是变量,所以它们可以指向其他对象。Python3修复了这个缺陷,True和False成为两个关键字,始终指向两个固定的对象,不允许重新赋值。迭代器:Python2中很多返回列表对象的内置函数和方法在Python3中被改成了返回类似于迭代器的对象,因为迭代器的懒加载特性使得操作大数据更加高效。例如:在Python2中使用xrange()创建一个迭代器对象,使用range()创建一个list数组(当生成一个大的数字序列时,使用xrange会比range有更好的性能,因为不需要开辟一个大内存空间);Python3使用range()创建迭代器对象,并删除了xrange()方法。另外,字典对象的dict.keys()和dict.values()方法返回的不再是一个列表,而是一个类似迭代器的视图对象。高阶函数map、filter和zip不再返回列表对象。Python2的迭代器必须实现next方法,而Python3将其改为__iter__()和next。nonlocal:在Python2中,可以在函数中使用关键字global将变量声明为全局变量,但在嵌套函数中,无法将变量声明为非局部变量。在Python3中,一般在闭包中添加关键字nonlcoal,让变量使用同名的外层变量。LEGB作用域的理解:浅析python3的local、global、nonlocal。
