range迭代器
创建range的对象
range(数值)
range(起点值,终点值)
range(起点值,终点值,步长)
它的效果相当于给我们快速的生成了一个列表
但是,它比列表省空间,效率高
列表生成式
-
特点
节省空间,比直接的列表要省空间
-
写法
生成的列表 = [变量 for 变量 in 容器]
-
案例
一行代码打印九九乘法表
print(([(['%s*%s=%-2s' % (y, x, x*y) for y in range(1, x+1)]) for x in range(1, 10)]))
模块与包的导入
当我们需要导入一个模块时可使用import
或者 from...import
方式来导
执行命令后,解释器会根据优先级来寻找
1,最优先,从当前执行文件所在的工作目录开始找
2,根据环境变量的顺序依次查找
只要一找到对应的要导入的内容,就会停止继续的搜寻
import
-
导入方式
import 模块名
举例
import pygame
-
调用方式
模块名.标识符
举例
pygame.Rect()
from…import
-
导入方式
从目录中导入模块
from 目录1.目录2 import 模块
从模块中导入标识符
from 模块 import 标识符
从模块中导入所有标识符
from 模块 import *
-
调用方式,使用模块内的标识符
从目录中导入模块的情况
模块.标识符
从模块中导入标识符
直接使用
标识符
注意
a模块导入了自定义的b模块
单独执行a模块是可以获取b中标识符的数据的
如果,m.py导入了a模块,并且m模块与a模块不在同一级目录
当以m.py启动时,会出现报错
# 多线程
## 线程的模块
import threading
thread
英 [θred] 美 [θred]
n.
(棉、毛、丝等的)线;线索;脉络;思绪;思路;贯穿的主线;线状物;细细的一条
v.
穿(针);纫(针);穿过;(使)穿过;通过;穿行;穿成串;串在一起
## 线程对象的创建
创建一个线程,指向的函数,不接收参数的情况
t = threading.Thread(target=函数名)
创建一个线程,指向的函数,收参数的情况
t = threading.Thread(target=函数名, args=(实参1,))
target
英 [ˈtɑːɡɪt] 美 [ˈtɑːrɡɪt]
n.
目标;指标;(攻击的)目标,对象;靶;靶子
v.
把…作为攻击目标;把…作为批评的对象;面向,把…对准(某群体)
## 让线程对象t开始工作
t.start()
start
英 [stɑːt] 美 [stɑːrt]
v.
开始,着手,动手(做或使用);(使)发生,开始进行;开动;发动;启动
n.
开头;开端;开始;起始优势;良好的基础条件
## 主线程与子线程的关系
生命周期
我们的py文件运行起来的时候,就会有一个主线程
当子线程对象创建后,当子线程对象运行时,才会创造出来新的线程,叫做子线程
子线程如果代码没有运行结束,主线程是会等待子线程的
直接子线程全部运行完毕
主线程才会结束
# 进程与线程的关系
## 进程的主要功能
分配资源
## 线程的主要功能
执行任务
## 包含关系
进程包含线程
每开一个进程出来,都必然会有一个主线程
进程提供了资源(内存空间)
线程主要执行任务
# 多进程
## 多进程的模块
import multiprocessing
多种方式前进
## 创建一个进程对象
p = multiprocessing.Process(target=函数名)
``
让进程对象p开始工作
p.start()
multi
英 ['mʌlti] 美 [ˈmʌlti]
n.
多种;多数
process
英 [ˈprəʊses , prəˈses] 美 [ˈprɑːses , prəˈses]
n.
(为达到某一目标的)过程;进程;(事物发展,尤指自然变化的)过程,步骤,流程;做事方法;工艺流程;工序
v.
加工;处理;审阅,审核,处理(文件、请求等);数据处理
v.
列队行进;缓缓前进
第三人称单数: processes 复数: processes 现在分词: processing 过去式: processed 过去分词: processed
派生词: processing n.
记忆技巧:pro 向前 + cess 行走,前进 → 向前走的〔历程〕→ 过程
process的现在分词
ing代表正在进行某个事件
eat,吃
eating,正在吃
thread
threading
进程对象p的等待连接
p.join()
功能特性:
当代码读到这个命时
解释器会关注一下进程对象p它是否已经执行完成了
如果,没有执行完成,卡住
直到p的代码全部执行结束,才会通
查看进程的id
查看当前进程的id
os.getpid()
``
get,得到
p,process,进程
id,编号
通过进程对象查
查看当前进程的父进程id
os.getppid()
p,parent,父母
判断进程对象p是否存活
p.is_alive
# 进程与线程的比较
## 多线程可以共享全局变量
# 线程锁
- 功能
解决多个线程同时使用全局变量,有可能会造成的数据的混乱
- 如何创建锁
锁对象 = threading.Lock()
lock
英 [lɒk] 美 [lɑːk]
v.
(用锁)锁上;被锁住;把…锁起来;(使)固定,卡住,塞住
n.
锁;车锁;制动器;锁定器;制轮楔;(机器部件等的)锁定
- 如何使用锁
- 上锁
```
锁对象.acquire()
```
```
acquire
英 [əˈkwaɪə(r)] 美 [əˈkwaɪər]
v.
(通过努力、能力、行为表现)获得;购得;获得;得到
```
- 解锁
```
锁对象.release()
```
```
release
英 [rɪˈliːs] 美 [rɪˈliːs]
v.
释放;放出;放走;放开;松开;使自由移动(或飞翔、降落等);发泄;宣泄
n.
释放;获释;公开;发行;发布;新发行的东西;(尤指)新激光唱片,新电影
```
# 进程锁
- 创建锁
进程锁对象 = multiprocessing.Lock()
- 使用锁
- 上锁
```
进程锁对象.acquire()
```
- 解锁
```
进程锁对象.release()
```
# 守护进程
进程对象.daemon = True
daemon
英 [ˈdiːmən] 美 [ˈdiːmən]
n.
(古希腊神话中的)半神半人精灵
# 信号量
- 创建对象
信号量对象 = multiprocessing.Semaphore(钥匙的数量)
Semaphore
英 [ˈseməfɔː®] 美 [ˈseməfɔːr]
信號量;旌旗灯号量;信号量;信号灯;信号
- 使用
- 获得-从面版上拿
```
信号量对象.acquire()
```
- 释放-归还到面版上
```
信号量对象.release()
```
# 同步与异步
# 阻塞与非阻塞