Python编程进阶,常用8大技巧!转载

原创
小哥 3年前 (2022-10-16) 阅读数 166 #大杂烩

选自medium,作者:Martin Heinz

由机器之心汇编由机器之心汇编由机器之心汇编

介绍 Python 关于酷特性的文章(例如,变量展开、部分函数、枚举可迭代对象等)是无穷无尽的。但还有更多 Python 编程黑客很少被提及。因此,本文将尝试介绍一些在其他文章中没有提到的技巧,这些技巧是我通常使用的。让我们来看看!

整理字符串输入排序字符串输入整理字符串输入

整理用户输入的问题在编程中非常常见。通常,将字符转换为小写或大写就足够了,有时还可以使用正则表达式模块。Regex“这已经完成了.但如果问题很复杂,可能有更好的方法来解决它.”

user_input = "This

string has some whitespaces... "

character_map = {
    ord(

) :  ,     ord( ) :  ,     ord( ) : None } user_input.translate(character_map)  # This string has some whitespaces...

在本例中,您可以看到空格字符“在本例中,您可以看到空格键”\ n」和「\ t已替换为单个空格,\ r“全部”已被删除。这只是一个很简单的例子,我们可以走得更远,使用unicodedata“该包”生成较大的重新映射表并使用combining()对于生成和映射,我们可以“对于生成和映射,我们可以

迭代器切片(迭代器切片(Slice)

如果在迭代器上执行切片操作,它将返回“TypeError“提示生成器对象没有下标,但我们可以用一个简单的解决方案来解决这个问题。

import itertools

s = itertools.islice(range(50), 10, 20)  # <itertools.islice object at 0x7f70fab88138>
for val in s:
    ...

我们可以使用We Can Use“We Can Use”itertools.islice“创建”“A”“创建islice对象,它是产生我们需要的项的迭代器。但是,请注意,该操作在切片之前使用所有生成器项,以及islice“对象中的所有项。”对象中的所有项。

跳过可迭代对象的开头跳过可迭代对象的开头跳过可迭代对象的开头

有时,您必须处理以不需要的行(如注释)开头的文件。“itertools“再一次,提供了一个简单的解决方案。”“再一次,提供了一个简单的解决方案。”

string_from_file = """
// Author: ...
// License: ...
//
// Date: ...
Actual content...
"""

import itertools

for line in itertools.dropwhile(lambda line: line.startswith("//"), string_from_file.split("

")):     print(line)

这段代码只打印初始注释部分之后的内容。如果我们只想丢弃可迭代对象的开始部分(在本例中是开始注释行),并且不知道我们想要这部分有多长,这是很有用的。

仅包含关键字参数的函数仅包含关键字参数的函数仅具有关键字参数的函数仅具有关键字参数的函数 (kwargs)

当我们使用以下函数时,创建只需要关键字参数作为输入的函数会很有帮助,以便提供更清晰的函数定义。

def test(*, a, b):
    pass

test("value for a", "value for b")  # TypeError: test() takes 0 positional arguments...
test(a="value", b="value 2")  # Works...

如您所见,关键字参数前面有一个““这个问题可以通过设置某些参数来解决。”它们显然是“参数”之前的位置参数。

Create Support for“The Create Support for thewith语句的“语句对象”对象

例如,我们都知道如何使用例如,我们都知道如何使用“例如,我们都知道如何使用例如,我们都知道如何使用”with」语句打开文件或获取锁,但是我们可以实现自己上下文表达式吗?是的,我们可以使用We Can Use“We Can Use”__enter__」和「__exit__“上下文管理协议”上下文管理协议:

class Connection:
    def __init__(self):
        ...

    def __enter__(self):
        # Initialize connection...

    def __exit__(self, type, value, traceback):
        # Close connection...

with Connection() as c:
    # __enter__() executes
    ...
    # conn.__exit__() executes

这是在 Python 这是实现上下文管理的最常见方法,但还有一种更简单的方法:

from contextlib import contextmanager

@contextmanager
def tag(name):
    print(f"<{name}>")
    yield
    print(f"")

with tag("h1"):
    print("This is Title.")

上述代码使用上述代码使用 contextmanager 的 manager 装饰者实现内容管理协议。在进入 with 块时 tag 函数的第一部分(在函数的第一部分(in yield (之前的部分)已经执行,然后(之前的部分)执行,然后 with 块,最后一次执行 tag 函数的其余部分。

用「__slots__“内存节约”内存节约

如果您曾经编写过创建某个类的大量实例的程序,那么您可能已经注意到您的程序突然需要大量内存。那是因为 Python 使用字典来表示类实例的属性使其速度更快,但在内存使用方面不是很高效。正常情况下,这不是一个严重的问题。但是,如果您的程序受此影响很严重,请尝试“The__slots__」:

class Person:
    __slots__ = ["first_name", "last_name", "phone"]
    def __init__(self, first_name, last_name, phone):
        self.first_name = first_name
        self.last_name = last_name
        self.phone = phone

当我们定义“当我们定义时”时“当我们定义了时”__slots__当“属性”当“属性”时,当“属性”时属性Python 不使用字典来表示属性,而是使用小的固定大小的数组,这大大减少了每个实例所需的内存。“的用法__slots__也有一些缺点:我们不能声明任何新属性,我们只能使用__slots__“C”页面上的现有属性。此外,具有“__slots__不能使用“多重继承”类。

限制「CPU“内存使用量”内存使用量和内存

如果您不想优化程序的内存或 CPU 使用率,而是希望将其直接限制在某个定义的数量Python 还有一个相应的库可以做到这一点。

import signal
import resource
import os

# To Limit CPU time
def time_exceeded(signo, frame):
    print("CPU exceeded...")
    raise SystemExit(1)

def set_max_runtime(seconds):
    # Install the signal handler and set a resource limit
    soft, hard = resource.getrlimit(resource.RLIMIT_CPU)
    resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard))
    signal.signal(signal.SIGXCPU, time_exceeded)

# To limit memory usage
def set_max_memory(size):
    soft, hard = resource.getrlimit(resource.RLIMIT_AS)
    resource.setrlimit(resource.RLIMIT_AS, (size, hard))

我们可以看到,上面的代码片段既包含设置最大值 CPU 运行时和最大内存使用限制的选项。在限制范围内 CPU 当我们第一次获得该特定资源的运行时(RLIMIT_CPU)软限制和硬限制,然后使用参数指定的秒数和先前检索到的硬限制来设置它们。最后,如果 CPU 的运行时间超过限制,我们将通知系统退出。在内存使用方面,我们再次检索软限制和硬限制,并使用“软限制”“size“The”参数“参数”的“参数”setrlimit以及之前检索到的硬限制来设置它。

控制可以/什么不能导入什么不能导入什么不能导入

一些语言具有非常明显的派生成员(变量、方法、接口)的机制,例如在 Golang 但是,只有以大写字母开头的成员才能在中导出 Python 在__all__」):

def foo():
    pass

def bar():
    pass

__all__ = ["bar"]

在上面的代码中,我们只知道“bar函数是派生的。类似地,我们可以拥有__all__“为空,因此不会导出任何内容,并且从该模块导入时,它将导致”AttributeError」。

一种实现比较运算符的简单方法

实现一个类的所有比较运算符(例如 __lt__ , __le__ , __gt__ , __ge__)是非常乏味的。有没有更简单的方法来做这件事?在这样的时刻,“functools.total_ordering“好帮手是下面的。”一个好帮手是。一个好的帮手是“

from functools import total_ordering

@total_ordering
class Number:
    def __init__(self, value):
        self.value = value

    def __lt__(self, other):
        return self.value < other.value

    def __eq__(self, other):
        return self.value == other.value

print(Number(20) > Number(3))
print(Number(1) < Number(5))
print(Number(15) >= Number(15))
print(Number(10) <= Number(2))

它在这里到底是如何运作的?我们使用“total_ordering“装饰符简化了对类实例进行排序的过程。我们只需要定义__lt__」和「__eq__“可以,它们是实现其余部分所需的最小操作集(这就是装饰者的用武之地--为我们填补空白)。

结语

并非本文中提到的所有功能都在日常 Python 它们在编程中都是必要的或有用的,但它们中的一些有时可能会派上用场,而且它们还可能简化一些原本冗长和恼人的任务。还需要注意的是,所有这些函数都是 Python 标准库的一部分。在我看来,其中一些功能似乎不像标准库中包含的标准内容,所以当您使用 Python 要实现本文中提到的一些功能,请首先参考 Python 如果你找不到你想要的功能,很可能是因为你找得不够努力(如果你找不到,那一定是存在于某个第三方库中)。

链接到原创文章。链接到原始文章。原始链接。 https://medium.com/m/global-identity?redirectUrl=https%3A%2F%2Ftowardsdatascience.com%2Fpython-tips-and-trick-you-havent-already-seen-37825547544f

这是我开发的一个小型机器人公共,目前添加了天气查询955公司名单,注意时间查询;以后还会增加图片功能和每日送书抽奖活动,以及猥亵功能,欢迎体验、拥抱。

机器人公众号已经上线,欢迎来到骚扰

推荐阅读:
入门: 最完整的零基学习最全面的零基学习最完整的零基学习Python的问题  | 从零开始学习从零基础学习从零基础学习8个月的Python  | 实战项目 |学Python这是捷径,这是捷径,这是捷径
干货:爬行豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析最佳球员分析 |   从万众期待到口碑惨败!唐探3令人失望  | 笑新伊田图龙记笑新伊田图龙记笑新伊田图龙记 | 谜语之王回答灯谜之王灯谜之王谜语之王 |用Python人山人海素描图人山人海素描图人山人海 Dishonor太火了,我用机器学习做了一个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python日常酷跑游戏日常酷跑游戏日常酷跑游戏!
AI: 会写诗的机器人会写诗的机器人会写诗的机器人 | 给图片上色给图片上色给图片上色 | 预测收入 | 《耻辱》太火了,我用机器学习做了一部迷你推荐系统电影
小工具: Pdf转Word易于修复表单和水印!易于处理的表单和水印!易于修复表单和水印!简单的表格和水印! | 一键把html将页面另存为网页另存为网页另存为pdf!|  再见PDF提款费!提款费!提款费!提款费用! | 用90构建最强大的代码行构建最强大的代码行构建最强大的代码行PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一个固定的低成本机票提醒!制作一张别针的低价机票提醒! |60代码行做了一个语音墙纸切换,天天见女士!

年度弹出文案年度弹出文案年度爆炸性文案

  • 1). 卧槽!Pdf转Word用Python轻松搞定 !

  • 2).学Python闻起来好香!我用100一行代码做了一个网站,帮助人们做了一行代码,做了一个网站,帮助了人们做了一行代码,帮助了人们PS旅行图片赚鸡腿吃旅行图片赚鸡腿

  • 3).第一次播放量过亿,火爆全网,我分析了《波妹》,发现了这些秘密

  • 4). 80一行行代码!使用Python让救济金做正确的事做做的人做好事的人A梦分身

  • 5).你必须掌握的东西你必须掌握20个python代码,简短而紧凑,永无止境的有用代码,简短而甜蜜,永无止境的有用的代码,简短而紧凑,永无止境的使用代码,简短而甜蜜,永无止境的用途

  • 6). 30个Python古怪技能集古怪小贴士收藏古怪技能集

  • 7). 我总结的80《菜鸟学习专页》《菜鸟学习专页》《菜鸟学习》Python精选干货.pdf》,都是干货

  • 8). 再见Python!我要学Go了!2500词深度分析词深度分析词深度分析 !

  • 9).发现了一只舔狗的福利!这Python爬虫神器太酷了,不能自动下载女孩的照片

点击阅读原文点击查看点击点击阅读点击阅读原文点击查看B放我鸽子看录像!站在我的录像带上!在视频里放我鸽子!站在我的录像带上!

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除