




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一题以下两段代码,运行结束后的结果是什么?是否相同?原因是什么?代码一代码二第二题4G内存怎么读取一个5G的数据?第三题浅述深浅拷贝答案第一题结果不相同第一段结果为:num:0,num:1,num:2,num:3,num:4,num:5,num:6,num:7,num:8,num:9第二段结果为:num:9,num:9,num:9,num:9,num:9,num:9,num:9,num:9,num:9,num:9字典是可变类型,这里l.append(a)相当于执行了浅拷贝,每改变一次a中num的值,所有a的值都将改变第二题实现方法有两种。实现方法一:方法一的实现思路是通过生成器,一次读取少量数据,标准答案是根据文件实现,这里给出的例子是咸鱼学习bobby老师的课程时记录的例子,不知道如何使用生成器完成这个需求的朋友可以参考:实现方法二:在linux系统下使用split可以分割文件,对于多行文件可以使用按行分割的方式,对于单行的大文件可以采用按文件大小分割。按文件行数分割:split -l 300 large_file.log smallfile_prefix按文件大小分割:split -b 10m large_file.log smallfile_prefix之后再按文件读取即可。第一题下图中的打印结果分别是什么?第二题Python中静态方法、类方法、成员函数作用是什么?第三题说说对缺省参数的理解?* args是什么?* kwargs是什么?答案第一题前三个是True,最后一个会报错。具前三个为什么输出True,不了解的可以参考下图:图来源于bobby老师的异步IO编程课件最后一个为什么报错,我们可以先看下issubclass的用法:issubclass方法用于判断参数class是否是类型参数classinfo的子类issubclass(class,classinfo)参数class-类。classinfo-类。返回值如果class是classinfo的子类返回True,否则返回False。而在题目中b并不是一个类,所以报错。第二题我们先理清楚静态函数、类函数分别是什么?静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作。使用装饰器staticmethod定义静态方法。类对象和实例都可以调用静态方法。类方法是将类本身作为对象进行操作的方法。类方法使用classmethod装饰器定义,其第一个参数是类,约定写为cls。第三题缺省参数是指在调用函数的时候没有传入参数的情况下,调用默认的参数,在调用函数的同时赋值时,所传入的参数会替代默认参数。*args 是不定长参数,可以表示输入参数是不确定的,可以任意多个* kwargs 是关键词参数,赋值的时候是以键 = 值 的方式,参数是可以任意多对。以上两个的使用是在定义函数的时候不确定会传入多少参数时使用。什么是鸭子类型?当看到一只鸟,走起来像鸭子、游泳起来像鸭子、叫起来像鸭子那么这只鸟就可以被称之为鸭子 关注点在对象的行为,而不是类型(duck typing) 比如 file, StringIO, socket 对象都支持read/write方法(file like object) 比如定义了_ iter _魔术方法的对象可以使用for鸭子类型更关注接口而非类型。什么是monkey patch ?那些地方用到了?自己如何实现? 所谓猴子补丁就是运行时替换 gevent库需要修改内置的socketfrom gevent import monkey;monkey.patch_socket() 自己实现猴子补丁:importtimeprint(time.time()def_time():return1234time.time=_timeprint(time.time)什么是自省? 运行时判断一个对象的类型能力 Python一切皆对象,用type, id, isinstance 获取对象类型信息 Inspect 模块提供了更多获取对象信息的函数什么是列表或字典推导? 类似:i for i in range(10) if i % 2 = 0 一种快速生成list/dict/set的方法,用来替代 map/filterpythona = 1,2,3b = a,b,cd = k:v for k,v in zip(b,a)print(d) 返回生成器:(i for i in range(10) if i % 2 = 0)Python2/3的差异点 print 成为函数 编码问题,Python3不再有Unicode对象,默认str就是UnicodeUnicode(给人看的)-encode-字节串(给计算机看的)传输的时候使用字节串,操作的时候使用Unicode Python3除法返回浮点数 类型注解defhello(name:str)-str:returnhello+name 优化的super()方便调用父类函数 高级解包操作:a, b, *res = range(10) 限定关键词参数 Python3重新抛出异常不会丢失栈信息(raise from) 一切返回迭代器:range, zip, map, dict.values yield form 链接子生成器 asyncio内置库,asyn/await 原生协程支持异步编程兼容Python2/3的工具 six 模块 2to3等工具转换代码 _ future _函数 - 以下代码分别输出什么?Python如何传参?#代码1defflist(l):l.append(0)print(l)l=flist(l)flist(l)#代码2deffstr(s):s+=aprint(s)s=heheflist(s)flist(s) Python唯一支持的参数传递是共享传参,函数形参获得实参中各个引用的副本。 Python可变/不可变: 不可变对象 - bool/int/float/tuple/str/frozenset 可变对象 - list/dict/set#测试例子1defclear_list(l):l=ll=1,2,3clear_list(ll)print(ll)#1,2,3默认参数只计算一次。#测试例子2defflist(l=1):l.append(1)print(l)flist()flist()#1,1#1,1,1函数 - Python *args * kwargs 都是什么? 用来处理可变参数 args 被打包成 tuple kwargs 被打包成 dictPython异常机制 - 什么是Python异常?Python使用异常处理错误(有些语言使用错误码) BaseException SystemExit/KeyboardInterrupt/GeneratorExit ExceptionPython异常机制 - 什么时候需要捕获异常 网络请求(超时、连接错误等) 资源访问(权限问题,资源不存在) 代码逻辑(越界访问,keyerror)Python异常机制 - 如何处理异常?try:#fun-可能会抛出异常的代码except(Exception1,Exception2)ase:#可以捕获多个异常并处理#异常处理代码else:#pass异常没有发生时候的代码逻辑finally:#pass无论异常有没有发生都会执行的代码,一般处理资源的关闭和释放Python异常机制 - 如何自定义异常? 继承Exception实现自定义异常 给异常加上一些附加信息 处理一些业务相关的特定异常(raise MyException)GIL-什么是CPython GIL? Cpython 解释器的内存管理并不是线程安全 保护多线程情况下对Python对象进行访问 Cpython 使用简单的所机制避免多个线程同时执行字节码GIL影响是? GIL限制了程序的多核执行 同一时间只能有一个线程执行字节码 CPU密集程序难以利用多核优势 IO期间会释放GIL,对IO密集程序影响不大如何规避GIL影响? CPU密集可以使用多进程+进程池 IO密集使用多线程/协程 cython扩展如何剖析程序性能? 二八定律,大部分时间耗时在少量代码上 内置的profile/cprofile等工具 使用pyflame的火焰图工具什么是生成器 生成器就是可以生成值得函数 当一个函数里有了yield关键字就成了生成器 生成器可以挂起执行并且保持当前执行的状态服务器端优化措施 数据结构与算法优化 数据库层:索引优化,慢查询消除,批量操作减少IO,Nosql 网络IO:批量操作,pipline操作减少IO 缓存:使用内存数据库 redis 异步:asyncio,celery 并发:gevent、多线程为什么写单元测试? 避免三无代码(无文档,无注释,无单测) 保证代码逻辑的正确性 单测影响设计,易测代码往往是高内聚低耦合的 回归测试,防止改一处整个服务不可用单元测试库有哪些? nose/pytest较为常用 moke模块用来模拟替换网络请求 coverage统计测试覆盖率1.如何反向迭代一个序列#如果是一个list,最快的方法使用reversetempList = 1,2,3,4tempList.reverse()for x in tempList: print x#如果不是list,需要手动重排templist = (1,2,3,4)for i in range(len(templist)-1,-1,-1): print templisti2.如何查询和替换一个文本中的字符串#最简单的方法使用replace()tempstr = hello you hello python are you okprint tempstr.replace(you,python)#还可以使用正则,有个sub()tempstr = hello you hello python are you okimport rerex = r(hello|Use)print re.sub(rex,Bye,tempstr)3.使用python实现单例模式#方法一:可以使用_new_方法#在_new_方法中把类实例绑定到类变量_instance上,如果cls._instance为None表示该类还没有实例化过,实例化该类并返回。如果cls_instance不为None表示该类已实例化,直接返回cls_instanceclass SingleTon(object): def _new_(cls,*args,*kwargs): if not hasattr(cls,_instance): cls._instance = object._new_(cls,*args,*kwargs) return cls._instanceclass TestClass(SingleTon): a = 1test1 = TestClass()test2 = TestClass()print test1.a,test2.atest1.a=2print test1.a,test2.aprint id(test1),id(test2)#方法二:使用装饰器,建立过实例的就放到instances里面,下次建立的时候先检查里面有没有def SingleTon(cls,*args,*kwargs): instances = print instances def _singleton(): if cls not in instances: instancescls = cls(*args,*kwargs) print instances return instancescls return _singletonSingleTonclass LastClass(object): a = 1test1 = LastClass()print test1.atest2 = LastClass()print test2.a#方法三:使用_metaclass_(元类)关于元类看看这个吧;/21351/class SignalTon(type): def _init_(cls,name,bases,dict): super(SignalTon, cls)._init_(name,bases,dict) cls._instance = None def _call_(cls, *args, *kwargs): if cls._instance is None: cls._instance = super(SignalTon,cls)._call_(*args,*kwargs) return cls._instanceclass TestClass(object): _metaclass_ = SignalTontest1 = TestClass()test2 = TestClass()test1.a = 2print test1.a,test2.aprint id(test1),id(test2)#方法四:共享属性 所谓单例就是所有的引用(实例,对象)拥有相同的属性和方法,同一个类的实例天生都会有相同的方法,那我们只需要保证同一个类所产生的实例都具有相同的属性。所有实例共享属性最简单直接的方法就是共享_dict_属性指向。class SingleTon(object): _state = def _new_(cls, *args, *kwargs): obj = object._new_(cls,*args,*kwargs) obj._dict_ = cls._state return objclass TestClass(SingleTon): a = 1test1 = TestClass()test2 = TestClass()print test1.a,test2.atest1.a = 2print test1.a,test2.aprint id(test1),id(test2)#方法五:使用同一个模版#写在mysingleton.py中class My_Singleton(object): def foo(self): passmy_singleton = My_Singleton()#写在要使用这个实例的py文件里面,在不同的引用的地方都引用相同的实例,以此实现单例模式from mysingleton import my_singletonmy_singleton.foo()4.重新实现str.strip()def rightStrip(tempStr,splitStr): endindex = tempStr.rfind(splitStr) while endindex != -1 and endindex = len(tempStr) - 1: tempStr = tempStr:endindex endindex = tempStr.rfind(splitStr) return tempStrdef leftStrip(tempStr,splitStr): startindex = tempStr.find(splitStr) while startindex = 0: tempStr = tempStrstartindex+1: startindex = tempStr.find(splitStr) return tempStrstr = H print strprint leftStrip(str, )print rightStrip(str, )#输出 H H H5.super的原理#阅读下面的代码,它的输出结果是什么?class A(object): def _init_(self): print enter A super(A, self)._init_() # new print leave A class B(object): def _init_(self): print enter B super(B, self)._init_() # new print leave B class C(A): def _init_(self): print enter C super(C, self)._init_() print leave C class D(A): def _init_(self): print enter D super(D, self)._init_() print leave D class E(B, C): def _init_(self): print enter E super(E, self)._init_() # change print leave E class F(E, D): def _init_(self): print enter F super(F, self)._init_() # change print leave F#输出 enter F enter E enter B enter C enter D enter A leave A leave D leave C leave B leave E leave F6.闭包常用的装饰器就是闭包的一种def make_adder(addend): def adder(addend): return addend+addendreturn adderP1 = make_adder(5)P2= make_adder(4)print p1(10)#输出15print p2(10)#输出14闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外7.给列表中的字典排序list 对象 alist “name”:”a”,”age”:20,“name”:”b”,”age”:30,“name”:”c”,”age”:25按照 age 从大到小排序alist = name:a,age:20,name:b,age:30,name:c,age:25alist.sort(key=lambda:x:-x.get(age)print alist8.合并两个列表排除重复元素用简洁的方法合并alist = a,b,c,d,e,fblist = x,y,z,e,f并且元素不能重复alist = a,b,c,d,e,fblist = x,y,z,e,fdef merge_list(*args): s = set() for i in args: s = s.union(i) print(s) return smerge_list(alist,blist)9.打乱一个排好序的列表from random import shufflealist = range(10)print(alist)shuffle(alist)print(alist)10.简单的实现一个栈结构 stackclass Stack(object): def _init_(self): self.value = def push(self,x): self.value.append(x) def pop(self): self.value.pop()stack = Stack()stack.push(1)stack.push(2)stack.push(3)print(stack.value)stack.pop()print(stack.value)11.输入一个日期,返回时一年中的哪一天from datetime import datetimedef which_day(year,month,day): return (datetime(year,month,day)-datetime(year,1,1).days+1print(which_day(2017,1,15)12.把字符串”k1:1|k2:2|k3:3”处理成 python 字典的形式:k1:1,k2:2,k3:3def string_to_dict(string): d = for kv in string.split(|): k,v = kv.split(:) if v.isdigit(): v=int(v) d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 子宫颈炎课件教学
- 工业给水处理概述
- 子宫模型解剖课件
- 年度全员安全培训计划课件
- 工业油脂安全培训总结课件
- 正在按揭的车转卖合同5篇
- FGFR2-3-IN-3-生命科学试剂-MCE
- Factor-B-IN-5-生命科学试剂-MCE
- 农发行石家庄市赵县2025秋招群面案例总结模板
- 天津机电职业技术学院招聘笔试真题2024
- 实验室制度上墙牌
- GB/T 33363-2016预应力热镀锌钢绞线
- GB/T 27696-2011一般起重用4级锻造吊环螺栓
- GB/T 10781.1-2021白酒质量要求第1部分:浓香型白酒
- 2023-瑞幸咖啡vi手册
- 实用英语口语900句
- 风机运行记录表
- 2021新高考语文Ⅰ卷现代文阅读Ⅱ小说《石门阵》赏析及试题详细解析
- 高中必修人教A版高中数学必修1指数函数一 完整版课件PPT
- 法律谈判实务完整版课件全套教学ppt教程
- 2022藤椒油炒饭抖音推广方案-57P
评论
0/150
提交评论