引入walrusexpression:=onlypositionalparameters/f-stringsspecifier=startasynchronousREPLunittest支持异步引入Python3.8已经发布,官方文档在这里What'sNewInPython3.8。介绍Python3.8的一些新特性。walrusExpressions:=NewSyntax:=会将一个值赋给一个更大的表达式的一部分的变量。if(n:=len(a))>10:print(f"Lististoolong({n}elements,if判断中使用expected<=10)"),避免两次调用len()。discount=0.0if(mo:=re.search(r'(\d+)%discount',advertisement)):discount=float(mo.group(1))/100.0正则表达式匹配得到结果时.#循环定长blockwhile(block:=f.read(256))!='':process(block)用于while循环中,可以同时取值,判断是否为空.[clean_name.title()fornameinnamesif(clean_name:=normalize('NFC',name))inallowed_names]用于列表推导。完整介绍见PEP572。仅位置参数/新函数参数语法/表示某些函数参数必须指定为位置参数,不能用作关键字参数。deff(a,b,/,c,d,*,e,f):print(a,b,c,d,e,f)在上面的例子中,a和b是positional-onlyarguments,c和d可以是positionalandkeywordarguments,e和f必须是keyword争论。>>>deff(a,b,/,**kwargs):...打印(a,b,kwargs)...>>>f(10,20,a=1,b=2,c=3)#a和b有两种使用方式1020{'a':1,'b':2,'c':3}仅位置参数的参数名称在**kwargs.class中仍然可用Counter(dict):def__init__(self,iterable=None,/,**kwds):#注意“iterable”是一个可能的关键字参数。完整介绍,请参阅PEP570。符号,以及执行表达式的结果。>>>user='eric_idle'>>>member_since=date(1975,7,31)>>>f'{user=}{member_since=}'"user='eric_idle'member_since=datetime.date(1975,7,31)》启动异步REPL使用python-masyncio启动异步REPL,可以直接在顶层使用await,不需要封装成函数。unittest支持异步导入unittestclassTestRequest(unittest.IsolatedAsyncioTestCase):asyncdefasyncSetUp(self):self.connection=awaitAsyncConnection()asyncdeftest_get(self):response=awaitself.connection.get("https://example.com")self.assertEqual(response.status_code,200)asyncdefasyncTearDown(self):awaitself.connection.close()如果__name__=="__main__":unittest.main()
