python笔记-编程优化NO2(简化)

本文深入讲解Python的f-string格式化字符串、不定长度参数传递、@numba.jit加速计算及生成器与迭代器的使用技巧。通过实例演示,帮助读者掌握Python编程的进阶知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值