常见 python 基础面试题

常见 python 基础面试题

1,文件操作时:xreadlines和readlines的区别?

readlines()是把文件的全部内容读取到内存,并解析一个list,当文件的体积很大的时候,需要占用很多内容。
xreadlines()则直接返回一个iterfile)迭代器,在python2.3之后已经不推荐这种表示方法了,直接使用for循环迭代文件对象

***2,列举布尔值为False的常见值?
用type打印下

0,[],(),'',False,None

***3,is 和 == 的区别?

is 比较的是id
== 比较的是值

***4,现有字典 dict={‘a’:24, ‘g’:52, ‘i’:12, ‘k’:33}请安字典中的value值进行排序?

sorted(dict.items().key = lambda x:x[1])
案例:
dict = {"a": 24, "g": 52, "i": 12, "k": 33}

In [2]: sorted(dict.items(),key=lambda x:x[1])
Out[2]: [('i', 12), ('a', 24), ('k', 33), ('g', 52)]

5,请反转字符串“aStr”?

print("aStr[::-1]")
案例:
s = 'hello'
s[::-1]
'olleh'

6,请按list1中元素的age由大到小排序

list1 = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]

sorted(list1,key=lambda x:x['age'],reverse=True)

reverse=True --- 代表从大到小

7,常见的字符串格式化哪几种?

name = '张三'
1,占位符
s1 =%s DSB 你好”%name
2format
s2 = '{} DSB 你好'.format(name)
3, f-string (python3.6之后有的特性)
s3 = f'{name} DSB 你好'

8, 下面代码的输出结果将是什么?

list = ['a','b','c','d','e']
print(list[10:])
'''
下面的代码将输出[],不会产生IndexError错误,就像所期望的那样,
尝试用超出成员的个数的index 来获取某个列表的成员。例如,
尝试获取list[10]和之后的成员,会导致IndexError.

***9,写一个列表生成式,产生一个公差为11的等差数列

1. print([x*11 for x in range(10)])

10,给定两个列表,怎么找出他们相同的元素和不同的元素?

1, list1 = [1,2,3]
2, list2 = [3,4,5]
3, set1 = set(list1)
4, set2 = set(list2)
5, print(set1&set2)
6, print(set1^set2)

11, 请写出一段python代码实现删除一个list里面的重复元素?
---------比较容易记忆的是用内置的set:
set 是天然去重的

1, l1 = ['b','c','d','b','c','a']
2, l2 = list(set(l1))

***12,列举字符串,列表,元组,字典每个常用的5个方法?

字符串:repleace(替换),strip(把他的空格去掉),split(分割),reverse(翻转),
       upper(变大写),lower(变小写),join(把一个列表变成一个字符串).....

列表:append,pop,insert,remove,sort,count,index.....

元组:index,count,len()dir()

字典:get,keys,values,pop,popitems,clear,update,items.....

13,什么是反射? 以及应用场景?

在绝大多数语言当中都有反射机试的存在,可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),python中一切皆对
1,反射机制是很多框架的基石。
2

***14,简述Python的深浅拷贝?

copy() :浅copy,浅拷贝指仅仅拷贝数据集合的第一层数据

deepcopy():深copy,深拷贝指拷贝数据集合的所有层

***15,Python 垃圾回收机制?

垃圾回收机制是自动帮助我们管理内存,清理垃圾的一种工具
1,引用计数
当一个对象的引用被创建或者复制时,对象的引用计数加1;
当一个对象的引用被销毁时,对象的引用计数减1;
当对象的引用计数减少为0时,就意味着对象已经没有被任何人使用了,可以将其所占用的内存释放了。

优点:
简单,直观
实时性,只要没有了引用就释放资源。

缺点:
维护引用计数需要消耗一定的资源
循环应用时,无法回收。也正是因为这个原因,才需要通过标记-清理和分代手机机制来辅助引用计数机制。

2,标记-清除
“标记-清除”不改动真实的引用计数,而是将集合中对象的
引用计数复制一份副本,改动连对象引用的副本,对于副本做任何的改动,都不会影响到对象生命走起的维护。

3,分代回收
将系统中的所有内存根据其存活时间划分不同的集合,
每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小,
也就是说,活的越长的对象,就越不可能是垃圾,就应该减少对他的垃圾收集频率。
那么如何来衡量这个存活时间,通过是利用几次垃圾收集动作来衡量。
如果一个对象经过的垃圾收集次数越多,可以得出、该对象存活时间越长。

16,如何打乱一个拍好序的 list 对象 alist

import random
random.shuffle(slist)

17, 从0-99这个100个数中随机取出10个,要求不能重复,可以自己设计数据结构

print([x * x for x in range(1,11)])

18,介绍一下try except的用啊和作用?

Python的except用来捕获所有异常,因为Python里面的每次错误都会抛出一个异常,
所以每个程序的错误都被当做一个运行时错误。

try:
	pass
except BaseException as e:
	print(e)
finally:
	pass

19,Python 递归的最大层数?
*** 答案

	最大数为998

20,列表推导式和生成器表达式 [i % 2 for i in range(10)] 和 (i % 2 for i in range(10)) 输出结果分别是什么?

	print([i % 2 for i in range(10)])
	print([i % 2 for i in range(10)])

***21,什么是闭包?

   闭包函数(closure function)指的是定义在一个函数内部的函数,被外层函数包裹着,
其特点是可以访问到外层函数中的名字,如下 inner 函数

def outer():
	num = 1
	def inner():
		print(num) # 内层函数中不存在num 但可以访问到外层的num
	return inner # 基于函数对象的概念我们可以将内层函数返回到外界使用,从而打破函数调用的层级限制,
func = outer() 
num = 1000
func() # 输出结果:1

22,请实现一个装饰器,限制该函数被调用的频率,如10秒一次

# 答案
import time
def time_pay(func):
	
	def inner(*args,**kwargs):
		for line in range(10):
			print(line + 1)
			time.sleep(1)
			
		res = func(*args,**kwargs)

		return res

	return inner

@time_pay
def func1():
	print('from func1...')
	
func1()	

23,对闭包的理解。

闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结构,他同样提高了代码的可重复使用性。
当一个内嵌函数引用其外部作用域的变量,我们就会得到一个碧波啊,总结一下,创建一个闭包必须满足一下几点:

 1. 必须有一个内嵌函数
 2. 内嵌函数必须引用外部函数中的变量
 3. 外部函数的返回值必须是内嵌函数
	

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

Python的参数传递有:位置参数,默认参数,可变参数,关键字参数。
函数的传值到底是值传递还是引用传递,要分情况:

不可变参数用值传递:
   像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变

不可变对象
   可变参数是引用传递的:
   比如像列表,字典这样的对象是通过引用传递,和c语言里面的用指针传递数组很相似,
   可变对象能在函数内部改变。

25,递归函数停止的条件?

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

2,判断运算的结果是否达到某个范围等,根据设计的目的来选择

26,mro 是什么?

mro全称:Method Resolution Order. 指的是方法解析顺序。

方法调用时就需要对当前类和基类预见性搜索以确定所在的位置。而搜索的顺序就是所谓的【方法解析顺序】

***27,Python 里面的上下文你知道吗?----就是with

自己实现的话需要两个方法,__enter__() 和 __exit__() 这两个方法。

***28,实现一个Singleton单例类,

1, __new__
class Borg(object):
	def __new__(cls, *args, **kwargs):
		if not hasattr(cls,'_instance'):
			ob = super(Borg, cls)
			cls._instance = ob.__new__(cls, *args, **kwargs)
		return cls._instance
class MyClass(Borg):
	def __init__(self):
		self.a = 1

29,正则表达式的一个邮箱合法

import re
if re.match(r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$',email):
	print('right')
else:
	print('wrong')
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值