一、异步编程理解
异步编程:可以看为类似县城但不涉及系统调度,即异步程序可以并发地处理问题当异步程序的上下文在内部不是通过系统调度程序切换。
二、什么是协程
协程又称为微线程,在一个线程中执行,执行函数时可以随时终端,由程序自身控制,执行效率极高,与多线程比较,没有切换线程的开销和多线程锁机制。
三、asyncio异步协程
asyncio即Asynchronous I/O是python一个用来处理并发事件的包,是很多python异步架构的基础,用于处理高并发网络请求方面的问题
# 普通函数
def function():
return 1
# 由async做前缀的普通函数变成了异步函数
async def asynchronous():
return 1
# 而异步函数不同于普通函数不可能被直接调用
async def asynchronous():
return 1
print(asynchronous())
四、await关键词
await是一个只能在协程函数中使用的关键词,用于在遇到IO操作时悬挂当前协程。在悬挂当前协程的过程中,事件循环可以执行其他协程,在当前协程IO处理完成后,可以重新切换执行后的代码。
五、python中@property的介绍与使用
python的@property时python的一种装饰器,是用来修饰方法的。可以使用@propery装饰器来创建只读属性,@propert装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改。
class DataSet(object):
@property
def method_with_property(self):
return 15
def method_without_property(self):
return 15
ls = DatatSet()
print(ls.method_with_property) # 加了@property后,可以用调用属性的形式调用方法,后面不需要加()
print(ls.method_without_property()) # 没有加@property,必须使用正常的调用方法的形式,即在后面加()
六、python 海象运算符定义
一个变量名跟一个表达式或者一个值,这个是一种新的赋值运算符。
# 基础写法
x = 5
if x < 10:
print("hello fancy!")
# 海象运算符写法
if (x:=5) < 10:
print("hello fancy!")
七、python 位置参数
Python 位置参数也称必备参数。指的是在调用函数时正确传入函数的实际参数,传入的实际参数要与定义函数时的形式参数保持一致,实参和形参数量必须一致、实参和形参顺序必须一致
# 是参与形参数量必须一致
def info(name, age, gender):
print('姓名:', name, '; 年龄:', age, '; 性别:', gender)
info('阿姐', 18) # 少传入一个实参,会报错
### 错误 ###
Traceback (most recent call last):
File "E:\p12\cope\first_learning\referral.py", line 20, in <module>
info('阿姐', 18) # 少传入一个实参,会报错
TypeError: info() missing 1 required positional argument: 'gender'
############
# 实参和形参顺序必须一致
def result(num1, num2):
res = num1 + num2
print(res)
result(1, '阿姐')
### 错误 ###
Traceback (most recent call last):
File "E:\p12\cope\first_learning\referral.py", line 21, in <module>
result(1, '阿姐')
File "E:\p12\cope\first_learning\referral.py", line 17, in result
res = num1 + num2
TypeError: unsupported operand type(s) for +: 'int' and 'str'
###########
八、python 关键字参数
Python 关键字参数是指在调用函数时使用形式参数的名字来确定输入的实际参数。Pyhton 关键字参数可以避免牢记参数位置的麻烦,令函数的调用和参数传递更加灵活方便。
def info(name, age, gender):
print('姓名:', name, ': 年龄:', age, ': 性别:', gender)
info(name='阿姐', 18, gender='男')
### 错误 ###
File "E:\p12\cope\first_learning\referral.py", line 20
info(name='阿姐', 18, gender='男')
^
SyntaxError: positional argument follows keyword argument
############
九、python 默认参数
Python 默认参数指的是在定义函数时,直接给形式参数制定一个默认值。
def info(name='null', age, gender='男'):
print('姓名:', name, ': 年龄:', age, ': 性别:', gender)
info()
### 错误 ###
File "E:\p12\cope\first_learning\referral.py", line 15
def info(name='null', age, gender='男'):
^
SyntaxError: non-default argument follows default argument
###########
十、不定长参数
*args 接受单个出现的参数,接收后存为元组
**kwargs 接收以键值对形式出现的参数,接收后存入一个字典
十一、names: t.Iterable[str None] = (None,)的含义
names是一个变量,他被注释为类型Iterable[str | None]。这意味着names是一个可迭代对象,其中的元素类型是str或None。Iterable[str | None]这个类型注解使用了一个特殊的写法,表示names可以是一个由str和None组成的可迭代对象。方括号内的str、None表示str和None之间是一个联合类型关系,即names中的元素可以是str,也可以是None。
最后的=(None,)表示names被赋予了一个一个初始值,即一个包含单个元素None的元组。