当前位置:   article > 正文

Python 面试面经_python深度学习面经

python深度学习面经

1 介绍一下 except 的作用和用法?

excpt:捕获所有异常

excpt:<异常名>:捕获指定异常

excpt:<异常名1, 异常名2>: 捕获异常1或者异常2

excpt:<异常名>,<数据>:捕获指定异常及其附加的数据

excpt:<异常名1, 异常名2>: <数据>:捕获异常名1或者异常名2,及附加的数据

2 在 except 中 return 后还会不会执行finally 中的代码?怎么抛出自定义异常?

会继续处理finally中的代码

用raise方法可以抛出自定义异常

3 read、readline 和 readlines 的区别?

read:读取整个文件

readline:读取下一行,使用生成器方法

readlines:读取整个文件到一个生成器已提供我们遍历

4 请简述对input()函数的理解?

input()函数获取用户的输入,不论输入的是什么,获取到的都是字符串类型

5 什么是正则的贪婪匹配?

  1. import re
  2. secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
  3. b = re.findall('xx.*xx',secret_code) # 贪婪匹配
  4. print (b) # ['xxIxxfasdjifja134xxlovexx23345sdfxxyouxx']
  5. c = re.findall('xx.*?xx',secret_code) # 非贪婪匹配
  6. print(c) # ['xxIxx', 'xxlovexx', 'xxyouxx']

1、贪婪匹配:总是尝试匹配尽可能多的字符

2、非贪婪匹配:是尝试匹配尽可能少的字符

6 面向对象深度优先和广度优先是什么?

在子类继承多个父类时,属性查找方式粉深度优先和广度优先两种

当类是经典类时,多继承情况下,在要查找属性不存在时,会按照深度优先方式查找下去。

当类时新式类时,多继承情况下,在要查找属性不存在时,会按照广度优先方式查找下去。

7 enumerate() 的用法?

enumerate()函数用于将一个可遍历的数据对象(列表、元组和字符串)组合为一个索引序列,同时输出数据和数据下标,一般在for循环中使用。

  1. my_list = ['apple', 'banana', 'grapes', 'pear']
  2. for c, value in enumerate(my_list, 1):
  3. print(c, value)
  4. 1 apple
  5. 2 banana
  6. 3 grapes
  7. 4 pear

如果是enumerate(my_list) ,输出的下标从0开始。

8 pass语句

pass是空语句,为了保持程序结构的完整性。pass不做任何事情,一般用做占位语句。

9 主动抛出异常

使用raise

  1. def test_raise(n):
  2. if not isinstance(n, int):
  3. raise Exception("not a int type")
  4. else:
  5. print("good")
  6. test_raise(8.9)
  7. Exception Traceback (most recent call last)
  8. <ipython-input-95-27962090d274> in <module>
  9. ----> 1 test_raise(8.9)
  10. <ipython-input-94-b5b0a327e715> in test_raise(n)
  11. 1 def test_raise(n):
  12. 2 if not isinstance(n, int):
  13. ----> 3 raise Exception("not a int type")
  14. 4 else:
  15. 5 print("good")
  16. Exception: not a int type

10 简述断言

Python的断言就是检测一个条件,如果条件为真,它什么都不做;反之它触发一个带可选错误信息的AssertionError

  1. def testassert(n):
  2. assert n == 2, "n is not 2"
  3. print("n is 2")
  4. testassert(2)
  5. testassert(3)
  6. n is 2
  7. ---------------------------------------------------------------------------
  8. AssertionError Traceback (most recent call last)
  9. <ipython-input-96-2d6f74d4f8d1> in <module>
  10. 4
  11. 5 testassert(2)
  12. ----> 6 testassert(3)
  13. <ipython-input-96-2d6f74d4f8d1> in testassert(n)
  14. 1 def testassert(n):
  15. ----> 2 assert n == 2, "n is not 2"
  16. 3 print("n is 2")
  17. 4
  18. 5 testassert(2)
  19. AssertionError: n is not 2

11 什么是异步非阻塞?

同步异步指的是调用者与被调用者之间的关系

  • 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回,一旦调用返回,就得到了返回值。
  • 异步的概念和同步相对,调用在发处之后,这个调用就直接返回了,所以没有返回结果。 当该异步功能完成后,被调用者可以通过状态、通知或回调来通知调用者。

阻塞非阻塞是线程或进程之间的关系

  • 阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。调用线程只有在得到结果之后才会返回。函数只有在得到结果之后才会将阻塞的线程激活
  • 非阻塞和阻塞的概念相对应,非阻塞调用指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程

12 内存泄漏是什么?如何避免?

由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。
内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内
存的控制,因而造成了内存的浪费。导致程序运行速度减慢甚至系统崩溃等严重后果。
del () 函数的对象间的循环引用是导致内存泄漏的主凶。
不使用一个对象时使用 :del object 来删除一个对象的引用计数就可以有效防止内存泄漏问题。 通过 Python 扩展模块 gc 来查看不能回收的对象的详细信息。
可以通过 sys.getrefcount(obj) 来获取对象的引用计数,并根据返回值是否为 0 来判断是否内存
泄漏。

13 Python 函数调用的时候参数的传递方式是值传递还是引用传递?

Python 的参数传递有:位置参数、默认参数、可变参数、关键字参数。函数的传值到底是值传递还是引用传递,要分情况:
不可变参数用值传递
像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可 变对象
可变参数是引用传递的
比如像列表,字典这样的对象是通过引用传递、和 C 语言里面的用指针传递数组很相似,可变对象能在函数内部改变。

14 面向对象中super的作用?

super() 函数是用于调用父类 ( 超类 ) 的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序( MRO )、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表 , 其实也就是继承父类方法时的顺序表。
作用: 根据 mro 的顺序执行方法 ;主动执行 Base 类的方法

15 是否使用过functools中的函数?其作用是什么?

Python functools 模块用以为可调用对象( callable objects )定义高阶函数或操作。
简单地说,就是基于已有的函数定义新的函数。
所谓高阶函数,就是以函数作为输入参数,返回也是函数。

16 递归函数停止的条件?

递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是 return; 返回终止递归。
终止的条件:
(1) 判断递归的次数是否达到某一限定值
(2) 判断运算的结果是否达到某个范围等,根据设计的目的来选择

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/553887
推荐阅读
相关标签
  

闽ICP备14008679号