技术标签: python
上下文Context:程序执行中某个状态
上下文管理器:一个可以在程序中加载独立上下文的对象
#cm.__enter__()执行开始,返回结果绑定给对象引用
with <表达式> as <对象引用>:
<语句块>
#cm.__exit__()执行结果,退出上下文区域
with open('from_f.txt','r') as fi, \
open('to_f.txt','r') as fo:
for line in fi:
fo.write(line)
如何使用上下文管理器
class DemoClass:
def __init__(self,name):
self.name=name
def __enter__(self): #重载__enter__()方法
print('进入上下文管理器')
return self #as 引用是__enter__()返回值
def __exit__(self,exc_type,exc_val,exc_tb): #__exit__()方法
print('退出上下文管理器')
def run(self):
print('DemoClass的某个实例对象在运行')
with DemoClass('Python123') as d:
d.run()
'''
进入上下文管理器
DemoClass的某个实例对象在运行
退出上下文管理器
'''
迭代器类型 iterator types:实现容器中元素的迭代
迭代器类型 iterator types:实现容器中元素的迭代
迭代器类型:原理实例
class DemoIterator:
def __init__(self,container):
self.container=container
self.salt=len(self.container)
def __iter__(self):
return self
def __next__(self):
self.salt-=1
if self.salt>=0:
return self.container[self.salt]
else:
raise StopIteration
di=DemoIterator([1,2,3,4,5,6,7,8])
for i in di:
print(i,end=' ')
#输出:
#8,7,6,5,4,3,2,1
迭代器类型 iterator types:实现容器中元素的迭代
生成器Generator: 快速实现迭代器类型的方式
生成器Generator: 快速实现迭代器类型的方式
普通函数
计算资源被浪费
生成器:设计实例
def getValue(max):
import random
ls=list(range(10))
print(ls,end=",")
for i in range(max):
yield ls[random.randint(0,9)]
for i in getValue(10):
print(i)
#输出为:
'''
[0,1,2,3,4,5,6,7,8,9],0
9
9
0
3
0
4
2
9
5
'''
生成器函数的设计原则
装饰器Decorator: 以函数为参数实现其额外功能更新
装饰器Decorator: 以函数为参数实现其额外功能更新
def f(...):
...
f=staticmethod(f)
上面实例等价下面实例
@staticmethod
def f(...):
...
语法糖 Syntactic Sugar: 方便使用但无实质功能的语法
@f1(arg)
@f2
def func():
pass
#等价于
f1(arg)(f2(func))
装饰器
装饰器设计:实例
def bar(foo):
'''
装饰器函数必须返回一个函数对象引用
否则,无法利用语法糖
因此,需要内部定义一个函数
建议:都用wrapper这个名字
函数就是一段代码
如果没有语法糖,不必要非定义函数
'''
def wrapper(a): #wrapper函数要包含printA()所用参数
print("{:*^20}".format('BEGIN')) #wrapper函数内部要完成功能扩展
foo(a)
print("{:*^20}".format('END'))
return wrapper
@bar #装饰器的语法糖,此时原函数不再是原函数
def printA(a): #原函数:有一个参数
print("这是变量{}".format(a))
printA("Python123")
'''
这是变量Python123
******BEGIN*********
这是变量Python123
*******END**********
'''
装饰器使用场景
协程Coroutine:在程序层面的多段代码异步执行
async的用法
async def foo(): #协程函数
pass
async with lock: #协程上下文管理器
pass
async for data in pipeline: #协程迭代器
pass
await的用法
async def foo(db):
data=await db.fetch('SELECT ...') #在异步函数中,等待其他函数返回结果的保留字
pass
'''
获取异步协程的结果
结果为awaitable对象
'''
协程初步
import asyncio
async def net():
return 11
async def main():
net() #error异步函数无法直接调用
d=await net() #right
print(d)
asyncio.run(main())
#输出为:11
'''
也可以使用
async def main():
task=asyncio.create_task(net)
await task
'''
import asyncio
async def hello(i):
print('hello',i)
await asyncio.sleep(3)
print('world',i)
if __name__=='__main__':
tasks=[]
for i in range(4):
tasks.append(hello(i))
loop=asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
保留字:被编程语言内部定义并保留使用的标识符,共33+2个
and/as/assert/break/class/continue/def/elif/else/except/finally/for/from/if/import/in/is/lambda/not/or/pass/raise/return/try/while/with/yied/del/global/nonlocal/True/False/None/async/await/
and/or/not逻辑运算保留字
and: 与操作 True and False
or: 或操作 True or False
not: 非操作 not True
as 对象引用增加保留字,相当于绑定别名
assert 断言语句保留字,通过异常进行程序辅助调试
break、continue循环控制保留字
class 类定义保留字
def 函数定义保留字
if、elif、else条件判断保留字
try、except、finally异常处理保留字
for、while循环处理保留字
from、import模块导入保留字
in 成员关系操作保留字
is 对象判断保留字
lambda 匿名函数保留字
pass 空操作保留字
raise 异常产生保留字
return 函数返回保留字
with 上下文管理器保留字
yield 生成器定义保留字
del 删除保留字
global 全局声明保留字
nonlocal 非本地声明保留字
True、False布尔保留字
None 空无保留字
async 协程声明保留字
await 协程等待保留字
特殊符号:表达Python语法的三种逻辑
+ - * ** / // % @(矩阵乘法操作符,尚未有功能支持 预留)
<< >> & | ^ ~
< > <= >= == !=
( ) [ ] {
} , : . ; @ = -> += -= *= /= //= %=
@= &= |= ^= >>= <<= **=
# ;当多行语句在一行表示时,可以用分号分隔,但不建议
# ->函数注解,辅助对函数参数及返回值类型进行注解
'''
def foo(a: int,b: str)->str:
return "{} and {}".format(a,b)
'''
' " # \
函数 | 描述 |
---|---|
abs(x) | 返回x的绝对值(int,float),如x为复数(complex),返回摸值 |
bin(x) | 将一个整数x转换为二进制字符串形式,以0b开头 |
bytearray() | 返回一个新的字节数组 |
bytes(src) | 将src转换成一个新的字节串对象 |
chr(int) | 返回int在Unicode编码下代表的字符 |
complex([r[,i]]) | 将输入的数值/元组/字符串转换为复数(complex)对象并返回 |
dict() | 返回一个新的字典对象 |
divmod(inta,intb) | 返回(a//b,a%b)的结果 |
eval(exp) | 将字符串表达式exp作为合法的语句传入Python进行解释执行 |
float(x) | 将数字或字符串x转换为浮点数 |
hash(obj) | 返回对象obj的哈希值 |
hex(int) | 将int转换为十六进制,返回以0x为前缀全部小写的字符串结果 |
id(obj) | 返回obj在Python中的id值,一般指CPython中改对象的内存地址 |
input([prompt])在屏幕显示字符串prompt并等待输入 | |
int(x) | 将数字/字符串x转换为整数 |
len(s) | 返回对象s的长度 |
list([iterable]) | 返回一个新的列表对象,可用iterable参数对其初始化 |
max(iterable) | 返回iterable中最大值 |
min(iterable)返回iterable中最小值 | |
oct(int) | 将int转换为八进制,返回以0o为前缀的字符串结果 |
open(file,mode) | 以mode方式打开文件file并返回文件对象 |
ord | 与chr相反,返回字符串C的Unicode编码值 |
pow(x,y[,z]) | 返回x的y次方,可选参数z用于取模 |
print(x) | 将x打印到屏幕上 |
range(start,stop[,step]) | 返回start(包含)开始,stop(不包含)结束的可迭代对象,可选参数step控制步长间隔 |
round(x) | 对x近似取整(受浮点数精度影响,不是严格的四舍五入) |
set([iterable]) | 返回一个新的集合对象,可用iterable参数初始化 |
str(x) | 将x转换为字符串 |
sum(iterable) | 返回iterable的求和结果 |
super(x) | 用于在子类中调用父类中被重载的方法 |
tuple([iterable]) | 返回一个新的元组对象,可用iterable参数初始化 |
type(obj) | 返回obj的类型 |
all(iterable) | 如果iterable中元素都是True或iterable为空,则返回True |
any(iterable) | 如果iterable中任一元素是True,返回True,iterable为空返回False |
ascii(obj) | 返回obj的repr()输出,对于非可打印字符采用\x \u \U表示 |
bool(x) | 计算x,返回True或False |
breakpoint(*args,**kws) | 使用该函数进入Debug环境 |
callable(obj) | 如果obj是可调用的则返回True,否则返回False |
classmethod() | 装饰器函数,将方法转换为类方法,对应语法糖@classmethod |
compile(src,filename,mode) | 将src编译为代码或AST对象 |
delattr(obj,name) | 删除obj对象的name属性 |
dir(obj) | 返回obj的所有合法属性 |
enumerate(iterable) | 返回由iterable初始化的枚举对象(序号与值组成的二元组序列) |
exec(obj) | 执行传入的string或code对象 |
filter(func,iterable) | 将iterable对象传入函数func,将True对象构造为一个迭代器 |
format(value[,format_spec]) | 将value按照format_spec的格式进行格式化 |
frozenset([iterable]) | 返回一个不可修改的集合对象,只可用iterable参数初始化 |
getattr(obj,name) | 返回obj对象的name属性 |
globals() | 返回由当前全局变量组成的字典 |
hasattr(obj,name) | 如果obj对象有name属性则返回True,否则返回False |
help(obj) | 输出obj对象的帮助文档 |
isinstance(obj,classinfo) | 如果对象obj是类classinfo的实例则返回True,否则返回False |
issubclass(class,classinfo) | 如果类class是类classinfo的子类则返回True,否则返回False |
iter(obj) | 返回由obj对象构造的迭代器,obj必须是可迭代对象 |
local() | 返回由当前局部变量组成的字典 |
map(func,iterable) | 返回将iterable中每个对象传入函数func而构造的迭代器 |
memoryview(obj) | 返回obj对象的memory view信息 |
next(iterator) | 返回迭代器中下一个元素,会改变迭代器状态 |
object | Python最基础对象,它的类是所有对象的基类 |
property() | 装饰器函数,用于将方法转换为属性,对应语法糖@property |
repr(obj) | 调用obj对象 _ _ repr _ _ ()方法,返回目标对象的可打印字符串 |
reversed(seq) | 返回将序列seq反向后构造的迭代器 |
setattr(obj,name,value) | 为obj对象增加name属性,属性值为value |
slice(start,stop[,step]) | 返回start(包含)开始,stop(不包含)结束的可切片对象,可选参数step控制步间隔 |
sorted(iterable) | 返回一个由iterable对象元素排序后构成的新列表对象 |
staticmethod() | 装饰器函数,将方法转换为静态方法,对应语法糖@staticmethod |
vars(obj) | 返回obj模块/类/对象 _ _ dict _ _属性 |
zip(*iterables) | 从各iterable对象中提取元素拼成元组,形成并返回新的迭代器 |
_ _ import _ _ (name) | 使用关键字import导入模块时调用的查找函数 |
文章浏览阅读5.9k次,点赞4次,收藏56次。要求可以使用 MATLAB 的傅里叶变换函数和反变换函数。原理部分低通滤波器指去除图像中的高频成分,而低通滤波器指去除图像中的高频成分。 考虑的有三种低通滤波器:理想滤波器、布特沃斯滤波器和高斯滤波器。 理想低通滤波器:以原点为圆心,D为半径的圆内, 无衰减地通过所有频率,在圆外截断所有频率。由下面函数确定: 具体参见下图: Matlab函数介绍Fft2:二维快速傅里叶变换 Fftshift:移动零频点到频谱中间 Ifft2: 二维快速反傅里叶变换..._matlab傅里叶变换 低通滤波
文章浏览阅读767次。精彩专栏推荐 【作者主页——获取更多优质源码】 【web前端期末大作业——毕设项目精品实战案例(1000套)】1 网页简介:此作品为学生个人主页网页设计题材,HTML+CSS 布局制作,web前端期末大作业,大学生网页设计作业源码,这是一个不错的网页制作,画面精明,代码为简单学生水平, 非常适合初学者学习使用。2.网页编辑:网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Web
文章浏览阅读320次。postgresql在线安装很简单进入官网:https://www.posthttps://www.postgresql.org/gresql.org/如文档所示,在线安装步骤与命令:sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-..._pgdg-centos95-9.5-3.noarch.rpm
文章浏览阅读950次。https://www.micro-ip.com/drchip.php?mode=2&cid=17_这个命令可以创建符合要求的library cell集合,可以将它传递给另一个命令
文章浏览阅读3.1k次。#Elasticsearch安装这里本人使用的是docker镜像安装,至于怎么安装就不说了,贴一下配置最基本的配置文件就好#集群名称,默认为elasticsearch, 命名规则为 es-产品名-ES版本cluster.name: luckyqing#节点名称,es启动时会自动创建节点名称,但你也可进行配置node.name: es-46-68-76#设置索引的分片数#index..._lorg/elasticsearch/common/settings/settings;ljava/lang/string;)v
文章浏览阅读5k次。在sql server,校验数据是否为数字型比较容易,有提供的方法可以使用:ISNUMERIC当是数字型,方法返回值为1;否则返回值为0例:select * from tablename where isnumeric(data) = 1在Oracle中没有这样的方法,要实现判断是否为数字型需要自己写一个方法来实现。但也可以用其它方法:方法一,用正则的方法:使用 regexp_like例:sele..._oracle判断是否是数字,包括小数
文章浏览阅读2.6w次,点赞12次,收藏19次。LaTeX的表格环境是默认把表格名称放在表格底部的,如果我们把表格名称放置在表格开头就会发现名称与表格的距离十分接近,非常不好看,就像下图显示的一样: 但是我们如果习惯把表格名称放置在表头又该怎么办呢?下面给大家提供两种方法。 版本一:在文中使用命令”\caption”前添加增大间距的命令,具体如下:\begin{table}[H]\centering\setlength{\aboveca_latex中表格名字和表格距离调整
文章浏览阅读143次。欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 当然最常用的是用rowid去除重复: 查出重复数据: select a.rowid,a.* from 表名 a where a.rowid != ( select max(b.rowid) from 表名 b where a.字段1 = b.字段1 and a.字段2 = b.字段2 ) 删欢迎进入Oracle社区论坛..._oracle 中 每行 数据的 标记
文章浏览阅读230次。ConfigMgr Prerequisites Tool 使用指南系列-1:ConfigMgr Prerequisites Tool简介Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者博客:https://blog.51cto.com/lander IT Helpdesk实战培训视频课程:https://edu.51cto.com/lectur..._configmgr tool
文章浏览阅读2.8k次。 这个一直不能用:for id in data_front: res=es.update(index=index, doc_type=doc_type, id=id, body={"doc": {"flag":0}}) print(id,res) break {'total': 0, 'successful'..._es updaterequest没有更新
文章浏览阅读741次。动态加载模块到内核中1、相关的结构体struct kernel_symbolstruct modversion_infostruct module_attributestructmodule_version_attributestruct module_kobjectstruct module// 模块结构体,将上面的变量放到结构体中,有的值进行了初始化2、加载、卸载、以及注册、注销等函数..._module_firmware
文章浏览阅读441次。参考自:https://dart.cn/samplesDart 编程语言概览本文向你展示的 Dart 语言用法并不全面—这里只是对那些喜欢通过示例了解语言的人提供一个简单的介绍。你也许会对Dart 语言的速查表 CodeLab或 Dart 语言概览和库概览更感兴趣。语言概览包含示例的 Dart 语言全面概览。本文中大部分的阅读更多链接均会跳转到此概览中。库概览通过各种示例向你介绍 Dart 的核心库。通过此概览你可以了解更多关于内置类型、集合、日期时间、异步 Stream..._dart语言实战