python面试题一

1.简述列举了解的编程语言及语言间的区别。
java、c、c++、csharp、go:编译型语言
python、php、js:解释型语言
编译型语言需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
强类型语言:
强类型语言,一旦一个变量被指定了某个数据类型,如果不经过强制类型转换,那么它就永远是这个数据类型。你不能把一个整形变量当成一个字符串来处理。
主要语言:Java、C#、Python、Object-C、Ruby
弱类型语言:
数据类型可以被忽略,一个变量可以赋不同数据类型的值。一旦给一个整型变量a赋一个字符串值,那么a就变成字符类型。
主要语言:JavaScript、PHP、C、C++(C和C++有争议,但是确实可以给一个字符变量赋整形值,可能初衷是强类型,形态上接近弱类型)
2.列举python2和python3的区别?
python2:源码不统一,源码重复,除法的时候返回的是整数(向下取整),python2中的input获取的就是数据本身,整型 长整型,range获取到的是一个列表
python3:源码统一、不重复,除法的时候返回的是小数(浮点数),python3中的input获取到内容都是字符串,全部都是整型,range是自己本身
python2 默认编码ascii 不支持中文
python3 默认编码unicode
python3 iter() iter() he next() next()都有
python2 没有__next__() 其他都要,好像
3.看代码写结果
v1 = 1 or 2
v2 = 3 and 7 or 9 and 0
2
9
4.比较以下值有什么不同?
v1 = [1,2,3] 列表
v2 = [(1),(2),(3)]列表
v3 = [(1,),(2,),(3,)]列表里是元组
5.用一行代码实现数值交换。
a = 1
b = 2
a,b=b,a
6.Python中单引号、双引号、三引号的区别?
python单引号 双引号 三引号都是字符串且可以进行转义,唯一的差别就是三引号可以显示多行。
7.is和==的区别?
is 是指该值的变量都指向同一个内存,即id是否相同
== 是判断数值算法相同
8.python里如何实现tuple和list的转化?
lis=[1,2,3,4,5,6]
x=tuple(lis)
print(type(x),x)
tup=(1,2,3,4,5,6)
y=list(tup)
print(type(y),y)
9.如何实现字符串 name='老男孩'的反转?
print(name[::-1])
10.两个set如何获取交集、并集、差集?
set3 = set1&set2
set3 = set1|set2
set3 = set1-set2
11.那些情况下, y != x - (x-y)会成立?
x,y是两个不相等的非空集合
12.Python中如何拷贝一个对象?
赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}
深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}
13.简述 赋值、浅拷贝、深拷贝的区别?
14.pass的作用?
pass是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句。
15.阅读代码写结果。
import copy
a = [1,2,4,5,['b','c']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('d')
print(b)
print(c)
16.用Python实现9 * 9 乘法表。
l=1
i=0
while l<10:
i=1
while i<=l:
if i==l:
print(i,'',l,'=',li)
else:
print(i,'',l,'=',li,end=' ')

    i += 1
l += 1

print(a)
17.用Python显示一个斐波那契数列。
a,b = 0, 1
while b<100:
print (b),
a, b = b, a+b
18.如何删除列表中重复的值?
转为集合
19.一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?
20.a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?
a是字典
21.lambda关键字的作用?
lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
22.*arg**kwarg`作用?
动态位置参数
动态关键字参数
23.如何在函数中设置一个全局变量 ?
global x
24.filter、map、reduce的作用?
map 作用是生成一个新数组,遍历原数组,将每个元素拿出来做一些变换然后放入到新的数组中。
filter 的作用也是生成一个新数组,在遍历数组的时候将返回值为 true 的元素放入新数组,我们可以利用这个函数删除一些不需要的元素
25.什么是匿名函数?匿名函数有什么作用?
没有名字的函数就是匿名函数
可以通过 use 关键字获取上下文中的环境变量,减少不必要参数的传入或导出。减少不必要的函数暴露,提高代码的可读性
如果使用匿名函数,该函数仅仅会在被调用处使用,其他地方不会引用到。如果不使用匿名函数,该函数可以在其他地方被引用。从可读性上讲,没有匿名函数可读性高。
26.Python递归的最大层数?
998
27.什么是迭代器?什么是可迭代对象?
只要具有iter()方法就是一个可迭代对象
具有iter()和next()两个方法就是迭代器
28.什么是生成器?
函数体中出现yield代表要声明一个生成器
29.什么是装饰器及应用场景?
装饰器本质上是⼀个python函数,它可以在让其他函数在不需要做任何代码的变动的前提下增加额外的功能;
装饰器的返回值也是⼀个函数的对象,它经常用于有切面需求的场景,实现路由传参,flask的路由传参依赖于装饰器,浏览器通过url访问到装饰器的路由,从而访问视图函数获得返回的HTML页面;
30.什么是反射及应用场景?
31.写一个普通的装饰器。
def warpper(f):
def inner(*args,**kwargs):
print("被装饰函数执行前")
ret = f(*args,**kwargs)
print("被装饰函数执行后")
return ret
return inner
@warpper
def func(*args,**kwargs):
print(f"被装饰的{args,kwargs}")
return "我是func函数"
@warpper
def index(*args,**kwargs):
print(11111)

print(func(1,2,3,4,5,6,7,8,a=1))
32.写一个带参数的装饰器。
def auth(argv):
def wrapper(func):
def inner(*args,**kwargs):
if argv:
print("我加上功能了!")
func(*args,**kwargs)
else:
func(*args,**kwargs)
return inner
return wrapper

@auth("guobaoyuan")
def foo():
print("这是一个点燃")
foo()
33.求结果
def num():
return [lambda x:i*x for i in range(4)]
print([m(2) for m in num()])
34.def(a, b=[])这种写法有什么陷阱?
函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储,所以三次执行的结果就是 [1, 1, 1] ,想每次执行只输出[1] ,默认参数应该设置为None。

35.def func(a,b=[]):
b.append(a)
return b
v1 = func(1)
v2 = func(2,[10,20])
v3 = func(3)
print(v1,v2,v3)
[1],[2],[3]

36.def func(a,b=[]):
b.append(a)
return b

v1 = func(1)
print(v1)
[1]
v2 = func(2,[10,20])
print(v2)
[1,10,20,2]
v3 = func(3)
print(v3)
[1,10,20,2,3]
37.如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100

再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?

38.请查找一个目录下的所有文件(可能存在文件嵌套)。

  1. 求结果
import math
print (math.floor(5.5))

-6.0

  1. 是否使用过functools中的函数?其作用是什么?
    functools用于高阶函数:指那些作用于函数或者返回其他函数的函数。通常情况下,只要是可以被当做函数调用的对象就是这个模块的目标。
  2. re的match和search区别?
    match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配;
    也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none。
  3. 用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
    贪婪匹配
    非贪婪匹配
  4. 如何生成一个随机数?
    print(random.randint(1,50))
    选择1-50之间随机的整数
    print(random.random())
    0-1 之间随机小数,不包含1
    print(random.uniform(1,10))
    1- 10 之间随机小数,不包含10
  5. super的作用?
    使用super()可以在子类中调用父类的方法或属性
  6. 双下划线和单下划线的区别?
    单下划线是约定好的私有属性和方法
    双下划线是真正的私有属性和方法,除了自己其他人都看不了
  7. @staticmethod和@classmethod的区别?
    静态方法类似普通方法,参数里面不用self。这些方法和类相关,但是又不需要类和实例中的任何信息、属性等等。如果把这些方法写到类外面,这样就把和类相关的代码分散到类外,
    使得之后对于代码的理解和维护都是巨大的障碍。而静态方法就是用来解决这一类问题的。
    当我们需要和类直接进行交互,而不需要和实例进行交互时,类方法是最好的选择。类方法与实例方法类似,但是传递的不是类的实例,而是类本身,第一个参数是cls。我们可以用类的实例调用类方法,也可以直接用类名来调用。
  8. 实现一个单例模式(加锁)。
    import threading
    import time
    class Singleton:
    instance = None
    lock = threading.Rlock()
    def init(self,name):
    self.name = name
    def new(cls,*args,**kwargs):
    if cls.instance:
    return cls.instance
    with cls.lock:
    if cls.instance:
    return cls.instance
    time.sleep(1)
    cls.instance = onject.__new__(cls)
    return cls.instance
    def task():
    obj = Singleton("x")
    print(obj)
    for i in range(10):
    t = threading.Thread(target=task)
    t.start()
    data = Singleton("dsadasd")
    print(data)
  9. 栈和队列的区别?
    栈就像一个箱子,后放上去的,可以先出来
    队列是先进先出,有出口和入口,先进去可以先出来。
  10. 以下代码输出是什么? 请给出答案并解释。

    class Parent(object):
        x = 1
    
    class Child1(Parent):
        pass
    
    class Child2(Parent):
        pass
    print Parent.x, Child1.x, Child2.x
    
    Child1.x = 2
    print Parent.x, Child1.x, Child2.x
    
    Parent.x = 3
    print Parent.x, Child1.x, Child2.x
    1,1,1
    1,2,1
    3,3,3
  11. 参考下面代码片段

    class Context:
        pass
    
    with Content() as ctx:
        ctx.do_something()
    请在Context类下添加代码完成该类的实现

猜你喜欢

转载自www.cnblogs.com/123456789a/p/12366137.html