-
python中的类方法、类实例方法、静态方法有什么区别?
类方法:是类对象的方法,在定义时需要在上方使用“@classmethod”进行装饰,形参为 cls 表示类对象,类对象和实例对象都可调用。
类实例方法:是类实例化对象的方法,只有实例对象可以调用,形参为 self ,指代对象本身
静态方法:是一个任意函数,在其上方使用“@staticmethod”进行装饰,可以用对象直接调用,静态方法实际上跟该类没有太大关系。 -
python函数调用的时候参数的传递方式是值传递还是引用传递?
python的参数传递有:位置参数、默认参数、可变参数、关键字参数
函数的传值到底是值传递还是引用传递,要分情况:
不可变参数值传递:像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象。
可变参数是引用传递的:
比如像列表,字典这样的对象是通过引用传递的、和c语言里面的指针传递数组很类似,可变对象能在函数内部改变。 -
对缺省参数的理解?
缺省参数指在调用函数的时候没有传入参数的情况下,调用默认的参数,在调用函数的同时赋值时,所传入的参数会代替默认参数。
*args 是不定长参数,它可以表述输入参数的不确定的,可以是任意多个
**kwargs 是关键字参数,赋值的时候是以 = 值的方式,参数是可以任意多对在定义函数的时候不确定会有多少参数会传入,就可以使用两个参数。 -
装饰器
本质上是一个函数,它可以在不改变原函数原有功能的前提下,增加其功能。from time import ctime, sleep def timefun(func): def wrapped_func(): print("%s called at %s" % (func.__name__, ctime())) func() return wrapped_func @timefun def foo(): print("I am foo") foo() sleep(2) foo()
上面代码理解装饰器执行行为可理解成
foo = timefun(foo) # foo先作为参数赋值给func后,foo接收指向timefun返回的wrapped_func foo() # 调用foo(),即等价调用wrapped_func() # 内部函数wrapped_func被引用,所以外部函数的func变量(自由变量)并没有释放 # func里保存的是原foo函数对象
-
解释一下什么是闭包?
在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包。 -
谈谈你对多进程、多线程、以及协程的理解?
进程:一个运行的程序就是一个进程,没有运行的代码叫做程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享,开销大。
线程:调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在一个进程至少有一个线程叫做主线程,而多个线程之间共享内存,从而极大的提高了程序的运行效率。
协程:是一种用户态的轻量级线程,协程的调度完全由用户控制。 -
同步、异步、阻塞、非阻塞?
同步:多个任务之间有先后顺序执行,一个执行完下一个才能执行。
异步:多个任务之间没有先后顺序,可以同时执行有时会一个任务可能要在必要的时候获取另一个同事执行的任务结果,这个就叫做回调。
阻塞:如果卡住了调用者,调用者不能继续往下执行,就是说调用者阻塞了。
非阻塞:如果不会卡住,可以继续执行,就说非阻塞。
同步异步对于多任务而言,阻塞非阻塞相对于代码执行而言。 -
进程、线程的应用场景?
多进程适合在CPU密集型操作
多线程适合在IO密集型操作 -
线程是并行还是并发?进程呢?
线程是并发,进程是并行
并行:同一时刻多个任务同时运行
并发:在同一时间间隔内多个任务都在运行,但是并不会在同一时刻同时运行,存在交替执行的情况。
下一章节 我们来说网络编程
喜欢的话就关注一波呗!
来源:CSDN
作者:爱吃肉的羊呐
链接:https://blog.csdn.net/qq_42735982/article/details/104339090