在过去的几周里,我学到了一些有趣的特点,比如Stack。 Overflow上不知道的功能。
以下是一些功能及其介绍。
pmod这是一个非常有用的函数。函数的作用是:对两个数进行模除%操作,然后返回商和余数。例如:
pmod(5,2)
[Out]:(2,1)
这只是为了找到可以将2拟合成5的次数,我们不需要拆分这个数字,就可以得出商为2,1为余数。
这对计算返回过程运行所需的时间特别有用。这样:
start=datetime.datetime.now() ...#流程代码 end=datetime.datetime.now() #总运行时间(秒) runtime=(end-start).seconds#假设为30000 #这些秒有多少小时,剩下的秒有多少? hours,remainder=pmod(runtime,3600) #剩下多久了? mins,secs=pmod(remainder,60) print("{:02d}:{:02d}:{:02d}".format(hours,mins,secs))
[Out]:"08:00:08"*args, **kwargs
有时你可能会注意到函数定义包含这两个参数,例如 def func(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:1 y:2 z:3
同样,我们也可以随意调用变量。在这种情况下,我们使用它** values。 使用双引号将其定义为双引号**kwargs。
列表理解Python绝对是最有用的功能之一, 理解表达式是必不可少的。 最常见的是列表理解。我相信你们大多数人都读过以下内容:
vals=[1,2,3,4,5] [i**2forinvals]
[Out]:[1,4,9,16,25]
但我们并不局限于这些方括号。生成器表达式可以用几乎完全相同的语法定义:
(i**2forinvals)
[Out]:<generatorobject<genexpr>at0x7f028730fc>
当然,生成器中的每个元素只有在被调用时才能输出,我们可以使用list()来做到这一点:
list((i**2forinvals)
[Out]:[1,4,9,16,25]
只要稍微改变一下语法,我们甚至可以用字典理解来构建字典:
{i:i**2foriinvals}[Out]:{1:1, 2:4, 3:9, 4:16, 5:25}casefold
这是一种特别有趣的字符串方法, 它的功能类似于降低。 然而,casefold试图更积极地标准化更广泛的字符。
在大多数情况下,小写和大写的折叠行为是相同的,但有时它们是不同的:
"ς".casefold()#ς和σ都是希腊字母sigma [Out]:"σ"
相比之下,使用较低:
"ς".lower()#然而,较低的人认为它们是不同的 [Out]:"ς"
[Out]:False
这两个sigma已经是小写了。 它可以根据使用情况按预期运行。
然而,如果我们计划比较两个等效的希腊语单词,一个使用σ,另一个使用ς。 虽然是一样的,但只有casefold才能让我们准确地比较它们:
"ἑρμῆσ"=="ἑρμῆς" [Out]:False"ἑρμῆσ".lower()=="ἑρμῆς".lower() [Out]:False"ἑρμῆσ".casefold()=="ἑρμῆς".casefold() [Out]:True
我希望你能从这篇文章中得到一些东西, 特别是 pmod 和 casefold 都是很有意思的功能,最近才经历过。
更多pytho相关内容,请关注python自学网。