程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

python面试题

发布于2019-08-03 08:23     阅读(4159)     评论(0)     点赞(4)     收藏(4)


1到底什么是Python?你可以在回答中与其他技术进行对比(了解).

答案

 

下面是一些关键点:

 

Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。

Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似x=111和x="I'm a string"这样的代码,程序不会报错。

Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class)。Python中没有访问说明符(access specifier,类似C++中的public和private),这么设计的依据是“大家都是成年人了”。

Python语言中,函数是第一类对象(first-class objects)。这指的是它们可以被指定给变量,函数既能返回函数类型,也可以接受函数作为输入。类(class)也是第一类对象。

Python代码编写快,但是运行速度比编译语言通常要慢。好在Python允许加入基于C语言编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的。numpy就是一个很好地例子,它的运行速度真的非常快,因为很多算术运算其实并不是通过Python实现的。

Python用途非常广泛——网络应用,自动化,科学建模,大数据应用,等等。它也常被用作“胶水语言”,帮助其他语言和组件改善运行状况。

Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节

 

2 阅读下面的代码,写出A0A1An的最终值。

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))

A1 = range(10)

A2 = [i for i in A1 if i in A0]

A3 = [A0[s] for s in A0]

A4 = [i for i in A1 if i in A3]

A5 = {i:i*i for i in A1}

A6 = [[i,i*i] for i in A1]

答案

 

A0 = {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}

A1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

A2 = []

A3 = [1, 3, 2, 5, 4]

A4 = [1, 2, 3, 4, 5]

A5 = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

A6 = [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]

3 这两个参数是什么意思:*args**kwargs?我们为什么要使用它们?

答案

如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args

 

如果我们不知道要往函数中传入多少个关键词参数,或者想传入字典的值作为关键词参数时,那就要使用**kwargs。

 

args和kwargs这两个标识符是约定俗成的用法,你当然还可以用*bob和**billy,但是这样就并不太妥。

 

 

4 简要描述Python的垃圾回收机制(garbage collection)。(重点)

答案

 

这里能说的很多。你应该提到下面几个主要的点:

 

Python在内存中存储了每个对象的引用计数(reference count)。如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用作他用。

偶尔也会出现引用循环(reference cycle)。垃圾回收器会定时寻找这个循环,并将其回收。举个例子,假设有两个对象o1和o2,而且符合o1.x == o2和o2.x == o1这两个条件。如果o1和o2没有其他代码引用,那么它们就不应该继续存在。但它们的引用计数都是1。

Python中使用了某些启发式算法(heuristics)来加速垃圾回收。例如,越晚创建的对象更有可能被回收。对象被创建之后,垃圾回收器会分配它们所属的代(generation)。每个对象都会被分配一个代,而被分配更年轻代的对象是优先被处理的。

 

 

1.什么是lambda函数?

匿名函数:没有名字函数就是匿名函数

格式:

lambda [变量名1],[变量名n...] : 表达式

print((lambda x: x ** 3)(2))
print((lambda x,y,z: x + y + z)(1, 2, 3))
print((lambda x,y=10: x * y)(5))

 

好处:

如果函数体涉及的业务逻辑并不复杂(代码量不大),我们书写匿名函数代码更加简洁;

节省内存,提高运行效率

弊端:

虽然代码简洁了,但是对于整个功能的阅读性相对变差

不能实现复杂功能的定义,在表达式这部分不能同时定义多个函数的调用执行

何时去定义匿名函数使用:

如果某个功能不会被多次执行,仅仅是执行很少的次数;

那么将此功能定义称为匿名函数更加的节省内存资源,提高程序的运行效率

 

2. Python里面search()match()的区别?

match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none

例如:print(re.match(’super’, ’superstition’).span())会返回(0, 5)

print(re.match(’super’, ‘insuperable’))则返回None

search()会扫描整个字符串并返回第一个成功的匹配

例如:print(re.search(’super’, ’superstition’).span())返回(0, 5)

print(re.search(’super’, ‘insuperable’).span())返回(2, 7)

3. 介绍一下except的用法和作用?

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

一下是使用except的一个例子:

try:foo = opne(”file”) #open被错写为opneexcept:sys.exit(”could not open file!”)

因为这个错误是由于open被拼写成opne而造成的,然后被except捕获,所以debug程序的时候很容易不知道出了什么问题

下面这个例子更好点:

try:foo = opne(”file”) # 这时候except只捕获IOErrorexcept IOError:sys.exit(”could not open file”)

4. 谈谈__init____str__的作用?

构造函数的作用:
1).创建对象
2).在创建对象的同时为属性赋值

注意事项:
1).一个类中如果没有显示的定义构造函数,那么编译器会默认添加一个空参数的构造函数
2).如果一个类中已经显示的定义了构造函数,那么编译器就不会在默认添加空参构造了
3).函数和函数之间如果名字相同,下面定义的会将上面定义的函数覆盖掉,反应:python语言没有函数重载这一说

__str__函数的使用:

由于创建了对象并且为对象属性赋值,但是我们直接打印对象名在控制台看到的是对象的完整信息,不理想(不是我们想要的)
而我们想要看到的是对象中属性的内容,所以我们需要重写object类中的__str__函数;
在打印对象的时候就会根据我们自己对于__str__函数体的设计来进行属性值的回馈

 

5. 将列表生成式中[]改成() 之后数据结构是否改变?

答案:是,从列表变为生成器

 

 

 

 

 

1.作为解释型语言,Python如何运行?(1分)

Python是一种解释型语言。Python程序直接从源代码运行,将程序员编写的源代码转换成中间语言,再将中间语言翻译成必须执行的机器语言。

2.解释如何在Unix上创建一个Python脚本可执行文件?(4分)

要在Unix上创建Python脚本可执行文件需要做两件事情:

Script文件的模式必须是可执行的 

第一行必须以#(#!/ usr / local / bin / python)开头

3.怎样才能跨模块共享全局变量?(3分)

要在单个程序的模块之间共享全局变量,请创建一个配置模块。在应用程序的所有模块中导入配置模块,该模块将作为跨模块的全局变量提供。

4.解释如何访问用C语言编写的Python模块?(3分)

你可以通过下面的方法访问一个用C写成的模块,

Module = = PyImport_ImportModule(“<modulename>”);

 

5.提到使用Python的五个好处?(2分)

  • Python包含了大多数互联网平台(如电子邮件,HTML等)的巨大标准库。
  • Python不需要显式的内存管理,因为解释器本身将内存分配给新变量并自动释放它们
  • 由于使用方括号而提供易读性
  • 易于初学者学习
  • 具有内置的数据类型,可以节省编程时间和工作量,从而声明变量。

 

7.Python垃圾回收机制(3分)

Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)

以空间换时间的方法提高垃圾回收效率(我觉得这句话写的比较好)。

 



所属网站分类: 技术文章 > 博客

作者:lg

链接:https://www.pythonheidong.com/blog/article/3769/49febde9e24b5d028816/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)