1.is和==的区别:python
is比较的是id,对象的内存地址
= =比较的是值web
2.按字典中的value值进行排序数据库
sorted(dict.items(), key = lambda x: x[1])编程
3.字典和json的区别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)
#对于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垃圾回收机制
16. try except用法和做用
try用于检测异常,except用于捕获全部异常,保证程序的正常运行
Exception:捕获万能异常
finally:不管是否错误,都会执行此处代码
raise:触发异常
17.enumerate的做用
将一个可迭代对象中的元素,按元素顺序每一个增长一个索引值,组成索引序列,利用它能够同时得到索引和值,方便后续操做。
18.lambda匿名函数表达式及应用场景
与函数有相同的做用域,可是匿名意味着引用计数为0, 使用一次就释放,除非给其命名
做为内置函数的参数,与内置函数配合一块儿使用
19.python的递归最大层数
998
20.常见的内置函数
17. filter,map,reduce的做用
filter(lambda x: x == 2, [1,2,3]) #经过判断函数func,筛选符合条件的元素
map(lambda x: x + ‘xxx’, [‘1’,‘2’]) #将func用于每一个iterable对象
reduce(lambda x, y: x + y, [1,2,3,4,5]) # 函数会对参数序列中的元素进行累积
18.什么是闭包
定义在一个函数内部的函数,被外层函数包裹着,特色是能够访问到外层函数中的名字
闭包函数时名称空间与做用域、函数对象、函数嵌套的结合体
19.装饰器
装饰器其实就是一个以函数做为参数并返回一个替换函数的可执行函数,即装饰器是一个函数,它以函数做为参数,返回另外一个函数。
使用 @函数名字,放在某些函数上面,起到加强它们功能的做用。
装饰器使得代码更简洁,代码的复用性大大提高。在Java中装饰器被称为注解。
python支持异步编程,从中也能看到装饰器的身影
20.函数式编程:面向过程的程序设计
21.Python LEGB规则
Python的命名空间是一个字典,字典内保存了变量名称与对象之间的映射关系
查找变量名就是在命名空间字典中查找键-值对, LEGB就是用来规定命名空间查找顺序的规则 LEGB含义解释: L-Local(function);函数内的名字空间 E-Enclosing function locals;外部嵌套函数的名字空间(例如closure) G-Global(module);函数定义所在模块(文件)的名字空间 B-Builtin(Python);Python内置模块的名字空间 Python在肯定一个变量的核心规则是LEGB,只有熟悉LEGB规则,才能清楚在程序执行过程当中调用的变量到底是什么
22.@property的用法
若是在一个类中要设置和获取一个成员变量的话, 通常是定义get和set的方法,但咱们但愿get/set一个值时有更简单的方法,像设置成员变量同样去设置一个变量,又能够检查类型参数。 在方法定义前,加 @property 装饰器,能够像操做成员变量同样进行操做。 新式类中的属性有三种访问方式,以下: @property对应读取 @方法名.setter修改 @方法名.deleter删除属性
23.多线程threading和多进程multiprocessing的应用场景
每个应用程序都有一个本身的进程。操做系统会为这些进程分配一些执行资源,例如内存空间等。
在进程中,又能够建立一些线程,他们共享这些内存空间,并由操做系统调用,以便并行计算。
线程的状态
建立线程以后,线程并非始终保持一个状态。其状态大概以下:
io 操做不占用CPU(从硬盘、从网络、从内存读数据都算io)
计算占用CPU(如1+1计算)
python中的线程是假线程,不一样线程之间的切换是须要耗费资源的,由于须要存储线程的上下文,不断的切换就会耗费资源。
python多线程适合io操做密集型的任务(如socket server 网络并发这一类的);
python多线程不适合cpu密集操做型的任务,主要使用cpu来计算,如大量的数学计算。
那么若是有cpu密集型的任务怎么办,能够经过多进程来操做(不是多线程)。
24.异步和多线程的区别
异步是单线程的,它能更优雅处理了io密集型的应用场景
25.__new__和__init__的区别
建立时初始化实例
__new__是在实例建立以前被调用的,由于它的任务就是建立实例而后返回该实例对象,是个静态方法。
__init__是当实例对象建立完成后被调用的,而后设置对象属性的一些初始值,一般用在初始化一个类实例的时候。是一个实例方法。
也就是: __new__先被调用,__init__后被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,而后__init__给这个实例设置一些参数。
26.如何实现一个单例
只初始化一次,在数据库链接中很经常使用
单例模式是一个软件的设计模式,为了保证一个类,不管调用多少次产生的实例对象,都是指向同一个内存地址,仅仅只有一个实例(只有一个对象)。
实现单例模式的手段有不少种,但总的原则是保证一个类只要实例化一个对象,下一次再实例的时候就直接返回这个对象,再也不作实例化的操做。
方式:https://www.jb51.net/article/202178.htm
27.python查找对象属性的顺序
_getattribute_() 类属性 数据描述符 实例属性 非数据描述符 __getattr__()方法
28.SQL注入
SQL注入便是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者能够在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的状况下实现非法操做,以此来实现欺骗数据库服务器执行非受权的任意查询,从而进一步获得相应的数据信息。
本文的文字及图片来源于网络,仅供学习、交流使用,不具备任何商业用途,若有问题请及时联系咱们以做处理
想要获取更多Python学习资料能够加
QQ:2955637827私聊
或加Q群630390733
你们一块儿来学习讨论吧!