Python 自定义函数的特殊属性(收藏专用)

在VSCode使用koroFileHeader自动生成Python代码的头注释与函数注释 头注释快捷键Ctrl+Win+I函数注释快捷键Ctrl+Win+T。 阅读详情

来源:xu_zhoufeng 

链接:https://segmentfault.com/a/1190000005685090

Python 中通过函数定义所创建的用户自定义函数对象均具有一些特殊属性,需要注意的是这里介绍的是自定义函数(function类型)的特殊属性,而非方法(method 类型)的特殊属性,函数和方法的特熟属性以及默认的返回值可能不尽相同。

对于大多数特殊属性,可以通过下面这个例子示范一下:

class Test():

    def func(self, v = 'dog'):
        '''这里演示一个闭包函数'''

        name = 'dobi'
        def inn_func(age = 1):
            print(name, v, age)

        return inn_func

test = Test()
clsfunc = test.func()

首先看一下方法与函数的区别:实例的函数为bound method,而类的函数以及闭包均为function,需要强调的是 Python 2.x 中类的函数为unbound method,这点与Python 3.x 有所不同,本文则基于 Python 3.51 整理。

print(Test.func)
# <function Test.func at 0x0000020F0766E268>
print(test.func)
# <bound method Test.func of <__main__.Test object at 0x0000020F077E5DA0>>
print(clsfunc)
# <function Test.func.<locals>.inn_func at 0x0000020F071D7F28>

__doc__

可写;用于获取函数的文档说明,如果没有,则返回 None。

print('Test.func.__doc__:', Test.func.__doc__)
# Test.func.__doc__: 这里演示一个闭包函数
Test.func.__doc__ = 'ddd'  #注意,这里是 Test,不能是 test
print('Test.func.__doc__:', Test.func.__doc__)
# Test.func.__doc__: ddd

__name__

可写;获取函数的名称。

print('Test.func.__name__:', Test.func.__name__)
# Test.func.__name__: func
Test.func.__name__ = 'pet'
print('Test.func.__name__:', Test.func.__name__)
# Test.func.__name__: pet

__qualname__

可写;获取函数的qualname:点示法显示函数名称、所在的类、模块等梯级地址。

print('Test.func.__qualname__:', Test.func.__qualname__)
# Test.func.__qualname__: Test.func
Test.func.__qualname__ = 'path'
print('Test.func.__qualname__:', Test.func.__qualname__)
# Test.func.__qualname__: path

__module__

可写;返回函数所在的模块,如果无则返回None。

print('Test.func.__module__:', Test.func.__module__)
# Test.func.__module__: __main__
Test.func.__module__ = 'a'
print('Test.func.__module__:', Test.func.__module__)
# Test.func.__module__: a

__defaults__

可写;以元组的形式返回函数的默认参数,如果无默认参数则返回None。

print('Test.func.__defaults__:', Test.func.__defaults__)
# Test.func.__defaults__: ('dog',)
Test.func.__defaults__ = ('cat',)
print('Test.func.__defaults__:', Test.func.__defaults__)
# Test.func.__defaults__: ('cat',)
print('clsfunc.__defaults__:', clsfunc.__defaults__)
# clsfunc.__defaults__: (1,)
clsfunc.__defaults__ = (2,)
print('clsfunc.__defaults__:', clsfunc.__defaults__)
# clsfunc.__defaults__: (2,)

__code__

可写;返回已编译的函数对象。

print('Test.func.__code__:', Test.func.__code__)
# Test.func.__code__: <code object func at 0x0000020F072C2F60, file "D:\...\a.py", line 4>

def func2():print('cat')
Test.func.__code__ = func2.__code__
Test.func()
# cat
print('Test.func.__code__:', Test.func.__code__)
# Test.func.__code__: <code object func2 at 0x0000020F072C5780, file "D:\...\a.py", line 38>

__globals__

只读,以字典的形式返回函数所在的全局命名空间所定义的全局变量。

print('Test.func.__globals__:', Test.func.__globals__)
# Test.func.__globals__: {
# '__cached__': None, 
# 'Test': <class '__main__.Test'>, 
# '__builtins__': <module 'builtins' (built-in)>, 
# 'func2': <function func2 at 0x0000020F077D3C80>, 
# '__spec__': None, 
# '__doc__': None, 
# '__file__': 'D:\\...\\a.py', 
# 'test': <__main__.Test object at 0x0000020F077E5DA0>, 
# 'clsfunc': <function Test.func.<locals>.inn_func at 0x0000020F071D7F28>, 
# '__package__': None, 
# '__name__': '__main__', 
# '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020F07289828>
# }

__dict__

可写;以字典的形式返回命名空间所支持的任意自定义的函数属性。

print('Test.func.__dict__:', Test.func.__dict__)
# Test.func.__dict__: {}

__closure__

只读;以包含cell的元组形式返回闭包所包含的自由变量。

print('Test.func.__closure__:', Test.func.__closure__)
# None
print('clsfunc.__closure__:', clsfunc.__closure__)
# clsfunc.__closure__: (
# <cell at 0x0000020F071FE708: str object at 0x0000020F07289998>, 
# <cell at 0x0000020F072B8C78: str object at 0x0000020F0766C538>
# )
print('clsfunc.__closure__[x]:', clsfunc.__closure__[0].cell_contents, clsfunc.__closure__[1].cell_contents)
# clsfunc.__closure__[x]: dobi dog

__annotations__

可写;具体详见“Python 的函数注释”

__kwdefaults__

可写,具体详见 “Python 的 Keyword-Only Arguments(强制关键字参数)”

ESP32-C3入门教程 问题篇⑳——subprocess.CalledProcessError: Command ‘[‘D:\\.espressif\\python_env\\idf5.4_py3. ESP32-C3入门教程 问题篇⑳——subprocess.CalledProcessError: Command '['D:\\.espressif\\python_env\\idf5.4_py3. 阅读详情

相关推荐

Cortex-M TrustZone实战:从硬件隔离到安全交互的嵌入式开发指南

在嵌入式系统开发中,硬件安全隔离是构建可信执行环境(TEE)的核心技术。其原理是通过处理器硬件机制,将系统资源划分为安全与非安全域,实现内存、外设和代码的强制访问控制。这项技术的核心价值在于,它能在单一芯片上为资源受限的物联网(IoT)设备、智能传感器等提供芯片级的安全基础,无需依赖外置安全元件,从而降低BOM成本并简化设计。典型的应用场景包括保护设备密钥、实现安全启动、构建安全服务(如加密、密钥管理)以供应用程序调用。本文聚焦于Arm Cortex-M系列微控制器上的TrustZone技术实现,针对开发中

weixin_42639246的博客 300

python函数属性和注解

python函数定义时生成函数对象并赋值给了函数名,函数通过圆括号()进行调用。print(msg)​#直接调用函数>>> echo('直接调用')直接调用#赋值给其他变量,间接调用>>> c=echo>>> c('间接调用')间接调用func(arg)​#作为入参>>> indirect(echo,'作为函数入参调用')作为函数入参调用#存储函数对象>>> funsL=[(c,'存储函数对象'),(echo,'梯阅线条')]

sinat_34735632的博客 276

别让PEX和后仿真拖后腿:Calibre与Virtuoso ADE联调的那些‘坑’与最佳实践

本文深入探讨了Calibre与Virtuoso ADE在PEX寄生参数提取和后仿真联调中的常见问题与解决方案。针对DRC/LVS验证通过后出现的网表导入错误和仿真波形异常,提供了七大典型场景的实战经验,包括PEX提取模式选择、CalibreView生成细节、环境变量配置等关键环节的最佳实践,助力工程师高效完成芯片设计验证。

weixin_33695450的博客 392

python的函数属性

1. 函数的参数 在Python中,函数的参数可以有默认值,也支持使用可变参数,所以Python并不需要像其他语言一样支持函数的重载,因为我们在定义一个函数的时候可以让它有多种不同的使用方式。 # 在参数名前面的*表示args是一个可变参数 # 即在调用add函数时可以传入0个或多个参数 def add(*args): total = 0 for val in ar...

Mortal's blog 1761

别再用Excel硬算传热了!用MATLAB/Octave复现国赛数学建模A题(附完整代码与避坑指南)

本文详细介绍了如何利用MATLAB/Octave高效解决数学建模中的传热问题,替代传统的Excel计算方法。通过复现2018年国赛A题的高温作业服传热模型,从理论推导到代码实现,提供了完整的有限差分法解决方案和参数拟合技巧,帮助读者提升数学建模效率和准确性。

weixin_30512965的博客 379

195、大模型蒸馏与压缩:知识蒸馏与VLA模型轻量化

折腾完这一整套流程,最大的感悟是:知识蒸馏不是简单的模型压缩,而是知识迁移的工程艺术。每一步都有坑,每个参数都可能影响最终性能。给后来者的建议是:先别急着上蒸馏,把teacher模型的推理延迟和显存占用测清楚,确定瓶颈在哪里——是计算量太大还是内存带宽不够,这决定了你该用蒸馏还是量化还是剪枝。蒸馏训练时一定要监控每一层的特征对齐loss,别只看总loss。如果某一层的对齐loss特别高,说明student在这一层学歪了,需要调整该层的损失权重或者增加该层的投影头容量。

sundong_81的博客 110

【Python进阶篇】python之函数的类的属性

一、属性   如果你已经了解Python类中的方法,那么属性就非常简单了,因为Python中的属性其实是普通方法的变种。 对于属性,有以下三个知识点: 属性的基本使用 属性的两种定义方式 1、属性的基本使用 # ############### 定义 ############### class Foo: def func(self): pass # 定...

Jian Sun_的博客 5453

ClawManager实战:OpenClaw批量部署+精细化权限管控,运维效率拉满90%

ClawManager彻底解决了OpenClaw规模化部署的运维痛点,它不是简单的“批量部署工具”,而是一套完整的企业级管理方案——从模板配置、批量部署,到权限管控、监控审计、AI治理,覆盖OpenClaw全生命周期管理,让OpenClaw从“个人工具”升级为“企业级AI基础设施”。对于中小企业,Docker一键部署即可快速落地,无需复杂配置;对于大型企业,K8s部署支持高可用、横向扩展,结合Keycloak对接企业现有认证系统,可完美融入企业IT架构。

2601_94871597的博客 607

python函数的属性_python的函数属性

1. 函数的参数在Python中,函数的参数可以有默认值,也支持使用可变参数,所以Python并不需要像其他语言一样支持函数的重载,因为我们在定义一个函数的时候可以让它有多种不同的使用方式。# 在参数名前面的*表示args是一个可变参数# 即在调用add函数时可以传入0个或多个参数def add(*args):total = 0for val in args:total += valreturn ...

weixin_42515313的博客 444

BLDC&PMSM电机控制器硬件设计工程(三)控制器驱动芯片方案

在汽车电机控制系统中,栅极驱动IC扮演着至关重要的角色。它作为主控MCU与功率开关管(MOSFET/IGBT)之间的桥梁,将微弱的PWM信号放大为足以快速、可靠驱动功率管的强信号。本文将深入解析英飞凌、TI和NXP的车规级栅极驱动方案,重点关注半桥和单侧驱动IC。1)为什么需要栅极驱动器?栅极驱动器是低压控制器和高压电路之间的缓冲电路,用于放大控制器的控制信号,从而实现功率器件更有效的导通和关断。栅极驱动器的作用总结如下:1.将控制器的低压信号转化为更高电压的驱动信号,以实现功率器件稳定导通和关断。

小幽余生不加糖 492

Python 爬虫实战:arXiv 学术论文 PDF 批量下载(含反爬策略与文件命名规范)

arXiv 是全球最大的免费开放预印本论文平台之一,涵盖物理学、数学、计算机科学等多个学科领域。研究人员、学生和工程师常常需要批量下载论文 PDF 进行文献综述、构建机器学习数据集或进行文本挖掘研究。然而,手动逐篇下载论文效率低下,因此开发一个自动化批量下载工具显得尤为重要。

yansideyucsdn的博客 1817

python函数 - 函数创建、属性、参数及偏函数

http://blog.youkuaiyun.com/pipisorry/article/details/39123103 函数的创建 当我们在Python里定义函数时发生了什么呢? 关键字def有两个功能:它可以创建一个函数对象,然后把这个函数对象赋值给一个变量(即我们的函数名)。 函数对象的属性 Python是面向对象的语言,在python中一切皆对象。函数属性以字典的形式存储的,键为属性名...

皮皮blog 1万+

生成模型实战 | ProGAN详解与实现

Progressive GAN (ProGAN) 是一种通过渐进式增长网络结构来生成高分辨率、高保真图像的技术。传统 GAN 难以直接生成超过 256x256 分辨率的图像,而 ProGAN 创新性地从低分辨率开始训练生成器和判别器,逐步添加网络层以提高分辨率,直至达到1024x1024。该方法结合了像素归一化、小批次统计信息和均衡化学习率等关键技术,并使用 WGAN-GP 损失函数确保训练稳定性。ProGAN 是首个能生成1024x1024高保真人脸图像的模型,但其训练耗时较长,且对计算资源要求较高。

盼小辉丶的博客 1433

python自定义函数如何命名_Python 自定义函数的特殊属性(收藏专用)

Python 中通过函数定义所创建的用户自定义函数对象均具有一些特殊属性,需要注意的是这里介绍的是自定义函数(function类型)的特殊属性,而非方法(method 类型)的特殊属性,函数和方法的特熟属性以及默认的返回值可能不尽相同。对于大多数特殊属性,可以通过下面这个例子示范一下:class Test():def func(self, v = 'dog'):'''这里演示一个闭包函数'''na...

weixin_39947351的博客 227

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python function at 0x00000_Python 自定义函数的特殊属性(收藏专用)

Python 中通过函数定义所创建的用户自定义函数对象均具有一些特殊属性,需要注意的是这里介绍的是自定义函数(function类型)的特殊属性,而非方法(method 类型)的特殊属性,函数和方法的特熟属性以及默认的返回值可能不尽相同。对于大多数特殊属性,可以通过下面这个例子示范一下:class Test():def func(self, v = 'dog'):'''这里演示一个闭包函数'''na...

weixin_32147807的博客 6792

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python特殊属性——《跟老吕学Python编程》

这些特殊属性为我们提供了丰富的元数据和自省能力,使得我们能够更好地理解、操作和扩展Python对象模型。这些特殊属性为Python的对象模型提供了丰富的元数据,并使得我们能够在运行时进行反射和自省。属性是一个元组,包含了类及其所有基类的线性化顺序,用于解析属性查找和方法调用。通过这个属性,我们可以获取对象的类型信息,并可以进一步访问类的属性和方法。属性仅对普通对象有效,对于某些内置类型(如整数、字符串等)或实现了特殊属性查找机制的类,属性,它是一个字典,用于存储对象的实例属性。返回的是不带类名的方法名。

Python老吕的博客 1071

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

全网最详细的Python学习笔记,值得收藏

我总结了python已下点:面向对象 类和对象的创建 属相相关 方法相关 元类 内置的特殊属性 内置的特殊方法PS注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你缺新项目练习或者没有python精讲教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新教程项目,还可以跟老司机交流讨教! 类和对象的创建 类 # 经典类 没有继承 object的类 # 新式类 继承了 object的类 class Money: ...

zhoumouren88的博客 483

python定义类代码_python类定义

在我的收藏中有一篇特别详细的类讲解class myclass:'this is my first class of python'# foo是类属性,相当于static foo是静态成员,可以用类名直接访问foo=100# myfun 是类方法,必须由类的实例来调用def myfun (self):print myclass.fooC=myclass()C.myfun()类的特殊属性myclass...

weixin_39679091的博客 325

【Python系列】只更新非空的字段

在 Python 中,将对象转换为字典通常涉及到对象的属性和方法。如果你有一个类实例,并且想要将其属性转换为字典格式,你可以定义一个方法来做这件事。# 假设这个类有一些属性"""生成更新字典,只有当字段非空时才包含该字段。""""""将对象的属性转换为字典。"""# 使用示例在这个例子中,类有一个to_dict静态方法,它遍历对象的所有属性(不包括可调用的方法和特殊属性),并将它们作为键值对添加到字典中。请注意,to_dict方法使用了dir()函数来获取对象的所有属性和方法,然后使用。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 2万+

Python 类型注解的类型 Generic Alias Union GenericAlias 类型 标准泛型类 GenericAlias 对象的特殊属性——《跟老吕学Python编程》

类型注解的类型如 Generic Alias、Union、以及 GenericAlias 类型在 Python 的类型系统中扮演着重要的角色。它们提供了丰富的类型表达能力,使得我们能够更加精确地描述代码中的数据和逻辑,从而提高代码的可读性和可维护性。👨‍💻博主Python老吕评论,您的举手之劳将对我提供了无限的写作动力!🤞🔥《跟老吕学Python编程》《Python游戏开发实战讲解》《Python Web开发实战》《Python网络爬虫实战》《Python APP开发实战》🌐《HTML》

Python老吕的博客 1444

property特殊属性/类方法/静态方法

property特殊属性/类方法/静态方法 property是将一个方法伪装成了一个属性,在代码层面看是没有本质提升的, 但是在代码写出来之后,在类外面看来就由执行一个动作变成了查询一个属性,是面向对象的一种体现 在对应的方法前加装饰器@property即可 此时再调用相关内容的时候,不用再方法名加括号,直接以属性的形式,调用属性(实际是...

weixin_30672295的博客 109

python—类的组成、对象的创建、面向对象三大特征

python—类的组成、对象的创建、面向对象三大特征

weixin_65049289的博客 258

python与java的区别与联系,python和java的本质区别

python中数据类型有数值型(整型,浮点型,布尔类型,复数类型),字符串(str),列表(list),元组,集合,字典。13、python中类方法跟java中的类方法也差不多,访问方法也差不多,区别就是python中需要给类方法加上个注解@classmethod,而java中也是加上static关键字。而java中是直接在类内部定义的。12、python中类变量和java中的类变量也差不多,访问方法也差不多,区别就是都是在类中直接定义,而java中需要加static关键字,而python不需要加关键字。

npy199331的博客 2776

【Python】Python 官方标准常用库以及翻译

Python 标准库一览(Python进阶学习) 标签: python标准库文档 2016-08-27 11:28 12059人阅读 评论(0) 收藏 举报 分类: Phython(9)版权声明:本文为Jurbo原创文章,转载请加上原创链接,标明出处。目录(?)[+]写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连应该用哪个类库都不知道,还要去百度(

Digital World 7247

python开发文档怎么写,python3官方文档 中文

本篇文章给大家谈谈python开发文档怎么写,以及python3官方文档 中文,希望对各位有所帮助,不要忘了收藏本站喔。这篇文章主要介绍了python全系列官方中文文档,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下python基础知识点精心整理。Source code download: 本文相关源码​​​​​以下部分描述了解释器中内置的标准类型。主要内置类型有数字、序列、映射、类、实例和异常python自学可能吗。有些多项集类是可变的。 它们用于

zjl102562的博客 1190

收藏

K-means聚类算法如何应对数据的噪音和离散特征处理的问题? https://www.zhihu.com/question/60868444/answer/188816384   Matplotlib随记2 https://www.cnblogs.com/huanggen/p/7533088.html   PCA的数学原理 https://www.cnblogs.com/mikew...

TongTongLT的博客 278
上一篇: button和sumbit提交表单的区别
下一篇: Python 模块之time
Wang_AI
博客等级 码龄12年 988粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值