python 面试宝典--集各家之所长,乱七八糟于一体
发布日期:2021-05-20 05:59:04 浏览次数:26 分类:精选文章

本文共 5829 字,大约阅读时间需要 19 分钟。

  

python 面试宝典–集各家之所长,乱七八糟于一体

  1. 在判断object是否是class的instances时,type和isinstance函数的区别?

    type(obj) => <type 'instance'>

    type(cls) => <type 'classobj'>

    isinstance(obj,class),如果object是class的instance,返回True。

  1. 通过重写内建函数,实现文件open之前检查文件格式?

[html] view plaincopyprint?

file = __builtin__.open(filename,mode)    if file.read(5) not in("GIF87", "GIF89"):       raise IOError, "not aGIF file"  file.seek(0)   return file

fp = open("sample/test.gif", “r”)

print len(fp.read()), “bytes”

  1. 重新实现str.strip(),注意不能使用string.*strip()。

TODO rstrip

def rightStr(string,split=’ '):
endind = string.rfind(split)
res = string while endind != -1 and endind == len(res)-1: res = res[:endind]
endind = res.rfind(split)

TODO lstrip

def leftStr(string,split=’ '):
startind = string.find(split)
res = string while startind != -1 and startind == 0: res = res[startind+1:]
startind=res.find(split)
return res

def main():

word='aa asdf aa '
stripstr=' ' lenth = len(word) res=word # leftstrip if word[0] == stripstr: res=leftStr(res) # rightstrip if word[len(word)-1] == stripstr: res=rightStr(res) print res

if name == “main”:

main()

  1. 说明os,sys模块不同,并列举常用的模块方法?

os: This module provides a portable way of using operating system dependent functionality.

sys:This module provides access to some variables used or maintained by the interpreter and to functions that interact strongly with the interpreter.

os 常用方法

  • os.remove() 删除文件
  • os.rename() 重命名文件
  • os.walk() 生成目录树下的所有文件名
  • os.chdir() 攻 dirs
  • os.mkdir/makedirs 创建目录/多层目录
  • os.rmdir/removedirs 删除目录/多层目录
  • os.listdir() 列出指定目录的文件
  • os.getcwd() 获取当前工作目录
  • os.chmod() 改变目录权限
  • os.path.basename() 去掉目录路径,返回文件名
  • os.path.dirname() 去掉文件名,返回目录路径
  • os.path.join() 将分离的各部分组合成一个路径名
  • os.path.split() 返回(dirname(), basename())元组
  • os.path.splitext() 返回(filename, extension)元组
  • os.path.getatime/cTime/mTime 分别返回最近访问、创建、修改时间
  • os.path.getsize() 返回文件大小
  • os.path.exists() 是否存在
  • os.path.isabs() 是否为绝对路径
  • os.path.isdir() 是否为目录
  • os.path.isfile() 是否为文件

sys 常用方法

  • sys.argv 命令行参数List,第一个元素是程序本身路径
  • sys.modules.keys() 返回已经导入的模块列表
  • sys.exc_info() 获取当前正在处理的异常类详细信息
  • sys.exit(n)退出程序,正常退出时exit(0)
  • sys.hexversion 获取解释程序的版本值(16进制格式)
  • sys.version 获取解释程序的版本信息
  • sys.maxint 最大的Int值
  • sys.maxunicode 最大的Unicode值
  • sys.modules 返回系统导入的模块字段
  • sys.path 返回模块的搜索路径
  • sys.platform 返回操作系统平台名称
  • sys.stdout 标准输出
  • sys.stdin 标准输入
  • sys.stderr 错误输出
  • sys.exc_clear() 清除当前线程或最近的错误信息
  • sys.exec_prefix 返回平台独立的python文件安装位置
  • sys.byteorder 本地字节规则指示器(big-endian/little-endian)
  • sys.copyright 记录python版权相关的内容
  • sys.api_version 解释器的C的API版本
  • sys.version_info 返回解释器版本信息
  1. 深拷贝和浅拷贝的区别?

copy 仅拷贝对象本身,不拷贝引用的其他对象。

deepcopy 复制对象本身,并拷贝对象中引用的其他对象。

import copyal = [[1],[2],[3]]bl = copy.copy(al)cl = copy.deepcopy(al)print “before=>”, alprint blprint cl

al[0][0] = 0al[1] = None

print “after=>”, alprint blprint cl
  1. os.path和sys.path的区别?

os.path是标准库,处理路径相关操作。

sys.path是Python解释器用来查找扩展模块的路径列表。

import osfilename = “my/little/pony”print “using”, ..., os.path.split(filename)print “splitext”, ..., os.path.splitext(filename)print “dirname”, ..., os.path.dirname(filename)print “basename”, ..., os.path.basename(filename)

sys.path是系统模块的搜索路径,初始化时由PYTHONPATH环境变量决定,也包括注册表(Windows系统)。

  1. re模块中match和search方法的不同

match()函数从字符串开始位置匹配,找不到则返回None。

search()函数扫描整个字符串,返回所有匹配中的第一个结果。

import restr = r’’p = re.compile(r’<.*?>’)print p.match(str).group(0) => 返回’B’ inside??请问是不是这样?或者,请您更正这个错误。
  1. 如何匹配得到*

import restr = r’’p = re.compile(r’<.*?>’)print p.match(str).group(0) => returns <title>或者看看是否有错误。
  1. 重新实现filter,map,reduce

def filter_impl(func, argvs):res = []for argv in argvs:    if func(argv):        res.append(argv)return res
print filter_impl(lambda x: x<4, range(1,10)) => [1,2,3]print filter(lambda x: x<4, range(1,10)) => [1,2,3]
def map_impl(func, argvs):res = []for argv in argvs:    res.append(func(argv))return res
print map_impl(lambda x: x**10, range(1,5)) => [1, 16, 81, 256]print map(lambda x: x**10, range(1,5)) => [1, 16, 81, 256]
def reduce_impl(func, argvs, startVal=None):    if startVal is not None:        argv1 = startVal    else:        argv1 = argvs[0]    for argv2 in argvs[1:]:        argv1 = func(argv1, argv2)    return argv1
print reduce_impl(lambda x,y: x>y, range(1,4), 20) => 99print reduce(l styles... => 99
  1. 生成器与函数的不同,并实现简单生成器

def gem():yield “first”yield “second”yield “third”
for res in gem():print(res)
  1. 设计一个遍历目录和子目录,抓取.pyc文件的脚本

def getFiles(dir, suffix):    res = []    for root, directory, files in os.walk(dir):        for filename in files:            name, suf = os.path.splitext(filename)            if suf == suffix:                res.append(os.path.join(root, filename))    return res
for file in getFiles("./", ‘.py’):print(file)
  1. 有两个无序的整数序列,大小都为n,元素任意整形数。要求通过交换元素,使两个序列的元素和之差最小。给出实现步骤和代码。

tests = [       [1,2,3,4,5,6,700,800],      [10001,10000,100,90,50,1],      range(1, 11),      [12312, 12311, 232, 210, 30, 29, 3, 2, 1, 1]  ]  for l in tests:      l.sort()      l1, l2 = mean(l)      print(f"Source List: {l}")      print("Result List:", l1, l2)      print(f"Distance: {abs(sum(l1) - sum(l2))}")
上一篇:Python 正则表达式入门(初级篇)
下一篇:Python 函数装饰器--最全面的详细的装饰器文章

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年05月21日 06时02分44秒