1.文件 *** 作时,readlines()和xreadlines()的区别?
readlines()是把文件的全部内容读到内存,并解析成一个list,当文件很大的时候,需要占用很多内存。
xreadlines()则是直接返回一个iter(file)迭代器,在Python2.3之后已经不再推荐使用这种表示方法了,直接使用for循环迭代文件对象。
2.列举布尔值为False的常见值?
0,[],(),{},'',False,None
3. is和==的区别?
is比较的是内存ID
== 比较的是值
🌟4.现有字典dict={'a':24, 'g':52, 'i':12, 'k':33}请按字典中的value值进行排序
sorted(d.items(), key=lambda x:x[1])
lambda函数解释:
示例:
g = lambda x: x+1 # 求 x+1 的和
结果:
>>> g(1)
2
>>> g(2)
3
lambda可以理解为这样一个函数:
def g(x):
return x+1
🌟5.请反转字符串“aStr”
print("aStr"[::-1])
🌟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)
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来引用列表的成员,将会导致IndexError.
9.写一个列表生成式,产生一个公差为11的等差数列
print([x*11 for x in range(10)])
10.给定两个列表,怎么找出他们相同的元素和不同的元素?
list1 = [1, 2, 3]
list2 = [3, 4, 5]
set1 = set(list1)
set2 = set(list2)
print(set1&set2)
print(set1^set2)
set()函数的作用是创建一个无序不重复元素集。创建完之后,可以进行关系测试,删除重复数据,还可以计算交集、并集、差集等。
11.请写出一段Python代码实现删除一个list里面的重复元素:
l1 = ['b', 'c', 'd', 'b', 'c', 'a', 'a']
l2 = list(set(l1))
12.列举字符串、列表、元组、字典每个常用的5个方法:
字符串:replace,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)反射机制是很多框架的基石。
🌟🌟14.简述Python的深浅拷贝?
copy():浅copy,浅拷贝指仅仅拷贝数据集合的第一层数据。
deepcopy():深copy,深拷贝指拷贝数据集合的所有层。
🌟15.Python垃圾回收机制?
垃圾回收机制是自动帮助我们管理内存,清理垃圾的一种工具。
1)引用计数
当一个对象的引用被创建或者复制时,对象的引用计数加1;
当一个对象的引用被销毁时,对象的引用计数减1;
当对象的引用计数减少为0时,就意味着对象已经没有被任何人使用了,可以将其所占用的内存释放了。
优点:
简单、直观
实时性,只要没有了引用就释放资源。
缺点:
维护引用计数需要消耗一定的资源
循环应用时,无法回收。也正是因为这个原因,才需要通过标记-清理和分代收集机制来辅助引用计数机制。
2)标记-清除
“标记-清除”不改动真实的引用计数,而是将集合中对象的引用计数复制一份副本,改动该对象引用的副本,对于副本做任何的改动,都不会影响到对象生命走起的维护。
3)分代回收
将系统中的所有内存块根据其存活时间划分为不同的集合,
每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。
也就是说,活动得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率,
那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,
如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。
16.如何打乱一个排好序的list对象alist
import random
random.shuffle(alist)
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中如何抛出、捕获、处理异常?
raise Exception 触发抛出异常
用try和except语句来捕获异常
处理异常的方法有:
try...except...else语句
finally子句
with语句
20.Python递归的最大层数?
最大数为998
21.列表推导式和生成器表达式[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))
22.什么是闭包?
闭包函数(closure function)指的是定义在一个函数内部的函数,被外层函数包裹着,其特点是可以访问到外层函数中的名字
def outer():
num = 1
def inner():
print(num) # 内层函数中不存在num但可以访问到外层的num
return inner
func = outer()
num = 1000
func() # 输出结果:1
23.请实现一个装饰器,限制该函数被调用的频率,如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()
24.谈谈你对闭包的理解?
闭包(closure)是函数式编程的重要语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。当一个内嵌函数引用其外部作用域的变量,我们就会得到一个闭包。总结一下,创建一个闭包必须满足以下几点:
(1)必须有一个内嵌函数。
(2)内嵌函数必须引用外部函数中的变量。
(3)外部函数的返回值必须是内嵌函数。
25.Python函数调用的时候参数的传递方式是值传递还是引用传递?
Python的参数传递有:位置参数、默认参数、可变参数、关键字参数。
函数的传值到底是值传递还是引用传递,要分情况:
不可变参数用值传递:
像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为无论如何都不可能在原处改变。
不可变对象
可变参数是引用传递的:
比如像列表,字典这样的对象是通过引用传递,和C语言里面的用指针传递数组很相似,可变对象能在函数内部改变。
26.递归函数停止的条件?
递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是return;返回终止递归。
终止的条件:
1.判断递归的次数是否达到某一限定值。
2.判断运算的结果是否达到某个范围等,根据设计的目的来选择。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)