python模块是一个可共享的程序_python面试题

1、到底什么是Python?你能够在回答中与其余技术进行对比(了解).

答案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 阅读下面的代码,写出A0,A1至An的最终值。

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((lambdax: x ** 3)(2))

print((lambdax,y,z: x + y + z)(1, 2, 3))

print((lambdax,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(“”);

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

Python包含了大多数互联网平台(如电子邮件,HTML等)的巨大标准库。

Python不须要显式的内存管理,由于解释器自己将内存分配给新变量并自动释放它们

因为使用方括号而提供易读性

易于初学者学习

具备内置的数据类型,能够节省编程时间和工做量,从而声明变量。

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值