这些鲜为人知的Python功能,你值得拥有!
全文共1583字 , 预计学习时长7分钟

文章图片
发现Python中的新功能是笔者的一大兴趣 , 每当碰到一些其他人没有留意到的某个功能时 , 我都会兴高采烈地把它记录下来 。
这不 , 过去几周我又了解到一些有趣的功能 , 例如StackOverflow上一些我不知道的功能 。 这些被低估和埋没的实用功能 , 你真的值得拥有!
divmod
这个函数非常有用 , 它能对两个数执行模除%运算 , 然后返回商和余数 。 例如:
divmod(5,2)
[Out]:(2,1)
这只是在找到可以将2拟合为5的次数 , 我们不需要拆分这个数 , 就可以得出商为2 , 1为余数 。 对于计算返回进程运行所需的时间(以小时、分钟和秒为单位)特别有用 , 就像这样:
start=datetime.datetime.now()...#processcodegoeshereend=datetime.datetime.now()#wegetthetotalruntimeinseconds
runtime=(end-start).seconds#wewillassume30000#howmanyhoursareinthesesecs,whataretheremainingsecs?
hours,remainder=divmod(runtime,3600)#nowhowmanyminutesandsecondsareinourremainder?
mins,secs=divmod(remainder,60)print("{:02d}:{:02d}:{:02d}".format(hours,mins,secs))
[Out]:"08:00:08"
casefold
这是一个特别有趣的字符串方法 , 它的功能类似于lower 。, 但casefold试图更积极地标准化更广泛的字符 。 在大多数情况下 , lower和casefold的行为相同 , 但有时它们不相同:
"".casefold()#bothandσaretheGreeklettersigma[Out]:"σ"
相比之下 , 使用lower:
"".lower()#however,lowerrecognizesthemasdifferent[Out]:""
[Out]:False
在这里 , 两个sigma已经都是小写 。 根据使用情况 , 它可能会按预期运行 。 但是 , 假如打算比较两个等效的希腊语单词 , 一个使用σ , 另一个使用 。 尽管相同 , 但只有casefold才能让我们正确地比较它们:
"ρμησ"=="ρμη"
[Out]:False
"ρμησ".lower()=="ρμη".lower()
[Out]:False
"ρμησ".casefold()=="ρμη".casefold()
[Out]:True
*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):
【这些鲜为人知的Python功能,你值得拥有!】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**2foriinvals]
[Out]:[1,4,9,16,25]
但不仅可以用方括号 , 你还能用几乎完全相同的语法定义生成器表达式:
(i**2foriinvals)
[Out]:<generatorobject<genexpr>at0x7f0281730fc0>
当然 , 生成器中的每个元素仅在被调用时才输出 , 我们可以使用list()来做到这一点:
list((i**2foriinvals))
[Out]:[1,4,9,16,25]
只需对语法进行一点小的更改 , 甚至可以使用字典理解来构建字典:
{i:i**2foriinvals}[Out]:{1:1,
2:4,
3:9,
4:16,
5:25}
以上都是非常有趣的功能 , 特别是divmod和casefold , 我最近才体验过 , 你也一定要去尝尝呀 。

文章图片
留言点赞关注
我们一起分享AI学习与发展的干货
如转载 , 请后台留言 , 遵守转载规范
推荐阅读
- 腾讯控股的保险代理平台“微保”被深圳银保监局处罚
- 成龙的功夫是杂技,洪金宝胖的不灵活,周比利评价两人实战能力
- 凉茶|凉茶最大的问题不是添加西药,而是冒充饮料
- 台风|里弗斯谈独行侠:不会忽视有联盟前五球员的球队
- 高考遇洪水,交警铁骑送 景德镇考生的"国宾待遇"
- 未来的大学生活“长啥样”? 来看学长为你写下的万字指南
- 不起眼的朗姐|和老人出去旅游,为什么会觉得心累?网友:只要老妈身体允许以后还要带她去,哈哈哈哈
- 粤游记|旅游就该诗酒趁年华,带你一起到东京,我们玩点不一样的!
- 三分钟游世界|云南新走红一座公园,门票高达100元,但去过的游客都说好
- 识别“95”号段中的“李鬼” 这些小技巧要掌握!
