python yield用法_20个开发面试的python必备知识

1.is和==的区别:

is比较的是id,对象的内存地址
= =比较的是值

2.按字典中的value值进行排序

sorted(dict.items(), key = lambda x: x[1])

3.字典和json的区别

字典是python的数据结构,字典中的key值能hash
json是一种数据的表现形式,是字符串

4.可变、不可变类型:

指的是内存中的值是否可以被改变
不可变:数值、字符串、元组
可变:列表、字典、集合

5.常用的字符串格式化

占位符 s1 = “%s DSB 你好”%name
format s2 = “{} DSB 你好”.format(name)
f-string s3 = f"{name} DSB 你好"

6.字符串驻留机制

对短字符串,赋值给多个不同对象时,内存中只有一个副本
驻留适用范围:由数字,字符和下划线组成的python标识符及整数[-5,256]

7.删除list中重复元素

通过set内置的去重实现: l2 = list(set(l1))
#保持原来顺序
通过内置sort方法:l2.sort(key=l1.index)
l2 = sorted(set(l1), key=l1.index)
遍历:if not in l2 -> append

8.统计函数的执行效率

import cProfil #引入程序分析包,分析代码性能
cProfile.run(‘func(paras)’) #把函数以字符串形式传入模块的run方法

9.列举字符串、列表、元组、字典的5个常用方法

str1 = ‘’ : replace, strip, split, reverse, upper, lower…
list1 =[]: append, pop, insert, remove,sort, count, index…
tuple1 = (): index, count, len(), dir()…
dict1 = {}: get, keys, values, items, pop, popitems, clear, update…

10.什么是反射,以及应用场景

通过字符串的形式去访问对象的属性,调用对象的方法(但是不能去访问方法)
比如本来可以通过if elif判断字符串然后调用函数,但在大规模系统中不可取。
核心主题是如何利用字符串驱动不同的事件,比如导入模块、调用函数等等,这些都是python的反射机制,是一种编程方法、设计模式的体现,凝聚了高内聚、松耦合的编程思想,不能简单的用执行字符串来代替。
可以通过__import__函数,我们实现了基于字符串的动态的模块导入。obj = import(modules)
#对于http://lib.xxx.xxx.xxx这一类的模块导入路径,__import__默认只会导入最开头的圆点左边的目录,也就是“lib”
=> obj = import(“lib.” + modules, fromlist=True) # 注意fromlist参数
class Foo:
pass
foo = Foo()
foo.x = 1
#getattr
getattr(foo,‘x’)) # 1 ## getattr 函数让程序去foo模块了,寻找一个叫x的成员
# 相当于把字符串变成函数名的过程,然后把结果复制给变量func,变量指向foo里某个函数
#setattr
setattr(foo, ‘y’, 2))
getattr(foo,‘y’)) # 2
#hasattr
hasattr(foo, ‘z’)) #False # 通常通过hasattr的判断,防止非法输入错误
#delattr
delattr(foo, 'x))

11.浅copy和深copy的区别:

首先深拷贝和浅拷贝都是对象的拷贝,都会生成一个看起来相同的对象,他们本质的区别是拷贝出来的对象的地址是否和原对象一样,浅拷贝是地址的复制,深拷贝是值的复制,就是完全跟以前就没有任何关系了,原来的对象怎么改都不会影响当前对象。

12.Python中的self关键字:

python的类中定义函数时的self关键字跟python的方法函数有关,方法函数由类的实例化对象调用,需要把调用它的实例化对象传入方法函数中,self代表调用时的类的实例,而非类。
在Python的解释器内部,当我们调用t.prt()时,实际上Python解释成Test.prt(t),也就是说把self替换成类的实例。

13.Yield关键字和生成器:

yield是一种特殊的return,执行遇到yield时,立即返回,这一点与return相似,不同之处在于,下次进入函数时直接到yield的下一个语句,而return后再进入函数,还是从函数体的第一行代码开始执行。带yield的函数生成器,通常与next函数结合用。g=f()执行f,只得到一个生成器对象g,使用next函数进入到函数体内(执行next(g))。优点-节省内存,占用内存空间为O(1)。

生成器:在需要返回数据的时候使用 yield 语句。每次 next()被调用时,生成器会返回它脱离的位置,自动创建iter()和 next()方法
简洁、高效,节省内存

14.列表和迭代器的区别

列表经过内置函数iter包装,成为迭代器 a_iter = iter(a)
列表不论遍历多少次,表头位置始终是第一个元素
迭代器遍历结束后,不再指向原来的表头位置,而是最后元素的下一个位置
(迭代到最后一个元素,再执行next,会触发stopiteratio异常,
通过捕获此异常,求迭代器指向列表a的长度;生成器也是一种迭代器)

15.python垃圾回收机制

057fe65cb4cd0db8cd08f7741a8f2263.png

16. try except用法和作用

try用于检测异常,except用于捕获所有异常,保证程序的正常运行
Exception:捕获万能异常
finally:无论是否错误,都会执行此处代码
raise:触发异常

17.enumerate的作用

将一个可迭代对象中的元素,按元素顺序每个增加一个索引值,组成索引序列,利用它可以同时获得索引和值,方便后续操作。

18.lambda匿名函数表达式及应用场景

与函数有相同的作用域,但是匿名意味着引用计数为0, 使用一次就释放,除非给其命名
作为内置函数的参数,与内置函数配合一起使用

19.python的递归最大层数
99820.常见的内置函数

b20ccc74eb093e8def2964fe6d6aebf5.png

df8be6636a32aa287ca1bd49e21c0dff.png

感谢阅读!!!

多说一句,很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值