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](https://i-blog.csdnimg.cn/blog_migrate/b2fa44c4369b13d21a611d5be629f343.jpeg)
16. try except用法和作用
try用于检测异常,except用于捕获所有异常,保证程序的正常运行
Exception:捕获万能异常
finally:无论是否错误,都会执行此处代码
raise:触发异常
17.enumerate的作用
将一个可迭代对象中的元素,按元素顺序每个增加一个索引值,组成索引序列,利用它可以同时获得索引和值,方便后续操作。
18.lambda匿名函数表达式及应用场景
与函数有相同的作用域,但是匿名意味着引用计数为0, 使用一次就释放,除非给其命名
作为内置函数的参数,与内置函数配合一起使用
19.python的递归最大层数
99820.常见的内置函数
![b20ccc74eb093e8def2964fe6d6aebf5.png](https://i-blog.csdnimg.cn/blog_migrate/2381a91bd74def52f6f99739f97e80ec.jpeg)
![df8be6636a32aa287ca1bd49e21c0dff.png](https://i-blog.csdnimg.cn/blog_migrate/de8bfb003de97f3344ef57a6596cceaa.jpeg)
感谢阅读!!!
多说一句,很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。