在Python中发现新的函数是作者的一大爱好。每当遇到别人没有注意到的功能,我都会饶有兴趣的记录下来。
没有,这几个星期我学了一些有趣的函数,比如StackOverflow上的一些我不知道的函数。这些被低估被埋没的实用功能真的很值得拥有!
divmod这个函数很有用,可以对两个数进行模除%运算,然后返回商和余数。例如:
divmod(5, 2)[Out]: (2, 1)这只是为了找到我们能适应2到5的次数。我们不需要拆分这个数,我们可以得到商是2,1是余数。它对于计算返回过程运行所需的时间(以小时、分钟和秒为单位)特别有用,如下所示:
start =datetime.datetime.now() ... # process code goes hereend =datetime.datetime.now()# we get the total runtime in secondsruntime = (end - start).seconds # wewill assume 30000# how many hours are in these secs, what are the remainingsecs?hours, remainder = divmod(runtime, 3600)# now how many minutes and seconds arein our remainder?mins, secs = divmod(remainder,60)print("{:02d}:{:02d}:{:02d}".format(hours, mins, secs))[Out]: "08:00:08"casefold这是一个特别有趣的字符串方法,功能类似于lower。但是casefold试图更积极地标准化更广泛的字符。在大多数情况下,lower和casefold的行为是相同的,但有时它们是不同的:
"ς".casefold() # both ς and σ are the Greek letter sigma[Out]:"σ"相反,使用较低的:
"ς".lower() # however, lower recognizes them as different[Out]:"ς"[Out]: False在这里,两个sigma都已经小写了。根据使用情况,它可能会按预期运行。但是,如果你打算比较两个等价的希腊语单词,一个用σ,一个用σ。虽然它们是相同的,但只有casefold能让我们准确地比较它们:
"ἑρμῆσ"== "ἑρμῆς"[Out]:False"ἑρμῆσ".lower() == "ἑρμῆς".lower()[Out]:False"ἑρμῆσ".casefold() == "ἑρμῆς".casefold()[Out]:True*args, **kwargs有时你可能会看到函数定义包含这两个参数,比如def func(x,y,* args,** kwargs)。
它们都非常简单,都允许我们将多个值传递给一个函数,然后将它们打包成一个生成器。至于是否将列表/生成器传递给标准参数,结果如下:
def func(values):for x in values:print(x, end=" ")func([1,2, 3])[Out]: 1 2 3当使用* args时,我们应该将每个值作为新参数传递,而不是将它们都包含在列表中。
def func(*values):for x in values:print(x, end=" ")func(1,2, 3)[Out]: 1 2 3请注意,您不需要输入* args,只需输入*值。因为只有一个星号*,所以它被定义为* args,与所使用的变量名无关。* args只是基于传递给函数的参数创建一个生成器对象。** kwargs创建字典。
因此,您可以按如下方式使用名称和关键字参数:
def func(**values):for x in values:print(f"{x}:{values[x]}")func(x=1, y=2, z=3)[Out]: x: 1y: 2z: 3同样,可以随意调用变量。在这种情况下,使用**值。用双引号定义为**kwargs。
图源:unsplash资料来源:unsplash
需要理解列表中的表达式,这绝对是Python最有用的功能之一。最常见的是列表理解,大部分人都见过以下几种: vals = [1, 2, 3, 4, 5][i**2 fori in vals][Out]: [1, 4, 9, 16, 25]但是,您不仅可以使用方括号,还可以用几乎相同的语法定义生成器表达式:
(i**2 for i in vals)[Out]: <generator object<genexpr> at 0x7f0281730fc0>当然,生成器中的每个元素只有在被调用时才输出。我们可以使用list()来实现这一点:
list((i**2 for i in vals))[Out]: [1, 4, 9, 16, 25]只需在语法上做一点小小的改动,甚至用字典理解来构建字典:
{i: i**2 for i in vals}[Out]:{1: 1,2: 4,3: 9,4: 16,5: 25}这些都是很有意思的功能,特别是divmod和casefold,我最近体验过,一定要试试。
【声明】本文版权归原作者所有,内容为作者个人观点。转载的目的是为了传递更多的信息。如果涉及到作品的内容和版权,可以联系本网站删除。谢谢你。
更多信息请关注微信微信官方账号:成都CDA数据分析师。
1.《divmod 这些鲜为人知的Python功能,你值得拥有!》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《divmod 这些鲜为人知的Python功能,你值得拥有!》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1110505.html