Linux运维工程师面试题第二套

python

1、python是强类型还是弱类型的语言?

强类型

【评析】这种问题其实面试出来很没意思,因为太过理论,而且业界对于这个东西的定义没有一个统一的说法。所以这个题问出来挺无语的。记住,python是动态强类型语言。其中动态静态是针对变量的绑定方式,静态是指在编译的时候绑定变量,而动态是指在运行的时候可以绑定变量。

强弱类型是指变量的类型一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。而弱类型语言,一个数字类型的变量即可以是字符串也可以是数字类型,可以容忍隐式类型转换。 python是一个比较严谨的语言,所以它是强类型语言,而不是弱类型语言。

弱类型语言的话,“1”+2=12,而强类型的话,“1”+2=“大哥,你输入的语法有毛病,你知道不?”

补充一下,perl和php是弱类型动态语言,c和c++是弱类型静态语言。


2、python的动态性体现在哪?

python在运行的时候可以改变原来的函数定义,也可以引进新的代码和对象。

【评析】首先C和C++不是动态语言。然后,python是可以动态的给实例绑定属性,比如我们先class一个“不死族”

class undead():

def __init_(self,name=None,attitude=None):   #设定一个类,这个类就是不死族的类.init是初始属性、默认属性

name=name               #这里设定名字是名字,态度是态度

attitude=attitude


P=undead("食尸鬼","hostile")      #将类实例化,食尸鬼是不死族的一员,他的态度是敌对的


但是这个时候已知设定了name和attitude这两个属性,但是我们可以后补新的属性。

P.attack="爪击"      #设定食尸鬼的攻击方式

然后我们就可以访问attack这个属性了,虽然它并没有在最原始的时候被设定。

P.attack回车一下就可以看到结果。这就是可以动态的补充变量的属性,即一次没有整明白,可以后续补齐。

在实际生产的时候注意一下,在上面的例子里P.name回车的结果和print (P.name)的结果是有那么一点不同的,可以自己动手试试。


3、python的namespace:四种;len()等函数的命名空间

【评析】命名空间就是名字和对象的映射。也就是可以把一个namespace理解为一个字典,实际上很多当前的Python实现namespace就是用的字典。那么哪些可以是一个namespace呢,比如Python的built-in names(包括内置函数,内置常量,内置类型);一个模块的global names(这个模块定义的函数,类,变量);一个函数的所有local names;还有一个类对象的所有属性(数据成员,成员函数)都组成一个命名空间。

len()等函数的命名空间这玩意自己查一下就好。


4、range和xrange的区别

【评析】我找的这个面试题挺新的,但是不得不说搞python就是这一点不好,3.5的版本里xrange已经被枪毙了,range的功能就是xrange。所以在面试的时候大家要注意python2.7和3.5的差别,一旦面试官问你没听过的语句或者是命令,第一反应别说不知道,而是要说“这丫是2.7的吧”。

继续说,在python 2.7版本里:xrange能用就多用,这玩意比range更好,因为在生成一个大数字序列的时候,xrange的性能更优秀。虽然他俩在for in语句里的输出效果是一样的,但是主要区别是xrange会返回一个整体,这个比较类似于人类的思维,而range返回的是list。比如:

a=range(10)

type a 回车的结果是“list”,print a回车的结果是一个list,(1,2,3。。。9,10)。

a=xrange(10)

type (a)回车的结果是"xrange",print(a)回车的结果是一个xrange(10)

而且xrange的效率比range更快,用timeit一下效果更加明显,本机是3.5,range就是xrange,使用timeit.timeit('for i in range(100000000):pass',number=1),看一下消耗时间仅仅是5秒左右。如果在2.7的环境下,用真实的range试一下上面的命令,估计要20多秒。


5、于是问怎么实现迭代器,然后又问了生成器,yield语句


你可能感兴趣的:(linux,python,面试,笔试,运维工程师)