python面试题问答题
1.对比
*args **kwargs 的区别
__new__ __init__ 的区别
is == 的区别
range xrange 的区别
答案:
(1)*args 表示非关键字收集参数,收集的实参会组成一个元组,接收没有任何形参接收的非关键字实参。可以与普通形参共存。
**kwargs 表示关键字收集参数,收集的实参会组成一个字典,形参名作为键,值为值,仅接收没有任何形参接收的关键字参数。可以与普通形参共存。
并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前。
(2)_init_: 当实例对象创建完成后被调用的,初始化对象时触发,参数至少一个self,接收对象。使用该方式初始化的成员都是直接写入对象当中,类中无法具有。
_new_:是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。参数至少一个cls,接收当前类。必须返回一个对象是实例,触发顺序:先触发__new__才会触发_init_。也就是,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。
(3)is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。
is: 同一性运算符 这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。
==:是python标准操作符中的比较操作符,表示判断两个值的数据类型,数据值,是否一致。
(4)range :range会直接生成一个list对象
xrange:并不会直接生成一个list对象,会在每一个调用时返回其中的一个值。
在 python3 中,去除了 range 函数,将 xrange 函数更名为 range 函数
2.常用的版本控制工具及其常用命令
答案:
版本控制工具:git
常用命令:
* git add .
* git status
* git commit 提交至本地仓库
* git origin
* git push
3.装饰器用途:@staticmethod 和@classmethod,@property用途
答案:
@classmethod:类方法,类方法是给类用的,类在使用时会将类本身当做参数传给类方法的第一个参数,python为我们内置了函数classmethod来把类中的函数定义成类方法。
@staticmethod:静态方法
@property:属性方法:将一个类方法转变成一个类属性,只读属性。便于访问
4.怎么样的二级容器不能强转成字典
答案:
不等长的二级容器不能转化成字典
5.写尽可能多的str对象的方法?
1、全部大写:str.upper()
str1 = 'nostalgia'
str2 = str1.upper()
print(str2)
NOSTALGIA
2、全部小写:str.lower()
str1 = 'NOSTALGIA'
str2 = str1.lower()
print(str2)
nostalgia
3、大小写互换:str.swapcase
str1 = 'No Smouking'
str2 = str1.swapcase()
print(str2)
nO sMOUKING
4、首字母大写,其余小写:str.capitalize()
str1 = 'nostalgia fly'
str2 = str1.capitalize()
print(str2)
Nostalgia fly
5、首字母大写:str.title()
str1 = 'nostalgia fly'
str2 = str1.title()
print(str2)
Nostalgia Fly
6、应对所有字母的小写:str.casefold()
#str.lower() 只能转换ASCII字母。
str1 = 'NOSTALGIA'
str2 = str1.casefold()
print(str2)
nostalgia
6.什么是lamada函数?下面这段代码输出的是什么?
nums = range(2,20)
for i in nums:
nums = filter(lambda x:x==i or x % i,nums)
nums
<filter at 0x493c898>
print(list(nums))
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。lambda表达式是一种简洁格式的函数。该表达式不是正常的函数结构,而是属于表达式的类型。
定义lambda函数的形式如下(lambda参数:表达式)lambda函数默认返回表达式的值。你也可以将其赋值给一个变量。
lambda函数可以接受任意个参数,包括可选参数,但是表达式只有一个。
7.python里面如何拷贝一个对象?(赋值、浅拷贝、深拷贝的区别)
答案:
赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}
深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}
8.介绍一下except的用法和作用?
Python的except用来捕获所有异常, 因为Python里面的每次错误都会抛出 一个异常,所以每个程序的错误都被当作一个运行时错误。
一、下面是使用except的一个例子:
try:
foo = opne(̶file”) #open被错写为opne
except:
sys.exit(̶could not open file!”)
因为这个错误是由于open被拼写成opne而造成的,然后被except捕获,所以debug程序的时候很容易不知道出了什么问题
二、下面这个例子更好点:
try:
foo = opne(̶file”) # 这时候except只捕获IOError
except IOError:
sys.exit(̶could not open file”)
9.python中pass语句的作用是什么?
pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作,比如:
while False:
pass
pass通常用来创建一个最简单的类:
class MyEmptyClass:
pass
10.如何用python来进行查询和替换一个文本字符串?
可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, string[, count=0])
- replacement是被替换成的文本
- string是需要被替换的文本
- count是一个可选参数,指最大被替换的数量
import re
p = re.compile('blue|white|red')
print(p.sub('color','blue socks and red shose'))
print(p.sub('color','blue socks and red shose',count=1))
color socks and color shose
color socks and red shose
11.python里面如何生成随机数
在 Python 中用于生成随机数的模块是 random,在使用前需要 import. 如下例子可以酌情列举:
- random.random():生成一个 0-1 之间的随机浮点数;
- random.uniform(a, b):生成[a,b]之间的浮点数;
- random.randint(a, b):生成[a,b]之间的整数;
- random.randrange(a, b, step):在指定的集合[a,b)中,以 step 为基数随机取一个数;
- random.choice(sequence):从特定序列中随机取一个元素,这里的序列可以是字符串,列表,元组等。
import random
print(random.random())
print(random.uniform(1,10))
print(random