![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Python3学习
以例子为主,逐步了解Python语言的使用
sinat_27016095
这个作者很懒,什么都没留下…
展开
-
Python3 垃圾回收机制总结
垃圾回收是指一种自动的存储器管理机制。当某个程序占用的一部分内存空间不再被这个程序访问时,这个程序会借助垃圾回收算法向操作系统归还这部分内存空间。垃圾回收器可以减轻程序员的负担,也减少程序中的错误。Python也支持垃圾回收,下面介绍两种垃圾回收的机制。1.引用计数在Python中每一个对象的核心就是一个结构体PyObject,它的内部有一个引用计数器(ob_refcnt)。程序在运行的过程中会实时的更新ob_refcnt的值,来反映引用当前对象的名称数量。当某对象的引用计数值为0,那么它的内存就会被立原创 2020-11-03 21:19:19 · 407 阅读 · 0 评论 -
Python3 多线程问题
线程是操作系统能够进行运算调度的最小单位。大部分情况下,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见的,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序原创 2020-11-15 20:44:11 · 144 阅读 · 0 评论 -
Python3 协程问题
协程可以通过yield (取其“让步”之义而非“出产”)来调用其它协程,接下来的每次协程被调用时,从协程上次yield 返回的位置接着执行,通过yield 方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称、平等的。而python3也支持协程,举个例子:def simple_coroutine(): print('-> coroutine started') x = yield print('-> coroutine received:', x)原创 2020-11-11 22:02:06 · 139 阅读 · 0 评论 -
Python3 运算符重载问题
在某些圈子中, 运算符重载的名声并不好。 这个语言特性可能(已经)被滥用, 让程序员困惑, 导致缺陷和意料之外的性能瓶颈。 但是, 如果使用得当, API 会变得好用, 代码会变得易于阅读。 Python3 施加了一些限制, 做好了灵活性、 可用性和安全性方面的平衡:1.不能重载内置类型的运算符2.不能新建运算符, 只能重载现有的3.某些运算符不能重载——is、 and、 or 和 not(不过位运算符&、 | 和 ~ 可以)下面来举一个运算符重载的例子:class Test:原创 2020-10-26 21:39:36 · 251 阅读 · 0 评论 -
Python3 闭包的使用
闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。变量的作用域仅限于包含它们的函数,因此无法从其它程序代码部分进行访问。不过,变量的生存期是可以很长,在一次函数调用期间所创建所生成的值在下次函数调用时仍然存在。正因为这一特点,闭包可以用来完成信息隐藏,并进而应用于需要状态表达的某些编程范型中。我们来看下在python中是如何使用闭包的把:def make_averager(): series = [] def aver原创 2020-10-06 22:26:24 · 91 阅读 · 0 评论 -
Python3 变量赋值问题
一般的编程语言都有两种值传递的方式,引用传递和值传递。Python3也同样支持这两种方式。我们先来看下值传递的例子:A = 1B = Aprint(A,B)A = 2print(A,B)输出如下:1 12 1可以看到我们把A的值改变了但是B的值没有改变,所以数字的传递是值传递的。再来看一个引用传递的例子:A = [1,2,3,4,5]B = Aprint(A,B)A[2] = 100print(A,B)输出如下:[1, 2, 3, 4, 5] [1, 2, 3, 4,原创 2020-10-14 21:04:25 · 279 阅读 · 0 评论 -
Python3 线程池问题
线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。 例如,线程数一般取cpu数量+2比较合适,线程数过多会导致额外的线程切换开销。任务调度以执行线程的常见方法是使用同步队列,称作任务队列。池中的线程等待队列中的任务,并把执行完的任务原创 2020-11-25 21:42:22 · 301 阅读 · 0 评论 -
Python3 排序函数问题
我们都知道许多高级语言,都自带了排序函数,能更方便的让我们使用它。Python3又该如何调用呢?举个例子:test = [5, 3, 6, 7]print(test)test.sort()print(test)输入如下:[5, 3, 6, 7] [3, 5, 6, 7]可以看到,当我们使用内置的sort函数来进行排序的时候,实际上是改变了原有的顺序。如果我们不想改变原有的数据,而想得到排序结果,那应该怎么办呢?此时python3 内置的sorted函数就派上用场了。test = [5,原创 2020-10-04 14:22:10 · 126 阅读 · 0 评论 -
Python3 正则匹配问题
Python3通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。举个例子:import repattern = re.compile(r'This')match = pattern.match('This is a test')if match:print (match.group())输出如下:This正则表原创 2020-10-20 21:56:00 · 393 阅读 · 0 评论 -
Python3 set问题
集合是一种鲁棒性很好的数据结构,当元素顺序的重要性不如元素的唯一性和测试元素是否包含在集合中的效率时,大部分情况下这种数据结构极其有用。 set是一种可变的、无序的、有限的集合,其元素是唯一的、不可变的(可哈希的)对象。 CPython中集合和字典非常相似。事实上,集合被实现为带有空值的字典,只有键才是实际的集合元素。此外,集合还利用这种没有值的映射做了其它的优化。由于这一点,可以快速的向集合中添加元素、删除元素、检查元素是否存在。平均时间复杂度为O(1),最坏的事件复杂度是O(n)。集合..原创 2021-06-20 21:40:51 · 373 阅读 · 0 评论 -
Python3 单例模式问题
单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模式的一种。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。1 使用__new__方法class Singleton(object): def __new__(c原创 2021-03-09 20:15:43 · 115 阅读 · 0 评论 -
Python3 with关键字问题
任何一门编程语言中,文件的输入输出、数据库的连接断开等,都是很常见的资源管理操作。但资源都是有限的,在写程序时,必须保证这些资源在使用过后得到释放,不然就容易造成资源泄露,轻者使得系统处理缓慢,严重时会使系统崩溃。例如,前面在介绍文件操作时,一直强调打开的文件最后一定要关闭,否则会程序的运行造成意想不到的隐患。但是,即便使用 close() 做好了关闭文件的操作,如果在打开文件或文件操作过程中抛出了异常,还是无法及时关闭文件。为了更好地避免此类问题,不同的编程语言都引入了不同的机制。在 Pyt原创 2021-04-02 22:30:18 · 136 阅读 · 0 评论 -
Python3 Flask框架主流程源码分析(二)
上一篇(https://blog.csdn.net/sinat_27016095/article/details/114991016 link)说到Flask所用到的IO模型是poll这个函数,我们继续来看源码def serve_forever(self, poll_interval=0.5):###with _ServerSelector() as selector: selector.register(self, selectors.EVENT_READ) while not原创 2021-03-21 21:47:11 · 177 阅读 · 0 评论 -
Python3 Flask框架主流程源码分析(一)
Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。Flask使用BSD授权。Flask被称为“微框架”,因为它使用简单的核心,用扩展增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension[2]加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。举个例子,一下是一个helloworld的简单demo:from flask import Fla原创 2021-03-18 21:13:56 · 227 阅读 · 3 评论 -
Python3 协程asynico问题
协程的切换不同于线程切换,是由程序自身控制的,没有切换的开销。协程不需要多线程的锁机制,因为都是在同一个线程中运行,所以没有同时访问数据的问题,执行效率比多线程高很多。因为协程是单线程执行,那怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。举个例子:import asyncioasync def display(num): at = 5 t = 1 while True: print('Loop:原创 2021-04-04 21:50:07 · 222 阅读 · 1 评论 -
Python3 dict问题
在Python3.6之前,字典是无序的,但是Python3.7+,字典是有序的。我们可以使用 dict [ key ] 来获取所需要的值。通过 key 访问 dict 的 value,只要 key 存在,dict就返回对应的 value。如果key不存在,会直抛出 KeyError 异常。怎么避免KeyError错误?有两种方法:第一种使用 key in dict 选判读字典中是否存在此key;另一种是 dict 自带的 ge t方法 dict.get(key) ,在 key 不存在的时候,返回 No原创 2021-06-07 22:45:09 · 120 阅读 · 0 评论 -
Python3 list问题
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。Python中的list数据结构实现要更比想象的更简单一些,保留了数组内存连续性访问的方式,只是每个节点存储的不是实际数据,而是对应数据的指针,以一个指针数组的形式来进行存储和访问数据项。 既然是一个动态数组,则必然会面临一个问题,如何进行容量的管理,大部分的程序语言对于此类结构使用动态调整策略,也就是当存储容量达到一定阈值的时候,扩展容量,当存储容量低于一定的阈值的时候,缩减容量。如何添加列..原创 2021-06-14 22:27:35 · 166 阅读 · 0 评论 -
Python3 hash函数问题
hash()函数返回对象的哈希值(如果有的话)。 哈希值是整数。 它们用于在字典查找期间快速比较字典关键字。 对象可以实现__hash__()方法。hash函数只可用于不可变的python对象print(hash(123))print(hash('123'))print(hash((1,2,3)))输出如下:1232842006114551993819 529344067295497451注意:数字的hash值是他自生,而其他的对象的hash值每次运行的都会不一样,这主要是由于py原创 2021-03-03 20:30:34 · 889 阅读 · 1 评论 -
Python3 函数多返回值问题
我们都知道,作为脚本语言,函数返回多个值是一件很方便的事情举个例子:def ttt(): return 3,4,5a,b,c = ttt()可以看到ttt这个函数返回了3个值,并且给到了a,b,c。但是我们稍加改造,就会出现以下问题:def ttt(): return 3,4,5a,b = ttt()ValueError: too many values to unpack (expected 2)为什么我们不能只给a和b赋值呢?通过查阅资料,我们了解到,Python函原创 2020-09-13 21:45:39 · 940 阅读 · 0 评论 -
Python3 str与byte互转问题
我们都知道,作为python作为脚本语言,可以用str与byte来表示字符串。而我们使用函数得到的字符串未必是我们想要的类型,因此我们需要将字符转成同一类型来处理。# bytes object b = b"this is byte" # str object s = "this is str" # str to bytes bytes(s, encoding = "utf8") # bytes to str str(b, encoding = "utf-8") # an alter原创 2020-09-20 21:31:49 · 862 阅读 · 0 评论