Python基本面试题深入解答
- 格式:doc
- 大小:39.00 KB
- 文档页数:8
应届生python面试题1. Python是一种高级编程语言,广泛应用于各个领域,尤其在数据科学和人工智能方面具有突出的优势。
作为一名应届生,掌握Python编程技能是非常重要的。
在面试中,常常会遇到与Python相关的问题,下面我将为大家介绍一些常见的Python面试题及其解答。
2. 面试题1:Python中如何实现单例模式?在Python中,可以通过使用装饰器或者元类来实现单例模式。
以下是使用装饰器实现单例模式的示例代码:```pythondef singleton(cls):instances = {}def wrapper(*args, **kwargs):if cls not in instances:instances[cls] = cls(*args, **kwargs)return instances[cls]return wrapper@singletonclass MyClass:def __init__(self, name): = namea = MyClass("instance1")b = MyClass("instance2")print() # 输出:instance1print() # 输出:instance1print(a is b) # 输出:True```通过使用装饰器,在创建类实例时会先检查该类是否已经存在实例对象,如果存在则直接返回该对象,如果不存在则创建新的对象并返回。
3. 面试题2:如何在Python中处理异常?在Python中可以使用try-except语句来处理异常。
以下是一个处理文件读取异常的示例代码:```pythontry:file = open("example.txt", "r")content = file.read()file.close()except FileNotFoundError:print("文件不存在")except Exception as e:print("发生了其他异常:", str(e))```在try代码块中,我们尝试打开一个文件并读取内容。
python基础题(53道题详解)1、简述解释型和编译型编程语言?概念:•编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。
然后,可直接运行这个程序。
•解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!区别:•编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。
如C、C++、Delphi、Pascal,Fortran。
•解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。
如Java、Basic.2、Python解释器种类以及特点•CPythono c语言开发的使用最广的解释器•IPythono基于cpython之上的一个交互式计时器交互方式增强功能和cpython一样•PyPyo目标是执行效率采用JIT技术对python代码进行动态编译,提高执行效率•JPythono运行在Java上的解释器直接把python代码编译成Java字节码执行•IronPythono运行在微软 .NET 平台上的解释器,把python编译成. NET 的字节码3、python常见的PEP8规范•每级缩进用4个空格•Python 3中不允许混合使用Tab和空格缩进。
•限制所有行的最大行宽为79字符。
•在核心Python发布的代码应该总是使用UTF-8(ASCII在Python 2)。
•推荐绝对路径导入,因为它们通常更可读4、通过代码实现如下进制转换:1 hex()2转换一个整数对象为十六进制的字符串34 >>> hex(16)5'0x10'6 >>> hex(18)7'0x12'8 >>> hex(32)9'0x20'1 oct()2转换一个整数对象为八进制的字符串34 >>> oct(8)5'0o10'6 >>> oct(166)7'0o246'1 bin()2转换一个整数对象为二进制字符串34 >>> bin(10)5'0b1010'6 >>> bin(255)7'0b11111111'1 chr()2转换一个[0, 255]之间的整数为对应的ASCII字符34 >>> chr(65)5'A'6 >>> chr(67)7'C'8 >>> chr(90)9'Z'10 >>> chr(97)11'a'1 ord()2将一个ASCII字符转换为对应整数34 >>> ord('A')5 656 >>> ord('z')7 1221 16进制转10进制2 >>> int('10', 16)3 164 >>> int('0x10', 16)5 1667 8进制转10进制8 >>> int('0o10', 8)9 810 >>> int('10', 8)11 81213 2进制转10进制14 >>> int('0b1010', 2)15 1016 >>> int('1010', 2)17 105、python递归的最大层数1import sys2 sys.setrecursionlimit(100000)34def foo(n):5print(n)6 n += 17 foo(n)89if__name__ == '__main__':10 foo(1)得到的最大数字在3925-3929之间浮动,这个是和计算机有关系的,不然也不会是一个浮动的数字了(数学逻辑讲求严谨)6、三元运算规则以及应用场景•三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值•三元运算符的功能与'if....else'流程语句一致,它在一行中书写,代码非常精炼,执行效率更高•格式:[on_true] if [expression] else [on_false]• res = 值1 if 条件 else 值27、列举 Python2和Python3的区别•print•input• 1问题:如何获取编码方式的信息?• 2获取目标bytes的编码方式• 3这一情况可以通过chardet模块的detect()函数来获取信息,chardet是第三方库,可以通过pip来安装• 4• 5 b是待检测的bytes变量• 6• 7import chardet• 8print(chardet.detect(b))• 9######output####•10 {'confidence': 1.0, 'encoding': 'ascii'}•11 1•12 2•13 3•14 4•15 5•16 confidence是指匹配程度,encoding是指可能的编码方式•17•18获取当前环境的编码方式•19这一情况可以使用sys模块下的getdefaultencoding()函数来获取信息•20•21import sys•22print(sys.getdefaultencoding())•23•24######## output#####•25 utf-8•问题在控制台上看到的到底是什么1写上面的东西的时候产生了一个疑问,现在已经知道Python内部存储str的方式是使用unicode 字符集,但是我们在屏幕上看到的并不是unicode字符集3 s = "你好"4print(s)6#########output#############7你好13 s的 unicode 是 \u4f60\u597d14 115那么,这中间应该是进行了某种转换16实际上,在执行print(str)的时候,python内部执行了encoding操作,控制台拿到的其实是一个bytes变量17之后,控制台又根据环境内部的编码方式,将所得到的bytes内容进行decoding的操作,就显示了原先str的内容•打开文件不再支持 file 方法,只能用 open•range不再返回列表,而是一个可迭代的range对象•除法 / 不再是整除,而是得到浮点数,整除需要用双斜杠 //•urllib和urllib2合并成了urllib,常用的urllib2.urlopen()变成了urllib.request.urlopen()•字符串及编码相关有大变动,简单来说就是原来的str变成了新的bytes,原来的unicode变成了新的str。
15个Python⾯试问题(附答案)问题1到底什么是Python?你可以在回答中与其他技术进⾏对⽐(也⿎励这样做)。
答案下⾯是⼀些关键点:Python是⼀种解释型语⾔。
这就是说,与C语⾔和C的衍⽣语⾔不同,Python代码在运⾏之前不需要编译。
其他解释型语⾔还包括PHP和Ruby。
Python是动态类型语⾔,指的是你在声明变量时,不需要说明变量的类型。
你可以直接编写类似x=111和x="I'm a string"这样的代码,程序不会报错。
Python⾮常适合⾯向对象的编程(OOP),因为它⽀持通过组合(composition)与继承(inheritance)的⽅式定义类(class)。
Python中没有访问说明符(access specifier,类似C++中的public和private),这么设计的依据是“⼤家都是成年⼈了”。
在Python语⾔中,函数是第⼀类对象(first-class objects)。
这指的是它们可以被指定给变量,函数既能返回函数类型,也可以接受函数作为输⼊。
类(class)也是第⼀类对象。
Python代码编写快,但是运⾏速度⽐编译语⾔通常要慢。
好在Python允许加⼊基于C语⾔编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的。
numpy就是⼀个很好地例⼦,它的运⾏速度真的⾮常快,因为很多算术运算其实并不是通过Python实现的。
Python⽤途⾮常⼴泛——⽹络应⽤,⾃动化,科学建模,⼤数据应⽤,等等。
它也常被⽤作“胶⽔语⾔”,帮助其他语⾔和组件改善运⾏状况。
Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,⽽不⽤处理底层的细节。
为什么提这个问题:如果你应聘的是⼀个Python开发岗位,你就应该知道这是门什么样的语⾔,以及它为什么这么酷。
以及它哪⾥不好。
问题2补充缺失的代码def print_directory_contents(sPath):"""这个函数接受⽂件夹的名称作为输⼊参数,返回该⽂件夹中⽂件的路径,以及其包含⽂件夹中⽂件的路径。
Python接口测试基础知识(面试)习题及答案解析(答案见尾页)一、选择题1. 什么是指令测试?A. 接口测试B. 功能测试C. 集成测试D. 性能测试2. 在Python中,如何判断一个字符串是否是URL?A. 使用urlparse模块B. 使用re模块C. 使用requests模块D. 使用os模块3. Python中获取请求方法的值,应该使用哪个函数?A. request.methodB. request.get_methodC. request.urlD. request.build_url4. Python中如何发送POST请求?A. requests.post()B. requests.put()C. requests.patch()D. requests.delete()5. 在Python中,如何判断一个响应的状态码是否为?A. response.status_code == 200B. response.code == 200C. response.statustext == "200 OK"D. response.body == "OK"6. Python中如何解析JSON数据?A. json.loads()B. json.dumps()C. json.load()D. json.dump()7. 请求头中的"Content-Length"字段表示什么?A. 请求体大小B. 响应体大小C. 请求URL长度D. 请求方法8. 请求头中的"Accept"字段用于告诉服务器什么类型的内容可以接受?A. JSONB. XMLC. HTMLD. CSS9. 以下哪种情况会导致请求失败?A. 请求头中的"User-Agent"设置不正确B. 请求方法不支持C. 请求头中的"Content-Type"设置不正确D. 服务器返回错误代码40410. 如何在Python中设置请求延时?A. time.sleep(1)B. random.uniform(0.1, 1)C. requests.Session().get(url, timeout=1)D. requests.Session().put(url, timeout=1)11. 以下哪个选项不是请求头中的常见字段?A. Content-TypeB. AcceptC. User-AgentD. Authorization12. 在Python中,如何使用SQLite进行数据库操作?A. 直接使用Psycopg2库B. 使用sqlite3库C. 使用MySQLdb库D. 使用pyodbc库13. 以下哪种方法不是Python中常用的获取URL参数的方式?A. 直接在URL字符串中指定B. 使用urllib.parse库中的urlparse函数C. 使用requests库中的Request对象D. 使用os.environ14. 在Python中,如何创建一个表单并接收用户输入的数据?A. 使用flask库B. 使用django库C. 使用Flask-WTF库D. 使用Spring Boot库15. 在Python中,如何处理异常捕获?A. 使用try-except语句B. 使用raise语句C. 使用finally语句D. 使用with语句16. 如何在Python中发送POST请求?A. 使用requests库B. 使用urllib库C. 使用socket库D. 使用curl库17. 以下哪种方法是在Python中处理CSV文件的好方法?A. 使用csv库B. 使用pandas库C. 使用open函数D. 使用os库18. 在Python中,如何进行数据库连接池的管理?A. 使用pymysql库B. 使用psycopg2库C. 使用sqlite3库D. 使用pyodbc库19. 以下哪种方法是Python中进行多线程编程的最佳选择?A. 使用threading库B. 使用multiprocessing库C. 使用asyncio库D. 使用queue库20. 在Python中,如何解析JSON数据?A. 使用 `json.loads()` 函数B. 使用 `json.dumps()` 函数C. 使用 `json` 模块D. 使用 `urllib.parse.quote()` 函数21. 以下哪个函数是用来发送GET请求的?A. requests.get()B. requests.post()C. requests.put()D. requests.delete()22. 如何防止网络爬虫对网站造成过多的访问压力?A. 通过代理IPB. 设置请求速度限制C. 模拟用户浏览器行为D. 使用第三方CDN加速23. 以下哪个模块在Python中主要用于处理网络爬虫?A. requestsB. BeautifulSoupC. scrapyD. lxml24. 如何处理请求中的重定向?A. 使用 `location` 属性B. 使用 ` follow` 属性C. 使用 ` headers` 属性D. 使用 ` session` 属性25. 以下哪个错误是在发送请求时可能会遇到的?A. 请求超时B. 请求被拒绝C. 请求URL错误D. 网络连接问题26. 如何在爬虫中处理登录验证?A. 使用session对象进行登录B. 使用cookie对象进行登录C. 使用表单提交进行登录D. 使用验证码识别进行登录27. 以下哪个函数是Python中用于发送POST请求的?A. requests.get()B. requests.post()C. requests.put()D. requests.delete()28. 在Python中,可以使用哪个库来进行性能测试?A. requestsB. timeitC. unittestD. PyTest29. 以下哪种是常见的性能测试指标?A. 请求成功率B. 响应时间C. 吞吐量D. 错误率30. 如何进行接口的并发性能测试?A. 使用多线程或多进程B. 使用请求队列C. 使用代理服务器D. 使用负载均衡器31. 接口性能测试中,需要关注哪些方面的性能?A. 请求响应速度B. 资源消耗C. 可用性D. 容错能力32. 以下哪种类型的请求可以用来进行性能测试?A. 正常请求B. 随机请求C. 压力测试D. 容量测试33. 以下哪种技术可以用来模拟大量的并发请求?A. 请求队列B. 负载均衡器C. 分布式系统D. 虚拟机34. 如何评估接口的安全性?A. 检查请求头B. 检查响应状态码C. 检查数据库操作D. 检查异常处理35. 在进行性能测试时,应该将测试环境设置为实际生产环境的仿真环境。
python经典面试题Python是一种高级的、面向对象的编程语言,被广泛应用于软件开发、数据分析和人工智能等领域。
在Python的学习和应用过程中,掌握一些经典面试题是非常重要的。
下面将介绍一些常见的Python面试题,帮助大家更好地准备面试。
1. 请解释Python中的“GIL”是什么?答:GIL全称为全局解释器锁(Global Interpreter Lock),它是一种机制,用于在Python解释器中确保同一时间只能有一个线程执行Python字节码。
这是因为CPython解释器中存在一些共享的全局数据,如果没有GIL的限制,多个线程同时访问这些数据可能会导致数据不一致性的问题。
2. 请解释Python中的列表(List)和元组(Tuple)的区别。
答:列表和元组都是Python中的序列类型,但有几个重要的区别。
列表是可变的(Mutable),可以通过索引修改其中的元素;而元组是不可变的(Immutable),一旦创建就不能被修改。
另外,列表使用方括号[]表示,元组使用圆括号()表示。
3. 如何在Python中实现字符串的反转?答:可以使用切片操作来实现字符串的反转。
例如,通过s[::-1]就可以将字符串s逆序输出。
4. 请解释Python中的装饰器是什么?如何使用装饰器?答:装饰器是Python中的一种函数或类,用于包装其他函数或类,以提供额外的功能。
它可以在不修改原函数或类的情况下,扩展其功能或改变其行为。
装饰器使用语法糖@来应用,将装饰器作用于函数或类上。
5. 请解释Python中的迭代器和生成器的概念,并说明它们之间的区别。
答:迭代器是一种对象,它可以通过for循环逐个地返回元素。
它使用__iter__()和__next__()方法来实现迭代。
生成器是一种特殊的迭代器,它可以通过yield关键字来定义,简化了迭代器的编写过程。
区别在于迭代器需要显式地实现__iter__()和__next__()方法,而生成器则可以使用yield关键字来自动生成这些方法。
常见的35个Python⾯试题及答案1. Python ⾯试问题及答案作为⼀个 Python 新⼿,你必须熟悉基础知识。
在本⽂中我们将讨论⼀些 Python ⾯试的基础问题和⾼级问题以及答案,以帮助你完成⾯试。
包括Python 开发问题、编程问题、数据结构问题、和 Python 脚本问题。
让我们来深⼊研究这些问题Python ⾯试问题Q.1. Python 的特点和优点是什么?Python 可以作为编程的⼊门语⾔,因为他具备以下特质:1. 解释性2. 动态特性3. ⾯向对象4. 语法简洁5. 开源6. 丰富的社区资源Q.2. 深拷贝和浅拷贝的区别是什么?深拷贝是将对象本⾝复制给另⼀个对象。
这意味着如果对对象的副本进⾏更改时不会影响原对象。
在 Python 中,我们使⽤ deepcopy()函数进⾏深拷贝,使⽤⽅法如下:深拷贝-Python ⾯试问题及答案浅拷贝是将对象的引⽤复制给另⼀个对象。
因此,如果我们在副本中进⾏更改,则会影响原对象。
使⽤ copy()函数进⾏浅拷贝,使⽤⽅法如下:浅拷贝—Python ⾯试问题及答案Q.3. 列表和元祖有什么不同?主要区别在于列表是可变的,元祖是不可变的。
看下⾯的例⼦:会出现以下错误提⽰:TypeError: ‘tuple’ object does not support item assignment2. Python ⾯试基础题Q.4 到 Q.20 是新⼿经常会被问到的⼀些 Python 基础题,有经验的⼈也可以参考这些问题来复习这些概念。
Q.4. 解释 Python 中的三元表达式与 C++不同, 在 Python 中我们不需要使⽤ ? 符号,⽽是使⽤如下语法:[on true] if [expression]else [on false]如果 [expression] 为真, 则 [on true] 部分被执⾏。
如果表⽰为假则 [on false] 部分被执⾏下⾯是例⼦:2HiQ.5. Python 中如何实现多线程?线程是轻量级的进程,多线程允许⼀次执⾏多个线程。
python面试题目Python是一种高级的、解释型的、面向对象的编程语言,广泛应用于数据分析、机器学习、人工智能等领域。
对于求职者来说,掌握Python的相关知识和技能是非常重要的。
在Python面试中,面试官会提出一系列的问题来考察面试者的能力和经验。
本文将介绍一些常见的Python面试题目,以及它们的答案。
1. 请解释一下Python中的列表(list)和元组(tuple)有什么区别?答:列表和元组都是Python中的数据容器,但它们有以下几个区别:- 列表是可变的,可以通过索引和切片来修改和操作,而元组是不可变的,一旦创建就不能修改和删除其中的元素。
- 列表使用方括号([])来表示,元素之间使用逗号(,)分隔,而元组使用圆括号(())来表示,元素之间使用逗号(,)分隔。
- 列表通常用于存储同类型的数据,而元组通常用于存储异构的数据。
- 列表的内存空间较大,元组的内存空间较小,因此在存储大量数据时,使用元组可以提高程序的性能。
2. 如何在Python中实现对字符串的反转?答:可以使用切片操作来实现字符串的反转,示例代码如下:```pythonstring = "Hello, World!"reversed_string = string[::-1]print(reversed_string)```3. 请解释一下Python中的装饰器(decorator)是什么?如何使用装饰器?答:装饰器是一种Python语法糖,用于在不修改源代码的情况下,在函数执行前后添加额外的功能。
装饰器实际上是一个函数,它接受一个函数作为参数,并返回一个新的函数,同时在新函数中添加了额外的功能。
使用装饰器的步骤如下:1. 定义装饰器函数,函数中接受一个函数作为参数,并返回一个新的函数。
2. 在需要使用装饰器的函数上方添加@装饰器函数的名称。
示例代码如下:```pythondef decorator(func):def wrapper():print("Before function execution")func()print("After function execution")return wrapper@decoratordef say_hello():print("Hello, World!")say_hello()```4. 如何在Python中处理异常?答:在Python中,可以使用try-except语句来捕获和处理异常。
120余个值得熟记会用的Python 面试题及参考答案1.什么是Python?Python是一种高级、解释性、交互式和面向对象的脚本语言。
Python设计为高度可读性,它不像其他语言使用标点符号,而大量使用英语关键字,并且具有比其他语言更少的语法构造。
2.Python的典型功能有哪些?以下是Python的一些显著功能:•支持函数式和结构化编程方法以及面向对象编程。
•可以用作脚本语言,也可以编译为用于构建大型应用程序的byte-code。
•提供非常高级别的动态数据类型,并支持动态类型检查。
•支持自动垃圾回收。
•可以轻松地与C、C++、COM、ActiveX、CORBA和Java集成。
3.PYTHONPATH环境变量的目的是什么?PythonPATH-它的角色类似于PATH。
此变量告诉Python解释器在什么位置查找导入到程序中的模块文件。
它应包括Python源库目录和包含Python源代码的目录。
PythonPATH有时由Python安装程序预设。
4.PYTHON STARTUP环境变量的目的是什么?PYTHONSTARTUP-它包含包含Python源代码的初始化文件的路径。
每次启动解释器时都会执行它。
它在Unix中pythonrc.py.,它包含加载实用程序或修改PYTHONPATH的命令。
5.Pythoncaseok环境变量的目的吗?PythonCASEOK–在Windows中,它用于指示Python在导入语句中查找第一个不区分大小写匹配项。
6.PYTHONHOME环境变量的目的是什么?PYTHONHOME=它是一个替代模块搜索路径。
它通常嵌入在PYTHONSTARTUP或PYTHONPATH目录中,以便于切换模块库。
7.python是一种大小写敏感语言吗?是的!Python是一种大小写敏感的编程语言。
8.Python中支持的数据类型是什么?Python有五种标准数据类型:•数字•字符串•列表•元•字典9.如果str="Hello World!”, 那么 print (str)的输出结果是什么?它将打印完整的字符串。
Python经典⾯试题详解(共53题)Python 经典⾯试题详解(共53题)1. 列表(list)和元组(tuple)有什么区别?在我每⼀次应聘Python数据科学家的⾯试中,这个问题都会被问到。
所以对这个问题的答案,我可以说是了如指掌。
列表是可变的。
创建后可以对其进⾏修改。
元组是不可变的。
元组⼀旦创建,就不能对其进⾏更改。
列表表⽰的是顺序。
它们是有序序列,通常是同⼀类型的对象。
⽐如说按创建⽇期排序的所有⽤户名,如["Seth", "Ema", "Eli"]。
元组表⽰的是结构。
可以⽤来存储不同数据类型的元素。
⽐如内存中的数据库记录,如(2, "Ema", "2020–04–16")(#id, 名称,创建⽇期)。
2. 如何进⾏字符串插值?在不导⼊Template类的情况下,有3种⽅法进⾏字符串插值。
3. “is”和“==”有什么区别?在我的Python职业⽣涯的早期,我认为它们是相同的,因⽽制造了⼀些bug。
所以请⼤家听好了,“is”⽤来检查对象的标识(id),⽽“==”⽤来检查两个对象是否相等。
我们将通过⼀个例⼦说明。
创建⼀些列表并将其分配给不同的名字。
请注意,下⾯的b指向与a相同的对象。
下⾯来检查是否相等,你会注意到结果显⽰它们都是相等的。
但是它们具有相同的标识(id)吗?答案是不。
我们可以通过打印他们的对象标识(id)来验证这⼀点。
你可以看到:c和a和b具有不同的标识(id)。
4. 什么是装饰器(decorator)?这是每次⾯试我都会被问到的另⼀个问题。
它本⾝就值得写⼀篇⽂章。
如果你能⾃⼰⽤它编写⼀个例⼦,那么说明你已经做好了准备。
装饰器允许通过将现有函数传递给装饰器,从⽽向现有函数添加⼀些额外的功能,该装饰器将执⾏现有函数的功能和添加的额外功能。
我们将编写⼀个装饰器,该装饰器会在调⽤另⼀个函数时记录⽇志。
python常见面试题及答案Python是一门被广泛应用于科学计算、数据分析和软件开发领域的高级编程语言。
在求职和面试过程中,掌握Python相关知识和解决问题的能力是相当重要的。
本文将介绍一些常见的Python面试题及其答案,帮助读者进一步巩固和提升Python编程技能。
1. 什么是Python?它有什么特点?Python是一门高级编程语言,由Guido van Rossum于1989年创造。
它具有以下特点:- 简洁易读:Python采用简洁的语法和清晰的代码结构,易于阅读和理解。
- 动态类型:Python是一种解释型语言,不需要在使用变量前进行声明和类型定义。
- 跨平台性:Python可以在多个操作系统上运行,包括Windows、Linux和Mac OS等。
- 强大的标准库:Python拥有丰富的标准库,提供了各种常用功能和模块,方便开发者快速开发应用程序。
2. 解释Python中的“GIL”是什么?它对多线程有什么影响?GIL(全局解释器锁)是Python解释器中的一个机制,用于确保同一时间只有一个线程在执行Python字节码。
这是由于Python的内存管理机制并不是线程安全的。
GIL对多线程的影响是,在多线程程序中,只有一个线程能够执行Python字节码,其他线程需要等待。
这导致多线程程序中的并发度较低,特别是对于CPU密集型任务。
3. 如何在Python中实现多线程?在Python中,可以使用threading模块来实现多线程。
以下是一个简单的多线程示例:```pythonimport threadingdef print_nums():for i in range(1, 6):print(i)def print_letters():for letter in ['a', 'b', 'c', 'd', 'e']:print(letter)t1 = threading.Thread(target=print_nums)t2 = threading.Thread(target=print_letters)t1.start() # 启动线程1t2.start() # 启动线程2t1.join() # 等待线程1结束t2.join() # 等待线程2结束```4. 在Python中如何处理异常?Python使用`try-except`语句来处理异常。
Python基本面试题|深入解答分享给大家的11道Python面试题,好多小伙伴都很积极的去思考分析,给我留言的同学非常多,非常欣慰有这么多好学的小伙伴,大家一起学习,一起加油,把Python学好,今天我就把11道面试题细细解答一下1.单引号,双引号,三引号的区别分别阐述3种引号用的场景和区别1),单引号和双引号主要用来表示字符串比如:单引号:'python'双引号:"python"2).三引号三单引号:'''python ''',也可以表示字符串一般用来输入多行文本,或者用于大段的注释三双引号:"""python""",一般用在类里面,用来注释类,这样省的写文档,直接用类的对象__doc__访问获得文档区别:若你的字符串里面本身包含单引号,必须用双引号比如:"can't find the log\n"2.Python的参数传递是值传递还是引用传递举例说明Python函数参数传递的几种形式,并说明函数传参是值传递还是引用传递1).Python的参数传递有:位置参数默认参数,可变参数,关键字参数2).函数的传值到底是值传递还是引用传递,要分情况a.不可变参数用值传递:像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象b.可变参数是用引用传递的比如像列表,字典这样的对象是通过引用传递,和C语言里面的用指针传递数组很相似,可变对象能在函数内部改变.3.什么是lambda函数?它有什么好处?举例说明lambda的用法,并说明用lambda的优点1).lambda的用法:lambda是匿名函数,用法如下:lambda arg1,arg2..argN:expression using args 2).优点lambda能和def做同样种类的工作,特别是对于那些逻辑简单的函数,直接用lambda会更简洁,而且省去取函数名的麻烦(给函数取名是个技术活)4.字符串格式化:%和.format的区别字符串的format函数非常灵活,很强大,可以接受的参数不限个数,并且位置可以不按顺序,而且有较为强大的格式限定符(比如:填充,对齐,精度等)5.Python是如何进行内存管理的引用计数:引用计数加一,del删除减一内存池垃圾回收1).对象的引用计数机制Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。
引用计数增加的情况:一个对象分配一个新名称将其放入一个容器中(如列表、元组或字典)引用计数减少的情况:使用del语句对对象别名显示的销毁引用超出作用域或被重新赋值2).垃圾回收当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。
3).内存池机制Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统:Pymalloc机制:为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。
对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。
也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。
6.写一个函数, 输入一个字符串, 返回倒序排列的结果输入: string_reverse(‘abcdef’), 返回: ‘fedcba’,写出你能想到的多种方法1).利用字符串本身的翻转def string_reverse1(text='abcdef'):return text[::-1]2).把字符串变成列表,用列表的reverse函数3).新建一个列表,从后往前取4).利用双向列表deque中的extendleft函数5).递归7.按升序合并如下两个list, 并去除重复的元素list1 = [2, 3, 8, 4, 9, 5, 6]list2 = [5, 6, 10, 17, 11, 2]1).最简单的方法用setlist3=list1+list2print sorted(list(set(list3)))2).递归先选一个中间数,然后一边是小的数字,一边是大的数字,然后再循环递归,排完序(是不是想起了c里面的冒泡)8.以下的代码的输出将是什么? 说出你的答案并解释class Parent(object):x = 1class Child1(Parent):passclass Child2(Parent):passprint Parent.x, Child1.x, Child2.xChild1.x = 2print Parent.x, Child1.x, Child2.xParent.x = 3print Parent.x, Child1.x, Child2.x>>1 1 11 2 13 2 3解答:使你困惑或是惊奇的是关于最后一行的输出是 3 2 3 而不是 3 2 1。
为什么改变了Parent.x 的值还会改变Child2.x 的值,但是同时Child1.x 值却没有改变?这个答案的关键是,在Python中,类变量在内部是作为字典处理的。
如果一个变量的名字没有在当前类的字典中发现,将搜索祖先类(比如父类)直到被引用的变量名被找到.首先,在父类中设置x = 1 会使得类变量x 在引用该类和其任何子类中的值为1。
这就是因为第一个print 语句的输出是1 1 1然后,如果任何它的子类重写了该值(例如,我们执行语句Child1.x = 2)该值仅仅在子类中被改变。
这就是为什么第二个print 语句的输出是 1 2 1最后,如果该值在父类中被改变(例如,我们执行语句Parent.x = 3),这个改变会影响到任何未重写该值的子类当中的值(在这个示例中被影响的子类是Child2)。
这就是为什么第三个print 输出是3 2 39.下面的代码会不会报错list = ['a', 'b', 'c', 'd', 'e']print list[10:]不会报错,而且会输出一个[],并且不会导致一个IndexError解答:当试图访问一个超过列表索引值的成员将导致IndexError(比如访问以上列表的list[10])。
尽管如此,试图访问一个列表的以超出列表长度数作为开始索引的切片将不会导致IndexError,并且将仅仅返回一个空列表一个讨厌的小问题是它会导致出现bug ,并且这个问题是难以追踪的,因为它在运行时不会引发错误,吐血啊~~10.说出下面list1,list2,list3的输出值def extendList(val, list=[]):list.append(val)return listlist1 = extendList(10)list2 = extendList(123,[])list3 = extendList('a')print "list1 = %s" % list1print "list2 = %s" % list2print "list3 = %s" % list3>>list1 = [10, 'a']list2 = [123]list3 = [10, 'a']许多人会错误的认为list1 应该等于[10] 以及list3 应该等于['a']。
认为list 的参数会在extendList 每次被调用的时候会被设置成它的默认值[]。
尽管如此,实际发生的事情是,新的默认列表仅仅只在函数被定义时创建一次。
随后当extendList 没有被指定的列表参数调用的时候,其使用的是同一个列表。
这就是为什么当函数被定义的时候,表达式是用默认参数被计算,而不是它被调用的时候。
因此,list1 和list3 是操作的相同的列表。
而list2是操作的它创建的独立的列表(通过传递它自己的空列表作为list参数的值)所以这一点一定要切记切记.下面我们把list置为None就可以避免一些麻烦了11.写出你认为最Pythonic的代码Pythonic编程风格是Python的一种追求的风格,精髓就是追求直观,简洁而容易读.下面是一些比较好的例子1).交互变量非Pythonictemp = aa = bb = temppythonic:a,b=b,a2).判断其值真假name = 'Tim'langs = ['AS3', 'Lua', 'C']info = {'name': 'Tim', 'sex': 'Male', 'age':23 }非Pythonicif name != '' and len(langs) > 0 and info != {}: print('All True!')pythonic:if name and langs and info:print('All True!')3).列表推导式[x for x in range(1,100) if x%2==0]4).zip创建键值对keys = ['Name', 'Sex', 'Age']values = ['Jack', 'Male', 23]dict(zip(keys,values))。