python语法类
文章平均质量分 56
python语法类
liulanba
这个作者很懒,什么都没留下…
展开
-
python实现协程
线程是轻量级的并发模型,适用于IO密集型任务。在Python中,可以使用 threading 模块创建和管理线程,由于全局解释器锁(GIL)的存在,Python中的线程并不能充分利用多核CPU,适合用于IO密集型任务。在Python中,可以使用 asyncio 模块来实现协程,它提供了事件循环(event loop)来调度协程的执行,适合用于IO密集型任务和高并发的网络应用。总的来说,进程、线程和协程是并发编程中常用的三种技术,它们各自有着不同的特点和适用场景,可以根据具体的需求选择合适的并发模型。原创 2024-03-14 12:30:33 · 408 阅读 · 0 评论 -
threading.Semaphore和threading.Lock
threading.Semaphore 是 Python 中的线程同步原语,用于控制并发线程的访问数量。Semaphore 类可以创建一个计数器,该计数器限制了同时获取资源的线程数量。其中的两个主要方法是 acquire() 和 release()。原创 2023-05-22 17:48:50 · 2624 阅读 · 0 评论 -
python运算符优先级
右移(>>):将一个二进制数向右移动指定的位数,空出的高位用 0 或 1(取决于原数的符号位)填充。按位与(&):两个二进制数的每一位都为 1 时,结果为 1,否则为 0。按位或(|):两个二进制数的任意一位为 1 时,结果为 1,否则为 0。按位异或(^):两个二进制数的对应位不同,则结果为 1,否则为 0。赋值运算符:=、%=、/=、//=、-=、+=、*=、**=乘、除、取模、取整除:* 、/、 %、 //比较运算符:、 >=右移、左移:>> 、原创 2023-04-03 21:06:48 · 6523 阅读 · 0 评论 -
python多继承
如果多个父类中有同名的方法,Python 将按照一定的顺序来决定哪个方法会被调用,这个顺序由 MRO(Method Resolution Order)来决定,Python 使用 C3 算法来计算多继承中的 MRO。MRO 算法的原则是尽可能地保持继承顺序不变,即先继承的类先被搜索,同级别的父类按照它们在类定义中出现的顺序被搜索。2.明确调用父类的方法。钻石继承指的是在一个继承关系中,某个类同时继承了两个或更多个父类,而这些父类又有一个共同的祖先类,因此在继承关系图中形成了一个钻石形状。原创 2023-04-03 20:53:25 · 10708 阅读 · 0 评论 -
TypeError: ‘int‘ object is not subscriptable
在使用python对字典排序时在该语句报错:# 按照键排序ll1=sorted(zi,key=lambda kv:(kv[0]))print(ll1)TypeError: ‘int’ object is not subscriptable原因为sorted()函数第一个参数不能为字典,而是zi.items():items() 函数以列表返回可遍历的(键, 值) 元组数组下标变量越界或者不支持下标访问的情况下会报这个错误。即对不可以相互操作的对象进行了操作或者是访问对象的方式不对。修改即可原创 2021-03-05 11:40:22 · 3895 阅读 · 2 评论 -
python3-random模块详解
python3的random模块用于生成随机数,字符串等。1.random.random()生成一个随机小数,范围在[0,1)import randomt=random.random()print(t)# 0.26357402475121152.random.int(min,max)生成[min,max]的整数型随机数import randomt=random.randint(1,10)print(t)#103.random.uniform(min,max)生成一个原创 2021-03-12 11:15:02 · 4131 阅读 · 0 评论 -
python的__init__和__new__方法
方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径,还有就是实现自定义的metaclass。()至少有一个参数self,就是这个__new__()返回的实例__init__()在__new__()的基础上完成一些初始化的操作。__call__是一个特殊的魔术方法, 它可以让类的实例的行为表现的像函数一样。3.若__new__()没有正确返回当前类cls的实例,那__init__()将不会被调用。假设x是X类的一个实例,那么调用。原创 2021-03-26 19:02:06 · 3481 阅读 · 0 评论 -
python--exec
第三个 exec(expr, {‘x’: 1, ‘y’: 2}, {‘y’: 3, ‘z’: 4}) 调用中,我们传递了一个包含 x 和 y 变量的全局字典,以及一个包含 y 和 z 变量的局部字典。第二个 exec(expr, {‘x’: 1, ‘y’: 2}) 调用中,我们传递了一个包含 x 和 y 变量的全局字典。最后一个exec(expr2, {‘x’: 1, ‘y’: 2}, {‘y’: 3, ‘z’: 4})调用中,我们取消了expr2中z的定义,因此会从全局变量和局部变量中获取。原创 2023-03-25 17:35:56 · 5262 阅读 · 0 评论 -
python默认值
执行func(10,[10])和func(110,[101])的时候结果是正常的,但是遍历的时候就出错。函数的参数默认值只会被初始化一次,并且被重复利用。当参数默认值为可变对象。脚本中含有默认参数,多次调用该方法,发现该默认值会沿用之前的结果。,则对该参数的默认值进行的任何操作实际上操作的是同一个对象。......原创 2022-04-13 23:37:00 · 3121 阅读 · 0 评论 -
Python3 中类的静态方法、普通方法、类方法
类的方法不需要访问实例时,使用普通的实例方法定义虽然可以实现功能,但会在使用时要求必须由类的实例调用此方法。静态方法用@staticmethod装饰的不带self参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用。2).在不需要访问实例也不需要访问类属性或方法时,建议使用@staticmethod将方法定义为静态方法。1).在不需要访问实例,需要访问类属性或方法时,建议使用@classmethod将方法定义为类方法;...原创 2021-03-04 13:25:19 · 3324 阅读 · 1 评论 -
python的lambda-map-reduce
这些函数在调用时会返回参数 x 与一个变量 i 的乘积,而 i 的值在每个 lambda 函数被调用之前都是最后一次循环迭代的结果,即 i 的值为 3。因此,通过为 lambda 函数添加默认参数 i=i,我们可以正确地创建一个包含多个 lambda 函数的列表,每个函数都使用不同的 i 值进行计算。这使得我们可以像期望的那样使用这些函数。接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。原创 2020-12-09 13:39:24 · 2792 阅读 · 4 评论 -
python脚本传参
1.安装顺序传参2.不按顺序传参原创 2021-08-11 21:09:35 · 6667 阅读 · 3 评论 -
python *args *kwargs
python *args *kwargspython不定参数的使用原创 2021-08-11 21:10:26 · 2236 阅读 · 3 评论 -
python的嵌套函数和闭包
在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包中外部函数返回的不是一个具体的值,而是一个函数。一般情况下,返回的函数会赋值给一个变量,这个变量可以在后面被继续执行调用,也就是上面说的“持久化”当需要多次调用某个函数时,如果将那些额外工作的代码放在外部函数,就可以减少多次调用导致的不必要开销,提高程序的运行效率。方法1 使用nonlocal nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。原创 2021-03-05 13:16:55 · 4361 阅读 · 2 评论 -
Python多进程--multiprocess
方法:is_alive() :进程是否存活join([timeout]):主进程阻塞,等待子进程的退出,join方法要在close或terminate之后使用run():进程调用start时自动调用runstart() :启动一个进程属性:authkey、daemon(要通过start()设置),exitcode(进程在运行时为None、如果为–N,表示被信号N结束)、name、pid。其中daemon是父进程终止后自动终止,且自己不能产生新进程,必须在start()之前设置。原创 2021-05-18 17:28:13 · 4099 阅读 · 2 评论 -
python--yield详解
yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个生成器,生成器对象可以被迭代,每次迭代都会从函数中的 yield 语句处恢复执行,并返回对应的值,直到函数执行完毕或者遇到了 StopIteration 异常。它是一种特殊的生成器函数,它可以使用 yield from 语法来将控制权传递给另一个生成器函数,并从中获取值,在使用委托生成器时,生成器函数的状态会被暂停,并且委托生成器会接管执行,直到它结束或者发生异常。原创 2021-05-20 11:15:34 · 2395 阅读 · 4 评论 -
python:isinstance()和issubclass()
isinstance(x,y)1.判断一个对象是否是一个已知的类型,类似于type2.判断一个对象x是否是类y的对象def isinstance(x, A_tuple): # real signature unknown; restored from __doc__ """ Return whether an object is an instance of a class or of a subclass thereof. A tuple, as in ``isin原创 2021-05-18 10:59:33 · 2385 阅读 · 3 评论 -
python获取多级目录下的 文件
需求:获取一个目录下的所有txt文件,有多少级目录并不确定,需要打印出所有txt的完整路径,这个时候第一个想法肯定是递归!随便建了一个目录用来测试,结构如图:代码如下:def getalltxt(filepath): allfiles = os.listdir(filepath) for eachfile in allfiles: if eachfile.split(".")[-1] == "txt": res.append(os.path.原创 2021-12-03 00:32:21 · 8690 阅读 · 0 评论 -
python多线程:Thread类的用法
自定义一个Thread的子类,然后复写它的run()方法3.GIL全局解释器锁(global interpreter lock),每个线程在执行时候都需要先获取GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用CPU,也就是说多线程并不是真正意义上的同时执行。Python的标准实现是CPython。CPython执行Python代码分为2个步骤:首先,将文本源码解释编译为字节码,然后再用一个解释器去 解释运行字节码。原创 2021-03-06 13:23:47 · 15697 阅读 · 1 评论 -
浅析python a,b=b,a
先看一组代码:python实现简单选择排序基本思想:假设排序表为L[1…n],第i趟排序即从L[i…n]中选择关键字最小的的元素与L[i]交换,每一趟排序可以确定一个元素的最终位置,则经过n-1趟排序可以使得整个排序表有序。实现代码1:def func1(ls): for i, _ in enumerate(ls): ls[i], ls[ls.index(min(ls[i:]))] = ls[ls.index(min(ls[i:]))], ls[i]实现代码2:def f原创 2022-04-23 14:54:39 · 3483 阅读 · 0 评论 -
python的self使用
self是什么在Python类中规定,在定义类的过程中,无论是显式创建类的构造方法,还是向类中添加实例方法,都要求将 self 参数作为方法的第一个参数,表示当前类的对象,可以调用当前类中的属性和方法。self代表类的实例,不是类本身class Test(): def testfunc(self): print(self) print(self.__class__)t=Test()t.testfunc()输出为:<__main__.Test .原创 2021-03-03 13:26:37 · 3114 阅读 · 5 评论 -
python sorket通信
创建套接字,绑定套接字到本地IP与端口:socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.bind()创建套接字,连接服务器地址:socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.connect()接收传来的数据,或者发送数据给对方:s.recv() , s.sendall()连接后发送数据和接收数据:s.sendall(), s.recv()传输完毕后,关闭套接字:s.close()原创 2022-11-05 11:18:40 · 3428 阅读 · 0 评论 -
python读写json文件
python处理json文本文件主要是以下四个函数:函数作用json.dumps对数据进行编码,将python中的字典 转换为 字符串json.loads对数据进行解码,将 字符串 转换为 python中的字典json.dump将数据写入json文件中jsonjson.load把文件打开,并把字符串变换为python数据类型json.dumps / json.loads数据转换对照:jsonpythonobjectdic原创 2021-12-15 23:41:10 · 3692 阅读 · 0 评论 -
python正则--group
group作用:python正则中,用group函数来定位括号表达式匹配到的结果中特定的字段,你可以理解为索引,有n个括号表达式group里面的索引最大值就是n,group(k)就代表第k个括号表达式匹配到的结果,group()/group(1),打印出所有的匹配结果.* 代表匹配除换行符之外的所有字符.*? 后面多个问号,代表非贪婪模式,也就是说只匹配符合条件的最少字符如果不使用括号表达式,那么只能使用group()/group(1),打印出所有的匹配结果,而不能使用group(k)impor原创 2022-05-13 00:08:43 · 7130 阅读 · 1 评论 -
python glob.glob()
glob是python的一个标准库函数,它的作用类似于shell的find,但是只能返回一级目录的查找结果,支持通配符来查找某个目录的文件,找到的文件列表以list格式返回,如果目录不存在或者找到结果为空,则返回一个空列表首先建立一个测试目录:首先打印一下当前目录的文件:glob.glob(cur_dir)和直接打印cur_dir作用一样import osimport globcur_dir = os.path.dirname(__file__)print(cur_dir)print(.原创 2021-12-08 22:45:01 · 8303 阅读 · 0 评论 -
python--装饰器
装饰器的作用:使用闭包来调用一个函数:使用装饰器代替:使用装饰器后再次调用funcA,会发现:就相当于加了两层修饰器:解决方法:使用functools.wraps函数中有参数:但是如果另一个函数有多个参数怎么办,幸好python提供了不定参数个数的解决办法:带参数的装饰器基于类实现的装饰器使用场景日志:捕获异常:...原创 2021-05-20 17:17:32 · 2482 阅读 · 3 评论 -
Python3 迭代器与生成器
迭代器1.迭代是Python最强大的功能之一,是访问集合元素的一种方式。2.迭代器是一个可以记住遍历的位置的对象。3.迭代器对象从集合的第一个元素开始访问,直到所有的元4.素被访问完结束。迭代器只能往前不会后退。5.迭代器有两个基本的方法:iter() 和 next()。6.字符串,列表或元组对象都可用于创建迭代器testlist=[1,2,3,4,5]tt=iter(testlist) #创建迭代器对象print(next(tt))#输出迭代器的下一个元素print(next(tt)原创 2021-03-04 18:26:49 · 2748 阅读 · 5 评论 -
python--route
第一个参数message为 member_name(资源名),第二个参数messages为collection_name(资源集合名),一般定义资源集合名为资源名的复数。它也是在openstack实现restful通信的方式,它被用来做将 URL 映射为 App 的 action,以及为 App的action 产生 URL。map.routematch返回结果:如果匹配到了,会返回一个二元元组,元组第一个元素为匹配到的字典,第二个元素一个Route对象。除了路由地址,其余都是附加参数,对映射进行一些处理。原创 2023-02-10 19:08:50 · 2917 阅读 · 2 评论 -
python3的list方法总结
1.list.append(x) 把一个元素添加到列表表尾,相当于:a[len(a):] = [x]a=[1,2]a[len(a):] = [3]print(a)tt=[]for x in range(5): tt.append(x)print(tt)# [1, 2, 3]# [0, 1, 2, 3, 4]list.extend(L) 通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = Ltt=[]for x in range(5): .原创 2021-03-05 16:53:20 · 2993 阅读 · 2 评论 -
python集合的并交差操作
创建两个集合用于测试,创建集合可以用两种方式,{}或者set,但是不能用{}创建空集合,因为s={}表示创建一个空字典s1 = {}print(type(s1))s2 = set()print(type(s2))s3 = {1,2,3}print(type(s3))# <class 'dict'># <class 'set'># <class 'set'>1.集合的并 unionset1.union(set2, set3…)返回值:返回一个新原创 2021-12-08 23:23:19 · 4940 阅读 · 0 评论 -
python setattr/getattr
因此,getattr 用于获取对象的属性值,如果属性不存在则引发异常或返回默认值,而 hasattr 用于检查对象是否拥有指定的属性,返回布尔值表示属性的存在与否。如果对象中不存在该属性,则会引发 AttributeError 异常,除非提供了默认值参数 default,在属性不存在时返回该默认值。2.get获取到不存在的键返回None;getattr 用于获取对象中指定名称的属性值。如果对象中不存在该属性,则返回 False。如果对象中存在该属性,则返回 True。如果对象中存在该属性,则返回属性的值。原创 2022-11-21 09:52:33 · 2431 阅读 · 0 评论 -
python的深拷贝和浅拷贝
关于python的拷贝:原创 2021-05-18 12:41:56 · 2332 阅读 · 0 评论 -
python正则表达式 ?和?:
括号在正则表达式中创建一个“捕获”组,通过在开头添加“?,则会匹配尽可能多的字符串,加上?非贪婪方式,仅仅匹配0个或1个由前面的正则表达式定义的片段。创建一个“捕获”组,对正则表达式分组并记住匹配的文本。......原创 2022-04-13 23:37:41 · 4243 阅读 · 0 评论 -
python动态变量的定义和调用
需求:生成多个变量名并赋值方法:exec/命名空间1.exec直接上代码:lis = ['a', 'b', 'c']for x in lis: exec("args_{} = {}".format(x, x))exec('print(args_a)')你以为这样就可以打印出args_a这个变量:a吗,当然不可以:Traceback (most recent call last): File "E:/test/testuse.py", line 3, in <module&原创 2021-12-20 23:39:53 · 4973 阅读 · 2 评论 -
python @property setter/deleter
这是因为调用s.name时,首先转换为方法调用,在执行执行self.name时,又视为访问self的属性,于是又转换为方法调用,造成无限递归,最终导致栈溢出报错RecursionError。错误示例2:要修改的变量名和方法名不一致,在执行修改操作的时候,并没有调用 @get_value.setter。1.定义的方法名称必须要是变量名(如属性名是name,那函数名称就为name,不能为其他的),但是没有办法检查检查参数,导致可以任意设置对象属性.2.属性的方法名不要和实例变量重名。原创 2022-11-21 14:30:36 · 2383 阅读 · 1 评论 -
python具名形式
其中与关键字重名的 ‘def’ 和重复的 ‘abc’ 都被替换成了 ‘_索引值’,因此:如果元素名称中含有 python 的关键字,则必须设置为 rename=True,如果设置为False则会报错ValueError。通过具名元组类创建出来的具名元组对象,其内部元素支持属性查找(点号语法)、索引操作(方括号语法),并且是可迭代的。namedtuple 返回一个元组的子类(即具名元组类),类名为 typename。比如 [‘x’, ‘y’]、(‘x’, ‘y’)field_names:具名元组的字段名。原创 2023-01-30 21:07:18 · 2425 阅读 · 0 评论 -
python __slots__
类的__slots__用于显式地为对象绑定数据成员属性,并不针对每个实例自动生成__dict__和__weakref__,__slots__可以是字符串,可迭代对象或者以多个成员属性命名的字符串组成的序列,通过__slots__减少实例占用的内存空间。创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,当类示例较多时,就难以管理,这时需用使用__slots__来加强管理类的成员属性。__slots__定义的属性仅对当前类实例起作用,对继承的子类不起作用。__dict__属性丧失。原创 2022-11-21 15:11:07 · 3042 阅读 · 0 评论 -
python-- for break浅析
意思是如果if条件满足,内层else即break,则不会执行外层的else。若if一直不满足,则会执行外层的else。原创 2023-02-03 11:10:07 · 5837 阅读 · 0 评论 -
python 单例模式浅析
单例模式是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。单例模式保证了在程序的不同位置都可以且仅可以取到同一个对象实例:如果实例不存在,会创建一个实例;如果已存在就会返回这个实例。因为单例是一个类,所以你也可以为其提供相应的操作方法,以便于对这个实例进行管理。原创 2022-11-26 11:56:23 · 4294 阅读 · 0 评论 -
python魔法方法
(self, item):用于确定一个对象是否包含在另一个对象中,例如,测试列表是否包含一个特定的值。(self, other):用于执行两个对象的加法操作,例如,将两个字符串或列表连接在一起。(self, other):用于执行两个对象的乘法操作,例如,将一个字符串或列表重复多次。(self):返回一个可读性好的对象的字符串表示,用于调试和日志记录。(self):返回一个对象的字符串表示,用于调试和记录对象的状态。(self):返回对象的长度,例如,字符串的长度或列表的长度。原创 2023-03-09 17:33:09 · 4162 阅读 · 0 评论