
Python
Q z1997
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Python: 迭代器 生成器 协程 异步I/O(asyncio)
迭代器和生成器 迭代器 概念上: 迭代器可以用来表示一个数据流, 提供了数据的惰性返回功能(只有我们主动去使用next方法调用, 才会返回值). 实现上: 实现了__next__接口的对象 传统声明一个列表, 里面的元素会立即写进内存当中, 占用大量内存. 迭代器可以一次只返回一个元素, 占用内存非常小, 在读取大文件和大的数据集合的时候特别有用 通过iter方法返回一个迭代器对象 # 两者实现的功能是一摸一样的 l = list(range(10**7)) l2 = iter(range(10原创 2022-05-27 17:31:27 · 467 阅读 · 0 评论 -
Python:进程通讯和线程通讯
进程间通信(IPC) 文件 通过读写文件来进行变量, 数据, 信息的传递 读写冲突 两个进程同时进行写, 或者一个写一个读, 造成了冲突. 解决读写冲突 互斥锁 from multiprocessing import Process, Lock def save_to_file(index, lock): with lock: with open("test.log", "a", encoding="utf-8") as f: f.wri原创 2022-05-27 17:29:42 · 349 阅读 · 0 评论 -
Python: 全局解释器锁(GIL)
计算密集型 主要占用cpu资源 IO密集型 IO就是input output, 需要等待的一些任务 网络请求会有网络延迟 和数据库交互需要等待数据库查询事件 读写硬盘 多进程在处理计算密集型程序的时候比多线程块 由于全局解释器锁的存在, 一个进程下, 只允许一个线程执行Python程序的字节码(当前代码文件的二进制表示). 简单地说, 创建的10个线程其实在争夺一个cpu资源. 但是遇到io操作会让渡cpu资源. 如何绕过GIL? 将多线程方法改为多进程 将计算密集型任务转移给C扩展..原创 2022-05-27 17:27:57 · 108 阅读 · 0 评论 -
Python: 多线程和多进程
什么是进程?什么是线程? 进程: 可以简单地认为是一个程序. 进程是操作系统分配资源的最小单位. 线程: 一个进程可以有多个线程, 每个线程可以独立完成一些任务. 线程是操作系统进行运算调度的最小单位. 多线程demo from threading import Thread for i in range(10): # 只是创建了线程对象 t = Thread(target=request_baidu) # 启动线程 t.start() 多进程dem..原创 2022-05-27 17:27:24 · 142 阅读 · 0 评论 -
Python: requests模块的介绍
requests模块的介绍 requests的作用 通过python来模拟请求网址 一个模拟请求由以下四个部分组成 url method body headers 模拟请求百度 没有安装requests库的同学, 在当前python环境下执行以下语句安装第三方库 pip install requests import requests def request_baidu(): url = "https://www.baidu.com/" # body = ""原创 2022-05-27 17:26:50 · 127 阅读 · 0 评论 -
Python基础-闭包和装饰器
闭包和装饰器 闭包 闭包指延申了作用域的函数, 也就是作用域中的Enclosed的概念 def make_averager(): series = [] def averager(value): series.append(value) total = sum(series) return total / len(series) return averager # my_avg就是延申了作用域的函数 # series就是被延申作用原创 2022-05-05 09:42:20 · 168 阅读 · 0 评论 -
Python基础-面向对象
类的创建, 实例化, 初始化 什么是类 类就是拥有相同功能或者相同属性的对象集合 类的创建 object是所有类的基类 class GoGamer(object): subject = 'go' print(GoGamer) 类的实例化 实例就是抽象概念的具象化 kejie = GoGamer() print(kejie) 类的初始化 类创建一个新实例的时候会默认调用__init__这样一个特殊方法 class GoGamer(object): subject原创 2022-05-05 09:41:55 · 100 阅读 · 0 评论 -
Python基础-导入第三方模块
导入第三方模块 导包的层级关系 模块(module) 以文件为载体, 包含各类对象 包(package) 以文件夹为载体, 包含了各类模块 库(lib) 包含了各类包 import 库 from 库/模块 import 模块/函数 导包的命名冲突 通过as这个关键词来给当前模块/函数取个别名 from datetime import datetime as p_datetime 时间模块time 调用的都是系统级的接口, 提供时间的访问和转换的功能 查看时间 获原创 2022-05-05 09:42:07 · 433 阅读 · 0 评论 -
Python基础-作用域
作用域 程序创建, 访问, 改变一个变量时, 都是在一个保存该变量的空间内进行, 这个空间被称为命名空间, 即作用域 Built-in 内置 可以在Python环境中的任何模块, 任意位置访问和调用 Global 全局变量 只作用于当前模块(可以理解为当前文件) 可以简单地理解为定以在函数外的变量就是全局变量, 如果在函数体定义那就时局部变量. 如何将局部变量变成全局变量? 使用global关键字 a = 1 def foo(): global a a = 2原创 2022-05-05 09:43:12 · 92 阅读 · 0 评论 -
Python基础-函数高级
重新认识函数 内置函数 认识Python自带的, 可全局调用的函数, 避免我们命名冲突导致了函数性状发生改变 查看Python携带的内置函数 from pprint import pprint # 格式化输出的库 pprint(dir(__builtins__)) 常见的内置函数 str >>> str(1.0) '1.0' int >>> int(1.0) 1 >>> int("1.0") Traceback (most r原创 2022-05-05 09:43:22 · 99 阅读 · 0 评论 -
Python基础-Python的异常与处理
异常 程序遇到严重错误时, 会终止程序的运行并抛出异常 def my_sub(a, b): return a / b my_sub(1, 0) 捕获异常 try: 表达式 except [Exception] as e: 表达式 finnaly: 表达式 try: print('try') except Exception as e: print('except') else: print('else try 正常退出执行')..原创 2022-05-04 09:15:22 · 158 阅读 · 0 评论 -
Python基础-逻辑控制语句
Python的逻辑控制语句 条件判断语句 if elif else a = 50 if a > 100: print("a 超过阈值") elif a == 50: print("a 只有阈值的一半") else: print("a 小于阈值") 循环语句 for 遍历一个可迭代对象(暂时理解为list), 会影响相同作用域当中的变量 l = [1, 2, 3, 4, 5, 6] e = 0 for e in l: print(e) f原创 2022-05-04 09:01:07 · 610 阅读 · 0 评论 -
Python基础-基础数据结构的CRUD操作(list,set,tuple,dict)
基础数据结构的CRUD操作 List(列表) list中存的元素是引用 create(增加) append 末尾添加元素 >>> l = [] >>> id(l) 55200584 >>> l.append("a") >>> l ['a'] >>> id(l) 55200584 + 和+= + 拼接两个列表, 然后返回一个新列表 += >>> l = ['a'] >&g原创 2022-05-04 08:56:43 · 358 阅读 · 0 评论 -
Python基础-字符串
字符串(字符序列)和字节序列 字符 由于历史原因, 将字符定义为unicode字符还不够准确, 但是未来字符的定义一定是unicode字符 字节 就是字符的二进制表现形式 码位 我们计算机显示的实际上是码位 >>> '你好'.encode("unicode_escape").decode() '\\u4f60\\u597d' >>> >>> '\u4f60\u597d' '你好' UNICODE标准中以4~6个十六进制数字表示原创 2022-05-04 08:42:56 · 110 阅读 · 0 评论 -
Python基础-运算符
Python的运算符 算术运算 + - * 乘法 / 除法 // 整除 % 取余数 ** x的y次幂 开方(没有提供直接的运算符) x ** (1/2) abs() 取绝对值 赋值运算 通过=赋值 a = 1 比较运算 比较的是两个对象的字面值, 字面值暂时可以简单地理解为输出值 < > <= >= == 等于 != 不等于 标识号比较运算 比较的是两个变量的内存地址 is is not原创 2022-05-04 08:39:13 · 127 阅读 · 0 评论 -
Python基础-运算符
Python的运算符 算术运算 + - * 乘法 / 除法 // 整除 % 取余数 ** x的y次幂 开方(没有提供直接的运算符) x ** (1/2) abs() 取绝对值 赋值运算 通过=赋值 a = 1 比较运算 比较的是两个对象的字面值, 字面值暂时可以简单地理解为输出值 < > <= >= == 等于 != 不等于 标识号比较运算 比较的是两个变量的内存地址 is is not原创 2022-05-04 08:37:19 · 572 阅读 · 0 评论 -
Python基础-函数的基本介绍
Python函数的基本介绍 什么是函数? 函数是一段可以直接被另外一段程序或代码引用的程序或代码, 也叫做子程序, 方法. 可重复使用 可互相调用 函数的目的 为了代码段的复用 在Python中如何定义一个函数? def foo(arg): return "Hello " + str(arg) 函数的组成 参数列表 必须参数 当前参数必须按顺序传入 关键字参数 根据关键字参数传参可以无视顺序 def foo(arg=None, arg_2=None) 默认参数原创 2022-05-04 08:36:53 · 91 阅读 · 0 评论 -
Python基础-基本变量
变量和赋值 什么是变量 一个实体的指代 查看变量的内存地址 id(x) 可重新赋值 为变量赋值 通过=来赋值 x = 3 被重新赋值之后的值去哪了? 被系统回收了. Python的常量 python没有常量这个数据类型 程序员之间的约定: 如果这个变量的命名都是大写字母, 那么就视为一个常量 Python的六大基本类型 *强调基本的原因数据类型和数据结构指向的范围更加广泛, 不要产生错误的认知, 形成思维定式 通过type()函数来查看当前变原创 2022-05-04 08:33:27 · 299 阅读 · 0 评论