⽤python实现汇编功能_编程语⾔新⼿必会的9个Python技巧
有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的⽂章,但说到Python时,还有很多东西可以谈论,这⾥我将尝试展⽰我所知道和使⽤的⼀些特性,我还没有在其他地⽅看到有⼈提到过它们。我们开始吧。
清理字符串输⼊
对⽤户输⼊进⾏清理的问题⼏乎适⽤于您编写的所有程序。通常情况下,将字符转换为⼩写或⼤写就⾜够了,有时您可以使⽤Regex来完成这项⼯作,但对于复杂的情况来说,可能有更好的⽅法:
在本例中,您可以看到空⽩字符“\\n”和“\\t”已被单个空格替换,⽽“\\r”已被完全删除。这是⼀个简单的例⼦,但是我们可以更进⼀步,使⽤unicodedata包和它的combining()函数来⽣成并进⾏映射,从⽽⽣成更⼤的重新映射表,我们可以使⽤它来删除字符串中的所有重⾳。
对迭代器进⾏切⽚
如果您尝试对⼀个迭代器进⾏切⽚,您会得到⼀个TypeError,这说明⽣成器对象是不可下标访问的,但有⼀个简单的解决⽅案可以解决这个问题:
使⽤itertools.islice我们可以创建⼀个islice对象,它是⼀个会⽣成所需项的迭代器。需要注意的是,这将消耗slice开始之前的所有⽣成器项,以及islice对象中的所有项。
跳过可迭代对象的开始部分
有时您必须处理那些以您不想要的可变数量的⾏(如注释)开始的⽂件。itertools再次为这个问题提供了简单的解决⽅案:
这代码段只⽣成初始注释部分之后的⾏。如果我们只想在可迭代对象的开头丢弃⼀些项⽬(本例中是⼀些⾏),并且不知道有多少个项⽬,那么这种⽅法是很有⽤的。
只带有关键字参数(kwargs)的函数
在使⽤以下这样的函数时,创建只接受关键字参数的函数来提供(强制)更多的清晰性是很有帮助的:
正如您所看到的,这可以通过在关键字参数之前放置单个*参数来轻松解决。如果我们把位置参数放在*参数之前,位置参数显然也会存在。
创建⽀持with语句的对象
例如,我们都知道如何使⽤with语句来打开⽂件或获取锁,但是我们可以实现⾃⼰的with语句吗? 当然,我们可以使⽤__enter__和__exit__⽅法来实现上下⽂管理协议:
这是在Python中实现上下⽂管理最常见的⽅法,但是还有更简单的实现⽅法:
上⾯的代码⽚段使⽤contextmanager管理器装饰器实现了内容管理协议。在进⼊with块时,tag函数(在yield之前)的第⼀部分会被执⾏,然后该with块被执⾏,最后,tag函数的其余部分会被执⾏。
使⽤__slots__节省内存
如果您曾经编写过⼀个创建某个类的⼤量实例的程序,您可能会注意到您的程序会突然需要⼤量内存。这是因为Python使⽤字典来表⽰类实例的属性,这使得它的速度很快,但是内存效率不⾼,这通常并不是⼀个问题。然⽽,如果它成为您的程序的⼀个问题时,您可以尝试使⽤__slots__:
这⾥的情况是,当我们定义了__slots__属性时,Python会使⽤⼩的固定⼤⼩的数组⽽不是字典来定义属性,这⼤⼤减少了每个实例所需的内存。使⽤__slots__也有⼀些缺点——我们不能声明任何新的属性,并且我们只能使⽤在__slots__上这些属性。⽽且,带有__slots__的类不能使⽤多重继承。
限制CPU和内存的使⽤
如果您不想优化您的程序内存或CPU使⽤,您只想把它限制在某个固定⼤⼩的内存上,那么Python也有⼀个这样的库来做到这⼀点:
这⾥我们可以看到设置最⼤CPU运⾏时间和最⼤内存使⽤限制的两个选项。对于CPU限制,我们⾸先获取特定资源(RLIMIT_CPU)的软限制和硬限制,然后使⽤参数指定的秒数和前⾯检索到的硬限制来设置它。最后,我们注册信号,如果CPU时间超过限制,该信号会导致系统退出。对于内存,我们再次检索软限制和硬限制,并使⽤带有⼤⼩参数的setrlimit和检索的硬限制来设置它。
控制什么可以导⼊,什么不可以导⼊
⼀些语⾔有⾮常明显的导出成员(变量、⽅法、接⼝)的控制机制,例如Golang,其中只有以⼤写字母开头的成员会被导出。另⼀⽅⾯,在Python中,所有东西都可以被导出,除⾮我们使⽤__all__:
根据上⾯的代码⽚段,我们知道只有bar函数会被导出。同样,我们可以让__all__为空,这样,当我们从这个模块导⼊的时候,任何东西都不会被导出,并且会导致AttributeError。
实现⽐较运算符的简单⽅式
考虑到⽬前已经有相当多的⽐较操作符——__lt__ 、__le__ 、 __gt__ 或 __ge___,因此,为⼀个类实现所有的⽐较操作符是相当烦⼈的。但如果有更简单的⽅法可以实现呢?al_ordering就派上⽤场了:python新手代码例子
那么,这到底是怎么⼯作的呢?total_ordering装饰器⽤于简化实现类实例排序的过程。我们只需要定义__lt__和__eq__,它们是剩余操作的映射所需的最⼩值,装饰器就会为我们填充空⽩。
结论
并不是所有这些特性在⽇常的Python编程中都是必需的和有⽤的,但是它们中的⼀些可能会不时地派上⽤场,⽽且它们还可能会简化那些在其他情况下会⾮常冗长和难以实现的任务。我也想说明的是,所有这些特性是Python标准库的⼀部分,⽽其中的⼀些在我看来就像标准库中所具有的相当不标准的东西,所以当您想使⽤Python实现某些东西的时候,您⾸先应该去标准库中寻它,如果您不能到它,那么您可能还是不够努⼒(如果真的没有,那它肯定在⼀些第三⽅库中)。
编程语⾔(programming language)是⼀种被标准化的交流技巧,⽤来向计算机发出指令,定义计算机程序,让程序员能够准确地定义计算机所需要使⽤的数据,并精确地定义在不同情况下所应当采取的⾏动的⼀种计算机语⾔。 编程语⾔可以分成机器语⾔、汇编语⾔、⾼级语⾔三⼤类。计算机领域已发明了上千不同的编程语⾔,⽽且每年仍有新的编程语⾔诞⽣。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论