python 面试题
列表(list)和元组(tuple)有什么区别
- 元组是不可变的。元组一旦创建,就不能对其进行更改。
- 列表表示的是顺序。它们是有序序列,通常是同一类型的对象。比如说按创建日期排序的所有用户名,如[“Seth”, “Ema”, “Eli”]。
- 元组表示的是结构。可以用来存储不同数据类型的元素。比如内存中的数据库记录,如(2, “Ema”, “2020–04–16”)(#id, 名称,创建日期)。
is”和“==”有什么区别?
- is”用来检查对象的标识(id),而“==”用来检查两个对象是否相等
- 例如:a = [1,2,3] b = a c = [1,2,3] 结果1:print(a == b)print(a == c)#=> True#=> True 结果2:print(a is b)print(a is c)#=> True#=> False
什么是装饰器(decorator)
- 装饰器允许通过将现有函数传递给装饰器,从而向现有函数添加一些额外的功能,该装饰器将执行现有函数的功能和添加的额外功能。
- 说明:编写装饰器函数logging。它接受一个函数func作为参数。它还定义了一个名为log_function_called的函数,它先执行打印出一些“函数func被调用”的信息(print(f’{func} called.’)),然后调用函数func。最后返回定义的函数。
- 例如:def logging(func): def log_function_called: print(f’{func} called.') func return log_function_called
- 结果:@loggingdef my_name: print(‘chris’)@loggingdef friends_name: print(‘naruto’)my_namefriends_name#=> <function my_name at 0x10fca5a60> called.#=> chris#=> <function friends_name at 0x10fca5f28> called.#=> naruto
Python中的实例方法、静态方法和类方法有什么区别?
- classmethod的第一个参数为类本身(cls),正如实例方法的第一个参数为对象本身(self);
- staticmethod第一个参数不需要传入cls或self,故staticmethod中是无法访问类和对象的数据的。
类中的“self”指的是什么?
- “self”引用类本身的实例。这就是我们赋予方法访问权限并且能够更新方法所属对象的能力
模块(module)和包(package)有什么区别?
- 模块是可以一起导入的文件(或文件集合)。例:import os
- 包是模块的目录。例:from sklearn import cross_validation ,包是模块,但并非所有模块都是包。
* args, * kwargs是什么含义?
- 当我们不确定要向函数传递多少个参数时,或者如果要将存储的参数列表或元组传递给函数时,可以使用* args。
- ** kwargs在我们不知道将多少个关键字参数传递给一个函数时使用,或者可用于将字典的值作为关键字参数传递