博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 自定义函数的特殊属性(收藏专用)
阅读量:5882 次
发布时间:2019-06-19

本文共 3320 字,大约阅读时间需要 11 分钟。

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

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

class Test():    def func(self, v = 'dog'):        '''这里演示一个闭包函数'''        name = 'dobi'        def inn_func(age = 1):            print(name, v, age)        return inn_functest = Test()clsfunc = test.func()

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

print(Test.func)# 
print(test.func)#
>print(clsfunc)#
.inn_func at 0x0000020F071D7F28>

__doc__

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

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

__name__

可写;获取函数的名称。

print('Test.func.__name__:', Test.func.__name__)# Test.func.__name__: funcTest.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.funcTest.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__: def func2():print('cat')Test.func.__code__ = func2.__code__Test.func()# catprint('Test.func.__code__:', Test.func.__code__)# Test.func.__code__: 

__globals__

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

print('Test.func.__globals__:', Test.func.__globals__)# Test.func.__globals__: {# '__cached__': None, # 'Test': 
, # '__builtins__':
, # 'func2':
, # '__spec__': None, # '__doc__': None, # '__file__': 'D:\\...\\a.py', # 'test': <__main__.Test object at 0x0000020F077E5DA0>, # 'clsfunc':
.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__)# Noneprint('clsfunc.__closure__:', clsfunc.__closure__)# clsfunc.__closure__: (# 
, #
# )print('clsfunc.__closure__[x]:', clsfunc.__closure__[0].cell_contents, clsfunc.__closure__[1].cell_contents)# clsfunc.__closure__[x]: dobi dog

__annotations__

可写;具体详见“”

__kwdefaults__

可写,具体详见 “”

转载地址:http://jfvix.baihongyu.com/

你可能感兴趣的文章
memcached 分布式聚类算法
查看>>
jquery css3问卷答题卡翻页动画效果
查看>>
$digest already in progress 解决办法——续
查看>>
虚拟机 centos设置代理上网
查看>>
Struts2中Date日期转换的问题
查看>>
mysql 数据类型
查看>>
Ubuntu 设置当前用户sudo免密码
查看>>
设置tomcat远程debug
查看>>
android 电池(一):锂电池基本原理篇【转】
查看>>
Total Command 常用快捷键
查看>>
ionic 调用手机的打电话功能
查看>>
怎么使用阿里云直播服务应用到现在主流直播平台中
查看>>
1000 加密算法
查看>>
exif_imagetype() 函数在linux下的php中不存在
查看>>
Ruby的case语句
查看>>
Linux的链接文件-ln命令
查看>>
maven的tomcat插件如何进行debug调试
查看>>
table表头固定
查看>>
截取字符串中两个字符串中的字符串
查看>>
spring xml properties split with comma for list
查看>>