百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python 中的装饰器、性能分析器、密码和作用域

off999 2024-09-20 22:52 57 浏览 0 评论


装饰器

在 Python 中,装饰器是一个函数,它接受另一个函数作为输入,并在不更改原始函数代码的情况下扩展或更改它。装饰器用于干净、重复地向函数或方法(如访问控制、记忆或日志记录)添加功能。“@”语法通常用于将它们应用于函数或方法。

如何在 Python 中创建装饰器?

在 Python 中,必须先创建一个外部函数,该函数接受函数作为参数,然后再创建装饰器函数。装饰功能也被内部功能所包围。基本 Python 装饰器的语法如下:

def my_decorator_func(func):
    def wrapper_func():
        # Do something before the function
        func()
        # Do something after the function
    return wrapper_func

此示例中接受函数参数的装饰器函数称为 my_decorator_func。围绕装饰功能的功能是内部功能,wrapper_func。在调用修饰函数之前和之后,wrapper_func函数具有可以执行的多个操作。

装饰器示例

代码片段是 Python 中向函数添加计时器的装饰器示例。

import time

def timer_decorator(func):
    def wrapper():
        start_time = time.time()
        func()
        end_time = time.time()
        print(f"Time taken: {end_time - start_time} seconds")
    return wrapper

@timer_decorator
def my_function():
    time.sleep(2)
    print("Function executed")

my_function()

Output:
Function executed
Time taken: 2.002316951751709 seconds

在本例中,接受函数参数 func 的装饰器是timer_decorator函数。包装修饰函数的函数称为包装函数。装饰器使用 @timer_decorator 语法应用于 my_function 函数。调用timer_decorator时应用于my_function,并显示函数的执行时间。

性能分析器

性能分析器是用于通过测量在代码的各个部分所花费的时间来分析程序性能的工具。它们有助于识别性能瓶颈和内存泄漏,并优化代码。在 Python 中,标准库提供了两个分析接口: cProfileprofile docs.python.org。

有不同类型的性能分析器,包括确定性分析器和统计分析器。确定性分析器提供精确的测量值,但它们可能会引入开销并影响结果的准确性。另一方面,统计分析器以较少的开销 stackify.com 提供近似测量值。

下面是一个示例,用于 cProfile 演示探查器在 Python 中的用法:

import cProfile

def slow_function():
    time.sleep(2)

def function_to_profile():
    result = slow_function()
    print(f"Result: {result}")

cProfile.run('function_to_profile()', 'profile_output')

Output:
Result: None

在此示例中,定义了一个 function_to_profile 调用 slow_function .然后,我们用来 cProfile.run 分析变量的 function_to_profile 执行并将输出存储在变量 profile_output 中。要分析分析结果,可以使用以下 pstats 模块:

import pstats

stats = pstats.Stats('profile_output')
stats.strip_dirs().sort_stats('cumulative').print_stats()

这将打印在每个函数中花费的累积时间,按 machinelearningmastery.com 花费的总时间的降序排序。

需要注意的是,Python 的内置探查器仅提供时间统计信息,而不提供内存使用情况统计信息。对于内存分析,可以使用 objgraph 和 stackify.com 等 pympler 库。

密码学和加密

数据的机密性、完整性和有效性都受到加密过程的保护,加密过程将明文数据转换为密文。在对手存在的情况下对通信和数据安全的研究和实践被称为密码学。使用数学过程对数据进行加密和解密,保证只有目标受众才能访问 pypi.org 的信息。

在 Python 中,有几个用于加密的包,例如 cryptographypycrypto .

Python 开发人员可以在加密包中找到加密配方和基元。它渴望充当“加密标准库”,包括流行加密方法的高级配方和低级接口,包括对称密码、消息摘要和密钥派生函数 pypi.org、github.com。

下面是使用 cryptography 包进行对称加密的示例:

from cryptography.fernet import Fernet

# Generate a key and store it securely
key = Fernet.generate_key()
f = Fernet(key)

# Encrypt a message
token = f.encrypt(b"A really secret message. Not for prying eyes.")

# Decrypt the message
decrypted_message = f.decrypt(token)

pycrypto 软件包也称为 Python 加密工具包,为安全管理工具、守护程序、服务器等提供加密模块。它包括一个易于使用的随机数生成器和 Python 标准 random 模块 pypi.org 的更强大版本。

下面是一个使用 Crypto 包生成随机数的示例:

from Crypto import Random

rndfile = Random.new()
random_bytes = rndfile.read(16)

from Crypto.Random import random

random_choice = random.choice(['dogs', 'cats', 'bears'])

任何随机选择都是使用此处的 Crypto 包生成的。

Python 中的描述符

Python 中的描述符是一种使用对象作为引用来管理不同类属性的机制。它们用于实现 getter、setter 和 deleter ( __get____set__ , 和 __delete__ ) 等方法,以通过特殊处理(如验证或访问控制)调整属性值。描述符是属性、方法、静态方法、类方法和 super() 函数 geeksforgeeks.org 的基础。

下面是验证和设置属性值的描述符示例:

class PositiveNumber:
    def __get__(self, instance, owner):
        return instance.__dict__[self.name]

    def __set__(self, instance, value):
        if value < 0:
            raise ValueError("Value must be positive")
        instance.__dict__[self.name] = value

    def __set_name__(self, owner, name):
        self.name = name

class MyClass:
    number = PositiveNumber()

obj = MyClass()
obj.number = 42  # This works fine
obj.number = -184  # This will raise a ValueError

在此示例中,我们定义一个 PositiveNumber 实现 、 __set____set_name__ 方法的描述 __get__ 符类。该 MyClass 类具有使用描述符的 PositiveNumber 属性 number 。当我们尝试为 设置一个 number 正值时,它工作正常,但是当我们尝试设置一个负值时,它会引发一个 ValueError .

描述符在以下情况下非常有用:您希望在多个属性或类之间共享通用行为,或者当您想要对 realpython.com 的属性强制执行验证、访问控制或其他处理时。

Python 中的作用域

Python 中的作用域决定了代码中变量和名称的可见性和可访问性。Python 中有四种类型的作用域:本地、封闭、全局和内置 (LEGB) pythonforbeginners.com、realpython.com。

  1. 局部作用域:在函数中定义的变量具有局部作用域,并且只能在该函数中访问。
  2. 封闭作用域:在嵌套函数的情况下,外部函数具有可由内部函数访问的封闭作用域。
  3. 全局作用域:在模块级别定义的变量具有全局作用域,可以从模块内的任何位置访问。
  4. 内置作用域:在内置命名空间中定义的名称(如内置函数和异常)具有内置作用域,可以在代码中的任何位置访问,而无需导入任何内容。

下面是一个示例来演示范围的概念:

x = 10  # Global scope

def outer_function():
    y = 20  # Enclosing scope

    def inner_function():
        z = 30  # Local scope
        print(x, y, z)

    inner_function()

outer_function()

在此示例中,位于全局范围中, y 位于 outer_function 的封闭范围内, x 并且 z 位于 的 inner_function 局部范围内。调用时 inner_function ,它可以访问所有这些变量并打印其值。

作用域用于管理变量的可访问性和可见性,避免名称冲突,并帮助维护干净有序的代码库 programiz.com。

相关推荐

photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
win10下载应用商店(win10应用商店打不开)

1、点击Win10系统的开始菜单,然后在点击应用商店;2、打开Win10应用商店后,在搜索框里输入想要搜索的应用软件,然后点击检索;3、点击搜索到的应用,点击安装;4、点击安装后,系统会提示要切换到这...

dell电脑重装系统win10(dell 重装win10系统)

戴尔笔记本重装系统win10的步骤如下:制作好wepe启动盘之后,将win10系统iso镜像直接复制到U盘。在需要重装系统的戴尔电脑上插入pe启动盘,重启后不停按F12启动快捷键,调出启动菜单对话框,...

android升级包下载安装(android 升级包)

打开手机系统更新升级,前提是官方有新系统推送才能更新  哪个大不一定,但一般规律如下:  1、小版本的更新,通常越更新越大。比如3.1更新到3.2,通常是修复bug,代码量通常会增大,体积就会增大。 ...

hdd硬盘和ssd(ssd硬盘和hdd硬盘是什么意思)

HDD硬盘和SSD硬盘是两种不同类型的电脑存储设备,它们有着以下区别:1.工作原理:HDD硬盘使用机械旋转的磁盘和读写磁头来存储和读取数据,而SSD硬盘则使用闪存存储数据,类似于USB闪存盘。2....

电脑免费软件下载大全(电脑上免费的下载软件)

正常情况下,如果我们想要在自己的电脑上面下载一个不要钱的单机游戏,那么我们是可以直接在我们的软件管理中心进行一个下载的,这个时候我们只需要通过一个权限就能够正常的下载,当然我们也是可以在一些小游戏的软...

mpp文件转换excel(mpp转换成pdf)

要将Excel表格转换为MPP格式,您可以按照以下步骤操作:1.打开Excel表格并确保数据按照项目的不同阶段或任务进行组织。2.将Excel表格中的数据复制到一个新的MicrosoftProj...

win7旗舰版开机密码忘记按f2

方法如下:开始-控制面板-用户帐户;在打开的更改用户帐户界面点击要更改的帐户;然后点击帐户左面的更改密码按钮;在打开的页面上,输入一次当前使用的密码,输入2次要更改的新密码然后保存退出就可以了...

笔记本无音频输出设备(笔记本无音频输出设备)

1、没有声卡驱动,解决方法就是找到笔记本的官网,下载电脑声卡的驱动安装即可。2、没有外界的音频播放设备,解决方法就是买一个外界的音频播放设备插到电脑主机的音频接口上即可。笔记本电脑显示未安装任何音频输...

iso文件能用手机打开吗(iso文件能用手机打开吗安全吗)

一般的压缩软件就可以打开的,比如,好压软件,这个打开只是解压形式的,如果你说的是运行iso文件,这个没有,况且安卓系统也不支持iso运行ISO文件一般用于光盘镜像文件的存储,如果想要在手机上运行ISO...

win7系统卡顿怎么优化(win7很慢很卡怎么优化)

1、首先打开安全卫士,进入安全卫士首页,单击软件窗口右下角的“更多”图标,打开扩展应用程序。2、单击选择“我的工具”。3、在我的工具菜单里面找到“人工服务”单击打开人工服务。4、在人工服务对话框有很多...

如何查看c盘微信聊天记录(如何查看c盘微信聊天记录内存大小)

微信群中的消息只要没删除基本都能保存,想要找微信群中几个多月前的消息可以直接根据日期来查找聊天记录。操作如下:1、打开想要查找记录的微信群,点击右上角人形图标;2、点击查找聊天内容;3、选择按日...

office2016家庭版激活密钥(office家庭版激活码2019)

走淘宝吧,因为零售版的密钥只能用一次。大概几块钱就能激活2016。如果你不在乎钱的话可以向我一样,订阅一个office365.实在不行可以和几个人一起买一个家庭版的365.出现这个情况,找微软申诉是没...

移动硬盘驱动器下载安装(移动硬盘驱动器下载安装教程)

1、右键单击您的桌面,选择“新建文件夹”,并命名该文件夹(例如“usb驱动程序”);2、然后到本站下载驱动程序;3、将其解压缩至在您的桌面上刚刚创建的usb驱动程序文件夹;4、单击开始菜单,然后选择设...

电脑硬盘格式化工具(电脑 格式化硬盘)

硬盘格式化工具很多,PQMACGIG8.0(中文就叫硬盘分区魔法师)是比较好的一个,这个是在WINDOWS下比叫好用,(个人感觉)FDISK也是比较好的一个,这个一般用在DOS下分区格式化WIN...

取消回复欢迎 发表评论: