一、什么是lambda函数?它有什么好处?另外python在函数编程方面提供了些什么函数和语法? lambda是Python中的匿名函数。它语法简单,简化代码,不会产生命名冲突,污染命名空间。Python提供了map,reduce,filter等函数方法,提供了装饰器,闭包等语法 二、详细说说tuple、list、dict的用法,它们的特色; tuple 元祖,固定长度不可变的顺序容器,访问效率高,是和存储一些常量数据,能够做为字典的键使用 list 列表,是长度可变有序的数据存储容器,。能够经过下标索引取到相应的数据 dict 字典,长度可变的hash字典容器。存储的方式为键值对,能够经过相应的键获取相应的值,key支持多种类型 三、说说python中装饰器、迭代器的用法;描述下dict 的 items() 方法与 iteritems() 方法的不一样; 装饰器是指对函数执行过程,作一些扩展,甚至能够更改自己函数的执行 迭代器是指遵循迭代器协议的对象,这类对象在被for循环时,每次迭代生成下一个项,不用一开始就生成整个列表 在python3中 不存在iteritems,items方法返回可迭代对象 在python2中 items()返回[(key,value)]的列表对象,iteritems()返回迭代器对象,iteritems()循环时不能够增删dict的内容 四、讲讲对unicode, gbk, utf-8等的理解,python2.x是如何处理编码问题? unicode编码:为了解决各个国家的语言的存储,引进的unicode码,包括UCS2,UCS4,UTF-8,UTF-7等 gbk:和unicode不同的编码方式 ,经常使用的为 gbk-2312 utf-8: UTF-8 使用 1-4 个字节来存储单个字符,应该是目前最流行的字符集。Linux 默认字符集就是UTF-8。既解决了大多数语言的编码方式,又避免了简单字符存储对空间的浪费 python 2.x 须要在文件上方声明文件的编码方式# -*- coding: utf8 -*-,能够经过str.decode/str.encode处理字符串的文本编码 保证 python 编辑器的编码正确,或使用 u’中文’保证被转换成 unicode 编码,推荐使用 sys.setdefaultencoding('utf-8')来保证咱们的编码 五、Python 是如何进行内存管理的?python 的程序会内存泄露吗?说说有没有什么方面防止或检测内存泄露? Python GC主要使用 引用计数 来跟踪和回收垃圾。在引用计数的基础上,经过“标记-清除”解决容器对象可能产生的循环引用问题。经过分代 以空间换时间的方法提升垃圾回收效率 一、引用计数: 每一个对象中都有ob-refcnt来作引用计数。当一个对象...,ob-refcnt就会增长,当引用的对象删除,那么ob-refcnt就会减小当ob-refcnt为零,就会释放该对象的内存空间 二、标记清除: 解决循环引用的问题。先按需分配,等到没有空闲内存的时候,从寄存器和程序栈上的引用出发,遍历全部对象和引用把全部能访问的打标记,最后将没有标记的对象释放掉 三、分代技术: 提升效率,提升垃圾回收的效率,按照存活时间,分红不一样的集合。将内存块按照其存活时间划分为不一样的集合。每一个集合就称为一个“代”,垃圾回收的频率随代的存活时间增大而减少。。Python默认定义分代对象集合,引用数越大,对象的存活时间越长 Python也会内存泄露,Python自己的垃圾回收机制没法回收重写了__del__的循环引用的对象 程序员管理好每一个python对象的引用,尽可能在不须要使用对象的时候,断开全部引用 尽可能少经过循环引用组织数据,能够改用weakref作弱引用或者用id之类的句柄访问对象 经过gc模块的接口能够检查出每次垃圾回收有哪些对象不能自动处理,再逐个逐个处理 六、关于 python 程序的运行性能方面,有什么手段能提高性能? 一、使用多进程,充分利用机器的多核性能 二、对于性能影响较大的部分代码,可使用C或C++编写 三、对于IO阻塞形成的性能影响,可使用IO多路复用来解决 四、尽可能使用python的内建函数 五、尽可能使用局部变量 七、list 对象 alist [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}], 请按 alist 中元素的age 由大到小排序; def sort_by_age(list1): return sorted(alist,key=lambda x:x['age'],reverse=True) 八、两个 list 对象 alist ['a','b','c','d','e','f'], blist ['x','y','z','d','e','f'],请用简洁的方法合并这两个 list,而且 list 里面的元素不能重复; alist = ['a','b','c','d','e','f'] blist = ['x','y','z','d','e','f'] def merge_list(*args): s = set() for i in args: s = s.union(i) return list(s) 九、打乱一个排好序的 list 对象 alist; import random random.shuffle(alist) 十、简单实现一个stack class Stack: def __init__(self): self.items = [] def __iter__(self): return self.items.__iter__() def pop(self): return self.items.pop() def top(self): if len(self.items) > 0: return self.items[len(self.items) - 1] def push(self, item): self.items.append(item) def empty(self): self.items = [] def size(self): return len(self.items) 十一、输入某年某月某日,判断这一天是这一年的第几天?(能够用 python 标准库) import datetime def dayofyear(): year = input("请输入年份:") month = input("请输入月份:") day = input("请输入天:") date1 = datetime.date(year=int(year),month=int(month),day=int(day)) date2 = datetime.date(year=int(year),month=1,day=1) return (date1 -date2).days 十二、将字符串:"k:1|k1:2|k2:3|k3:4",处理成 python 字典:{k:1, k1:2, ... } str1 = "k:1|k1:2|k2:3|k3:4" def str2dict(str1): dict1 = {} for iterms in str1.split('|'): key,value = iterms.split(':') dict1[key] = value return dict1