龙空技术网

Python面试考点、问题,python面试。怎么拿到office

可以叫我勺哥—掌勺 250

前言:

目前小伙伴们对“python生成pyc”大概比较关怀,我们都需要学习一些“python生成pyc”的相关知识。那么小编也在网摘上搜集了一些对于“python生成pyc””的相关内容,希望姐妹们能喜欢,大家一起来了解一下吧!

一、python基本功

1、简述Python的特点和优点Python是一门开源的解释性语言,相比JavaC++等语言,Python具有动态特性,非常灵活。

2、Python有哪些数据类型?Python有6种内置的数据类型,其中不可变数据类型是Number(数字),String(字符串),Tuple(元组),可变数据类型是List(列表),Dict(字典),Set(集合)。

3、列表和元组的区别列表和元组都是可迭代对象,能够对其进行循环、切片等,但元组tuple是不可变的。元组不可变的特性,使得它可以成为字典Dict中的键。

4、Python是如何运行的CPython:Python程序运行时,会先进行编译,将.py文件中的代码编译成字节码(bytecode),编译结果储存在内存的PyCodeObject中,然后由Python虚拟机解释运行。当程序运行结束后,Python解释器会将PyCodeObject保存到pyc文件中。每一次运行时Python都会先寻找与文件同名的pyc文件,如果pyc存在则比对修改记录,根据修改记录决定直接运行或再次编译后运行,最后生成pyc文件。

5、Python运行速度慢的原因a).Python不是强类型的语言,所以解释器运行时遇到变量以及数据类型转换、比较操作、引用变量时都需要检查其数据类型。b).Python的编译器启动速度比JAVA快,但几乎每次都要启动编译。c).Python的对象模型会导致访问内存效率变低。Numpy的指针指向缓存区数据的值,而Python的指针指向缓存对象,再通过缓存对象指向数据。

6、面对Python慢的问题,有什么解决办法a).可以使用其他的解释器,比如PyPy和Jython等。b).如果对性能要求较高且静态类型变量较多的应用程序,可以使用CPython。c).对于IO操作多的应用程序,Python提供asyncio模块提高异步能力。

7、描述一下全局解释器锁GIL每个线程在执行时候都需要先获取GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用CPU,也就是说多线程并不是真正意义上的同时执行。但是在IO操作时,是可以释放锁的(这也是Python能够异步的原因)。而且如果想要利用多核CPU,那么可以使用多进程。

8、is和==的区别is表示的是对象表示符(objectidentity),而==表示的是相等(equality)。is的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样,而==是用来检查两个对象是否相等。但是为了提高系统性能,对于较小的字符串Python会保留其值的一个副本,当创建新的字符串的时候直接指向该副本即可。如:

a = 8b = 8a is b

9、文件读写简述文件读取时read、readline、readlines的区别和作用他们的区别除了读取内容范围不同外,返回的内容类型也不同。read()会读取整个文件,将读取到底的文件内容放到一个字符串变量,返回str类型。readline()读取一行内容,放到一个字符串变量,返回str类型。readlines()读取文件所有内容,按行为单位放到一个列表中,返回list类型

10、请用一行代码实现请分别使用匿名函数和推导式这两种方式将[0,1,2,3,4,5]中的元素求乘积,并打印输出元组。

print(tuple(map(lambdax:x*x,[0,1,2,3,4,5])))print(tuple(i*iforiin[0,1,2,3,4,5]))

11、请用一行代码实现用reduce计算n的阶乘(n!=1×2×3×...×n)

print(reduce(lambdax,y:x*y,range(1,n)))

12、请用一行代码实现筛选并打印输出100以内能被3整除的数的集合

print(set(filter(lambdan:n%3==0,range(1,100))))

13、请用一行代码实现text='Obj{"Name":"pic","data":[{"name":"async","number":9,"price":"$3500"},{"name":"Wade","number":3,"price":"$5500"}],"Team":"Hot"'复制代码打印文本中的球员身价元组,如($3500,$5500)

print(tuple(i.get("price")foriinjson.loads(re.search(r'\[(.*)\]',text).group(0))))

14、请写出递归的基本骨架

defrecursions(n):ifn==1:#退出条件return1#继续递归returnn*recursions(n-1)

15、切片

请写出下方输出结果

tpl=[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95]print(tpl[3:])print(tpl[:3])print(tpl[::5])print(tpl[-3])print(tpl[3])print(tpl[::-5])print(tpl[:])deltpl[3:]print(tpl)print(tpl.pop())tpl.insert(3,3)print(tpl)
[15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95][0,5,10][0,25,50,75]8515[95,70,45,20][0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95][0,5,10]10[0,5,3]

16、文件路径打印输出当前文件所在目录路径

importosprint(os.path.dirname(os.path.abspath(__file__)))

打印输出当前文件路径

importosprint(os.path.abspath(__file__))

打印输出当前文件上两层文件目录路径

importosprint(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

17、请写出运行结果,并回答我的问题

tpl=(1,2,3,4,5)apl=(6,7,8,9)print(tpl.__add__(apl))

问题:tpl的值发生变化了吗?

运行结果如下:

(1,2,3,4,5,6,7,8,9)

答:元组是不可变的,它是生成新的对象

18、请写出运行结果,并回答问题

name=('James','Wade','Kobe')team=['A','B','C']tpl={name:team}print(tpl)apl={team:name}print(apl)

问题:这段代码能运行完毕吗?为什么?它的运行结果是?

答:这段代码不能完整运行,它会在apl处抛出异常,因为字典的键只能是不可变对象,而list是可变的,所以不能作为字典的键。

运行结果是:{('James','Wade','Kobe'):['A','B','C']}TypeError

19、装饰器

请写出装饰器代码骨架

deflog(func):defwrapper(*args,**kw):print('call%s():'%func.__name__)returnfunc(*args,**kw)returnwrapper

简述装饰器在Python中的作用:在不改动原函数代码的情况下,为其增加新的功能。

21、多进程多线程多进程更稳定还是多线程更稳定?为什么?

多进程更稳定,它们是独立运行的,不会因为一个崩溃而影响其他进程。

多线程的致命缺点是什么?

因为所有线程共享进程的内存,所以任何一个线程挂掉都可能直接造成整个进程崩溃。

进程间通信有哪些方式?

共享变量、队列、管道

这期就先讲到这里!下期掌勺继续更新!

标签: #python生成pyc