
本文共 5829 字,大约阅读时间需要 19 分钟。
python 面试宝典–集各家之所长,乱七八糟于一体
在判断object是否是class的instances时,type和isinstance函数的区别?
type(obj) => <type 'instance'>
type(cls) => <type 'classobj'>
isinstance(obj,class),如果object是class的instance,返回True。
通过重写内建函数,实现文件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 filefp = open("sample/test.gif", “r”)
print len(fp.read()), “bytes”
重新实现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 resdef 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 resif name == “main”:
main()
说明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 返回解释器版本信息
深拷贝和浅拷贝的区别?
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
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系统)。
re模块中match和search方法的不同
match()函数从字符串开始位置匹配,找不到则返回None。
search()函数扫描整个字符串,返回所有匹配中的第一个结果。
import restr = r’’p = re.compile(r’<.*?>’)print p.match(str).group(0) => 返回’B’ inside??请问是不是这样?或者,请您更正这个错误。
如何匹配
得到*
import restr = r’’p = re.compile(r’<.*?>’)print p.match(str).group(0) => returns <title>或者看看是否有错误。
重新实现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
生成器与函数的不同,并实现简单生成器
def gem():yield “first”yield “second”yield “third”
for res in gem():print(res)
设计一个遍历目录和子目录,抓取.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)
有两个无序的整数序列,大小都为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))}")
发表评论
最新留言
关于作者
