1.f-string(3.6之后有,3.8有改动)
2.不定长度传参
3.@numba.jit
4.生成器(Generator) +迭代器(yield)
1.f-string
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去
>>> name = 'Runoob'
>>> f'Hello {name}' # 替换变量
>>> f'{1+2}' # 使用表达式
'3'
>>> w = {'name': 'Runoob', 'url': 'www.runoob.com'}
>>> f'{w["name"]}: {w["url"]}'
'Runoob: www.runoob.com'
>>> x = 1
>>> print(f'{x+1}') # Python 3.6
2
>>> x = 1
>>> print(f'{x+1=}') # Python 3.8更新的 ,3.6会报错
'x+1=2'
2.不定长度参数
*以元组形式接收,**以字典形式接收,如果两者都存在,元组需要在字典之前。
ps:*单独出现时,*以后的参数必须用关键字传入
在使用args内容时,*args表示将args拆开。例如:传入的args为[1,2,3],f(*args)等价与f(1,2,3)
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
for var in vartuple:
print (var)
return
def printinfo( arg1, **vardict ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
print (vardict)
>>> def f(a,b,*,c):
... return a+b+c
...
>>> f(1,2,3) # 报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes 2 positional arguments but 3 were given
>>> f(1,2,c=3) # 正常
ps:Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
#形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参
3.@numba.jit
在函数之前加,可加速python计算,但非计算不要用,反而会慢。
计算的量级大的时候用,小的时候用也不合适。
https://blog.youkuaiyun.com/jacke121/article/details/78307580
4.yield
使用了yield的函数被成为生成器。(生成器可以认为就是迭代器)
可以返回一个迭代器,每次调用next可从yield的下一句继续运行。
def function(num:int)
for i in range(num):
yield i
f = function(5)
for i in range(5):
print(next(f))
自定义对象使用迭代器时需要实现类中的__iter__,__next__方法,iter返回自身,next返回下一个值
需要注意的是,如果涉及到闭包等延迟计算的情况,yield有可能会返回最后的值。(闭包陷阱情况下,yield返回的方法又没有及时运行而是等所有的方法都导出了再运行,yield的值会都变成最后一个)
ps: python3中删除了range,xrange变成了range,可以直接使用range来使用xrange