Python面试真题(2)

【Python面试真题】- 查看文件内容有哪些命令可以使用?

vi 文件名 #编辑方式查看,可修改
cat 文件名 #显示全部文件内容
more 文件名 #分页显示文件内容
less 文件名 #与 more 相似,更好的是可以往前翻页
tail 文件名 #仅查看尾部,还可以指定行数
head 文件名 #仅查看头部,还可以指定行数

【Python面试真题】- 如何在Python中使用字符串

a、使用单引号(‘)

用单引号括起来表示字符串,例如:

str=’this is string’;
print str;
b、使用双引号(“)
双引号中的字符串与单引号中的字符串用法完全相同,例如:

str=”this is string”;
print str;
c、使用三引号(”’)
利用三引号,表示多行的字符串,可以在三引号中自由的使用单引号和双引号,例如:

str=”’this is string
this is pythod string
this is string”’
print str;

【Python面试真题】- list 函数

通过 list(seq) 函数把一个序列类型转换成一个列表。

list(‘hello’)
[‘h’, ‘e’, ‘l’, ‘l’, ‘o’]
list 函数使用于所有类型的序列,而不只是字符串。

【Python面试真题】- 改变列表:元素赋值

使用索引标记来为某个特定的、位置明确的元素赋值。

x = [1, 1, 1]
x[1] = 2
x
[1, 2, 1]
不能为一个位置不存在的元素进行赋值。

【Python面试真题】- Python匹配HTML tag的时候,<.>和<.?>有什么区别 ?

import re
s = ‘Title’
print(re.match(‘<.>’, s).group()) 会返回一个匹配Title而不是
而 import re s = ‘Title’ print(re.match(‘<.?>’, s).group()) 则会返回
<.>这种匹配称作贪心匹配 <.?>称作非贪心匹配

【Python面试真题】- 简要描述Python的垃圾回收机制(garbage collection)

这里能说的很多。你应该提到下面几个主要的点: Python在内存中存储了每个对象的引用计数(reference count)。如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用作他用。 偶尔也会出现引用循环(reference cycle)。垃圾回收器会定时寻找这个循环,并将其回收。举个例子,假设有两个对象o1和o2,而且符合o1.x == o2和o2.x == o1这两个条件。如果o1和o2没有其他代码引用,那么它们就不应该继续存在。但它们的引用计数都是1。 Python中使用了某些启发式算法(heuristics)来加速垃圾回收。例如,越晚创建的对象更有可能被回收。对象被创建之后,垃圾回收器会分配它们所属的代(generation)。每个对象都会被分配一个代,而被分配更年轻代的对象是优先被处理的。

【Python面试真题】- Python里如何反序的迭代一个序列

如果是一个list, 最快的解决方案是:

list.reverse()
try:
for x in list:
“do something with x”
finally:
list.reverse()

如果不是list, 最通用但是稍慢的解决方案是:
for i in range(len(sequence)-1, -1, -1):

x = sequence[i]

【Python面试真题】- src = “security/afafsff/?ip=123.4.56.78&id=45″,请写一段代码用正则匹配出IP ?

import re

src = “security/afafsff/?ip=123.4.56.78&id=45”
m = re.search(‘ip=(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})’, src, re.S) # re.S 改变’.’的行为
print m.group(1)

输出结果

123.4.56.78

【Python面试真题】- 怎么用Python生成指定长度的斐波那契数列 ?

def fibs(x):
result = [0, 1]
for index in range(x-2):
result.append(result[-2]+result[-1])
return result

if name==’main‘:
num = input(‘Enter one number: ‘)

print fibs(num)  

【Python面试真题】- 如何写一段程序逐行读入一个文本文件,并在屏幕上打印出来

f = open(filename)
while True:
line = f.readline()
if not line: break
print(line)
f.close()

【Python面试真题】- python装饰器

它是指对函数执行过程,做一些扩展,甚至可以更改本身函数的执行,它就是在不改变源码的情况下,给它添加新的功能

python提供的内置装饰器有?

@classmethod修饰类函数,可以由对象和类调用,在类函数中,有一个隐形参数,如果使用类函数执行,隐形参数指这个类。如果使用对象.类函数执行,隐形函数指对象的类型。它只想让类来调用

@staticmethod修饰静态函数,静态函数没有任何隐形参数,可以由对象和类调用

@property在函数前面加这个装饰器,那么这个函数可以当成属性类用

【Python面试真题】- 你调试python代码的方法有哪些?

具体IDE都有调试,比如:IDLE, Eclipse+Pydev都可以设置断点调试。
pdb模块也可以做调试。
还有PyChecker和Pylint
PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告

Pylint 是另外一个工具可以进行coding standard检查。

【Python面试真题】- 是否遇到过python的模块间循环引用的问题,如何避免它?

这是代码结构设计的问题,模块依赖和类依赖
如果老是觉得碰到循环引用,很可能是模块的分界线划错地方了。可能是把应该在一起的东西硬拆开了,可能是某些职责放错地方了,可能是应该抽象的东西没抽象
总之微观代码规范可能并不能帮到太多,重要的是更宏观的划分模块的经验技巧,推荐uml,脑图,白板等等图形化的工具先梳理清楚整个系统的总体结构和职责分工

采取办法,从设计模式上来规避这个问题,比如:

  1. 使用 “all” 白名单开放接口

  2. 尽量避免 import

【Python面试真题】- python2和python3区别

字符编码: py3中默认字符编码是unicode;py2中默认字符编码是 ASCII,如果文件中出现了中文,需要在顶部加入coding声明#coding:utf8
让用户输入:py3中直接使用input(); py2中需要使用raw_input()
range和xrange:py3中的range == py2中的 xrange, 返回类似迭代器的东西,节省内存空间
语句变函数: py3中为print(), exec() 是一个方法,必须加上括号; py2中为print, exec
数据传输: py3中socket传过来的数据是byte类型 / hashlib包update也需要传bytes类型的数据; py2中则可以直接传入str, e.g

python3

import hashlib
m = hashlib.sha256()
m.update(b"Nobody inspects")

python2

import hashlib
m = hashlib.md5()
m.update(“Nobody inspects”)

【Python面试真题】- Python编程: 类继承

def class_test():
class A(object):
def show(self):
print(“class A”)

def hello(self):
    print("hello")

class B(A):
def show(self):
print(“class B”)

b =B()
b.show()
b.hello()

调用类A的show方法

b.class = A
b.show()

__class__方法指向了类对象,只用给他赋值类型A,

然后调用方法show,但是用完了记得修改回来。

“”"OUT
class B
hello
class A

【Python面试真题】- 正则匹配,匹配日期2018-03-20?

url=’https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20|2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462′

仍有同学问正则,其实匹配并不难,提取一段特征语句,用(.*?)匹配即可。

import re

url=’https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateRange=2018-03-20|2018-03-20&dateType=recent1&device=1&token=ff25b109b&_=1521595613462′
ret = re.findall(r”dateRange=(.+?)%7C(.+?)&”, url)

print(ret)

【Python面试真题】- 介绍一下Python下range()函数的用法

range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
range(0, 9, 2)
[0, 2, 4, 6, 8]
range(99,0,-10)
[99, 89, 79, 69, 59, 49, 39, 29, 19, 9]
相区别的是xrange(),每次只取出一个迭代对象,如果是数据量比较大时,效率较高

在Python3中,没有xrange()函数,其功能放在了range()函数上

【Python面试真题】- 对比一下dict中items与iteritems?
D = {‘a’:1,’b’:2,’c’:3,’d’:4}
D.items() #一次性取出所有
[(‘a’, 1), (‘c’, 3), (‘b’, 2), (‘d’, 4)]
D.iteritems() #迭代对象,每次取出一个。用for循环遍历出来;

for i in D.iteritems():
… print i,

(‘a’, 1) (‘c’, 3) (‘b’, 2) (‘d’, 4)
for k,v in D.iteritems():
… print k,

a c b d
总结:

  1. 一般iteritems()迭代的办法比items()要快,特别是数据库比较大时。

  2. 在Python3中一般取消前者函数

【Python面试真题】- 有用过with statement吗?它的好处是什么?

with open(‘text.txt’) as myfile:
… while True:
… line = myfile.readline()
… if not line:
… break
… print line,

with语句使用所谓的上下文管理器对代码块进行包装,允许上下文管理器实现一些设置和清理操作。

例如:文件可以作为上下文管理器使用,它们可以关闭自身作为清理的一部分。

NOTE:在PYTHON2.5中,需要使用from future import with_statement进行with语句的导入

【Python面试真题】- 什么是GIL?

什么是GIL(Global Interpreter Lock)全局解释器锁? 简单地说就是:
每一个interpreter进程,只能同时仅有一个线程来执行, 获得相关的锁, 存取相关的资源.
那么很容易就会发现,如果一个interpreter进程只能有一个线程来执行,
多线程的并发则成为不可能, 即使这几个线程之间不存在资源的竞争.

从理论上讲,我们要尽可能地使程序更加并行, 能够充分利用多核的功能.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值