python基础
python面试重点(基础篇)
第一部分 必答题(每题两分)
1、简述列举了解得编程语言及语言间的区别?
Java、C、C++、VB、PYTHON、Go、PHP。
编程语言主要分为编译型和解释型。编译型语言是将源代码编译成机械码,之后才能执行语言。解释型不需要编译,直接逐行翻译就行。
2、列举PYTHON2和PYTHON3的区别?
Print:Python3中print是一个函数,必须用括号括起来;Python2中print为class
Input:Python中input得到的维str类型;Python2中的input得到的维int类型。
整除:Python3中/表示真除,%表示取余,//表示地板除(结果取整);Python2中/表示根据除数被除数小数点位得到结果,//同样表示地板除
3、看代码写结果
V1=1 or 2
V2=3 and 7 or 9 and 0
True
False
4、比较下值有什么不同?
v1=[1,2,3]
V2=[(1),(2),(3)]
V3=[(1,),(2,),(3,)]
V1中是一个列表。V2中列表中套元组。V3中是列表中套数组
5、用一行代码实现数值交换
a=1
b=2
a、b=b、a
6、Python中单引号、双引号、三引号的区别?
单引号代表str类型,双引号代表单行注释,三引号代表多行注释。
7、is和==的区别?
==比较判断两个对象的值是否相同,is判断id是否相同。
8、python里如何实现tuple和list的转换?
Tuple(list)
List(tuple)
9、如何实现字符串name=’老男孩’的反转?
Reverse(name)
10、两个set如何获取交集、并集、差集?
11、那些情况下,y!=x-(x-y)会成立?
- python中如何拷贝一个对象?
Deep
- 简述赋值、浅拷贝、深拷贝的区别?
赋值可以随便进行变动。浅拷贝的拷贝内容变动原内容也会进行变动。深拷贝是另一个内容有可能不会变动
- 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)
print(a)
[1,2,3,4,[‘b’,’c’,’d’],5]
[1,2,3,4,[‘b’,’c’,’d’]]
[1,2,3,4,[‘b’,’c’,’d’],5]
- 用python实现9*9乘法表
l=1
i=0
while l<10:
i=1
while i<=l:
if i==l:
print(i,'*',l,'=',l*i)
else:
print(i,'*',l,'=',l*i,end=' ')
i += 1
l += 1
- 用Python显示一个斐波那契数列
def fibonnacii(n):
i,num1,num2=0,1,1
while i<n:
yield num1
num1,num2=num2,num1+num2
I=i+1
- 如何删除列表中重复的值?
List(set(list1))
- 一个大小为100G的文件etl_log.txt,要读取文件中的内容,写出具体过程代码?
with open(“etl_log.txt”,’r’,encoding=’utf-8’) as f:
for line in f:
print(line,end=’’)
- a=dict(zip((“a”,”b”,”c”,”d”,”e”),(1,2,3,4,5)))请问a是什么?
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
- lambda关键字的作用?
可以省去命名一个函数的名称。
- *arg和**kwarg作用?
- 用来接收不确定个数的参数,*args通常用来接收不确定个数的非关键字参数,而**kwargs通常用来接收不确定个数的关键字参数
- 如何在函数中设置一个全局变量?
在函数中使用global关键字定义变量
- filter、map、reduce的作用?
Filter相当于顾虑器的作用。Map第一个参数维函数,依次将后面的参数传给第一个函数,并执行函数。如果有多个参数则,依次将后面的对应传给参数。Reduce开始的时候可迭代对象的第一个数和第一个数当成x和y。然后将第一次函数的执行结果当成x,然后再传入第一个数当成y,再执行函数。
- 什么是匿名函数?匿名函数有什么作用?
匿名函数就是没有命名的函数。减少了不必要的参数的传入或导入。
- python递归 的最大层数?
1000
- 什么是迭代器?什么是可迭代对象?
有__iter__()方法的就是迭代器。有__iter__()和next()方法就是可迭代对象。
- 什么是生成器?
生成器是迭代器的一种,一个函数调用时返回一个迭代器,这个函数就叫生成器。通畅电邮yiled。
- 什么是装饰器及应用场景?
装饰器是一个以函数作为参数,并放回一个替换函数的课执行函数,是闭包的一种应用
- 什么是反射及应用场景?
凡是就是通过字符串的形式,导入模块。当我们动态的输入一个模块名的时候就可以使用到反射。
- 写一个普通的装饰器。
def debug(func):
def wrapper():
print("[debug]:enter {} ()".format(func))
return func()
return wrapper
@debug
def say_hello():
print('hello')
say_hello()
- 写一个带参数的装饰器。
class logger(object):
def __init__(self, level='INFO'):
self.level = level
def __call__(self, func):
def wrapper(*args, **kwargs):
print("[{level}]: the function {func}() is running...".format(level=self.level, func=func.__name__))
func(*args, **kwargs)
return wrapper
@logger(level="WARNING")def say(something):
print("say {}!".format(something))
say("hello")
33. 求结果
def num():
return [lambda x:i*x for i in range(4)]
print([m(2) for m in num()])
- def(a, b=[])这种写法有什么陷阱?
b可能接受到时一个值,但是如果直接给b赋值的话,不使用b之前存储在接受的函数的值。
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,3]
[10,20,2]
[1,3]
36. 看代码写结果
def func(a,b=[]):
b.append(a)
return b
v1 = func(1)
print(v1)
v2 = func(2,[10,20])
print(v2)
v3 = func(3)
print(v3)
[1]
[10,20,2]
[1,3]
37.请写出一个函数实现Ip地址转换成一个整数
如10.3.9.12转换规则
10 00001010
3 00000011
9 00001001
12 00001100
再将以上的二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = Ҙ?
import socket, struct
def ip_to_long(ip):
"""
Convert an IP string to long
"""
packedIP = socket.inet_aton(ip)
return struct.unpack("!L", packedIP)[0]
38. 请查找一个目录下的所有文件(可能存在文件嵌套)
39. 求结果
import math
print (math.floor(5.5))
6
- 是否使用过functools中的函数?具体作用是什么?
在装饰器中用过,如果不使用wraps,则原始函数的__name__和__doc__的值就会丢失
- re的match和search区别?
match()函数是在string的开始位置匹配,如果不匹配,则返回None
search()会扫描整个string查找匹配;也就是说match()只有在0位置匹配成功的话才有返回,
42. 用python匹配HTMLtag的时候,<,>和<.?>有什么区别?
43. 如何生成一个随机数?
Range()
- super的作用?
当子类中的方法与父类中的方法重名时,子类中的方法会覆盖父类中的方法,那么,如果我们想实现同时调用父类和子类中的同名方法,就需要使用到super()这个函数,用法为super().函数名()
- 双下划线和单线划线的区别?
"单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
"双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
- @staticmethod和@classmethod的区别?
类方法:使用装饰器@classmethod。第一个参数为当前类的对象,通常为cls。实例对象和类对象都可以调用类方法。
静态方法:使用装饰器@staticmethod。没有self和cls参数。方法体中不能使用类或者实例的任何属性和方法。实例对象和类对象都可以调用。
47. 实现一个店里模式(加锁)
48. 栈和队列的区别?
49.一下代码输出是什么?请给出 答案并解释。
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
50参考下年代码片段
class Context:
pass
with Content() as ctx:
ctx.do_something()
请在context类下添加代码完成类的实现
第二部分 可选题
1. 如何获取列表中第二大的值?
2.简述python内存管理机制。
python采用的是引用计数机制为主,标记-清除和分代收集两种机制为辅的策略
3. 简述python的垃圾回收机制。
4.请用两个队列来实现一个栈。
5. 请用python实现一个链表
6.请用python实现链表的逆转