python实习生基础面试题_常见的Python基本面试问题,python,基础,面试题

常见 python 基础面试题

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

readlines()是把文件的全部内容读取到内存,并解析一个list,当文件的体积很大的时候,需要占用很多内容。

xreadlines()则直接返回一个iter(file)迭代器,在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

2,format

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、付费专栏及课程。

余额充值