今日必看|你值得拥有!,这些鲜为人知的Python功能

全文共1583字 , 预计学习时长7分钟
今日必看|你值得拥有!,这些鲜为人知的Python功能
文章图片
发现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创建字典 。
因此 , 可以这样使用名称、关键字参数:
【今日必看|你值得拥有!,这些鲜为人知的Python功能】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功能
文章图片
列表理解
理解表达式是必不可少的 , 这绝对是Python最有用的功能之一 。 最常见的是列表理解 , 绝大多数人都看过以下内容: