有些代码以近乎不可能的方式呈现。这些功能非常简洁,我无法想象没有Python的生活。本文将介绍其中一些不常见但有用的功能,包括:变量赋值-使用*args和**kwargs(包括字典合并)不可变集合-它们有什么用以及为什么有用多因素条件-更清晰的变量逻辑检查existence-localandglobaloverlambdafunctions-writePython-styleandfunctional-styleone-liners变量赋值就像函数*args和**kwargs,相同的语法可以用于变量赋值:合并两个字典使用**kwargs合并字典时可迭代变量赋值方法中的语法:注意如果字典之间有公共键,则后者的键值对(在y中)将替换前者。根据即将发布的最新Python版本(3.9),这个问题可以通过一种新的语法来规避,即字典合并和更新操作符:z=x|#更新-代替字典来合并不可变集合在Python中,您可以使用集合,它们是不同对象的无序集合。这些集合是可变的,这意味着它们可以使用add()和remove()进行转换——这意味着可变集合不可散列。相反,使用一个不可变的集合frozenset()——一个值不能改变的集合。但是因为它是不可变的,所以它是可散列的——当set和frozenset都用作字典键时,这一点就发挥了作用:使用frozenset作为字典键似乎不太实际,但frozenset的作用是提供更详细的,有目的的代码。这是对代码的未来读者的提醒——改变我,一切都会分崩离析。多因素条件清理那些乱七八糟的if语句,而不是:if0<=xandx<=1:print('valueis%')可以写成:if(0<=x<=1):print('valueis%')然后更进一步,您可以添加更多条件语句并将它们与按位运算符串在一起:if(0<=x<1)|(7<=x<8)|(x==10):print('passed')检查变量是否存在我需要检查变量是否存在吗?if"var_name"inglobals():print("var_nameexists!")elif"var_name"inlocals():print("var_nameexistslocally!")else:print("var_namedoesnotexist.")可以使用全局变量在全局和局部范围内检查变量()和locals()分别。检查变量test1和test2是全局变量还是局部变量该代码在合并范围后检查字典中的test1和test2。超越lambda函数使用lambda函数编写简单快速的单行程序非常普遍,但很少用于创建多参数函数。通常它看起来像这样:do_something=lambdax:x**2/(1-x)但是lambda函数也可以用来构建紧凑的单行函数:这是Python语法中最忌讳的用法之一。PEP8-Python的编码风格指南-强烈反对将lambda函数作为命名函数。此外,尤其是对于数字公式,单行函数看起来很奇怪。因此,可以编写单行def语句而不是lambda:您可以使用单行def语句来使用Cochran构建库。除非你想要负面反馈,否则使用lambda,否则使用def。这里有五个非常好用的Python特性,如果你还不知道,赶快积累起来吧!
