不知道你有没有和我一样的习惯:当我学习Python的新特性,或者发现别人不知道某个特性时,我一般都会记录下来。在过去的几周里,我了解了一些有趣的特性——例如,我在StackOverflow上不知道的东西。以下是其中一些功能及其介绍。divmod这是一个非常有用的函数。函数的作用是:对两个数进行模除%运算,然后返回商和余数。例如:divmod(5,2)[Out]:(2,1)这个只是求2可以和5拟合的次数,这个数我们不用拆分,直接求商就可以了为2,余数为1。这对于计算返回的进程运行所需的时间特别有用。就像这样:start=datetime.datetime.now()...#流程代码end=datetime.datetime.now()#获取总运行时间(秒)runtime=(end-start).seconds#假设是30000#那几秒是多少小时,还剩多少秒?hours,remainder=divmod(runtime,3600)#现在还剩多少时间?mins,secs=divmod(remainder,60)print("{:02d}:{:02d}:{:02d}".format(hours,mins,secs))[Out]:"08:00:08"*args,**kwargs有时,您可能会注意到函数定义包含这两个参数,例如deffunc(x,y,*args,**kwargs)。它们实际上是非常简单的函数。两者都允许我们将多个值传递给一个函数,然后将这些值打包到一个生成器中。关于是否将列表/生成器传递给标准参数,结果类似于:deffunc(values):forxinvalues:print(x,end="")func([1,2,3])[Out]:'123'现在让我们使用*args-而不是将它们全部包含在列表中,我们应该将每个值作为一个新参数传递。deffunc(*values):forxinvalues:print(x,end="")func(1,2,3)[Out]:123注意我们不需要输入*args,只需要输入*values。由于单个星号*,它被定义为*args,而不管我们使用的变量名是什么。*args只是根据我们传递给函数的参数创建一个元组。**kwargs创建字典。因此,我们可以像这样使用名称、关键字参数:deffunc(**values):forxinvalues:print(f"{x}:{values[x]}")func(x=1,y=2,z=3)[Out]:x:1y:2z:3同样,我们可以随意调用变量,在本例中我们使用**values。使用双引号将其定义为**kwargs。列表理解这绝对是Python最有用的功能之一,对于理解表达式至关重要。最常见的是列表理解,我相信你们中的绝大多数人都看过以下内容:vals=[1,2,3,4,5][i**2foriinvals][Out]:[1,4,9,16,25]但我们并不仅限于这些方括号。我们可以用几乎完全相同的语法定义一个生成器表达式:(i**2foriinvals)[Out]:
