python系列教程205——函数属性

Posted 人工智能AI技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python系列教程205——函数属性相关的知识,希望对你有一定的参考价值。

朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

由于函数是对象,所以函数比我们所预料的更灵活。例如,一旦我们创建一个函数,可以像往常一样调用它:

>>>def func(a):

...    b = 'spam'

...    return b * a

...

>>>func(8)

'spamspamspamspamspamspamspamspam'

我们也可以通用地检查它们的属性(如下代码在Python 3.0中运行,但是Python 2.6中的结果是类似的):

>>>func.__name__

'func'

>>>dir(func)

['__annotations__','__call__','__class__','__closure__','__code__',

...more omitted...

'__repr__','__setattr__','__sizeof__','__str__','__subclasshook__']

其中一些属性还提供了函数的本地变量和参数等方面的细节:

>>>func.__code__

<code object func at 0x0257C9B0,file "<stdin>",line 1>




>>>dir(func.__code__)

['__class__','__delattr__','__doc__','__eq__','__format__','__ge__',

...more omitted...

'co_argcount','co_cellvars','co_code','co_consts','co_filename',

'co_firstlineno','co_flags','co_freevars','co_kwonlyargcount','co_lnotab',

'co_name','co_names','co_nlocals','co_stacksize','co_varnames']




>>>func.__code__.co_varnames

('a','b')

>>>func.__code__.co_argcount

1

工具编写者可以利用这些信息来管理函数。

函数对象不仅限于前面列出的系统定义的属性。我们也可以向函数附加任意的用户定义的属性:

>>>func

<function func at 0x0257C738>

>>>func.count = 0

>>>func.count += 1

>>>func.count

1

>>>func.handles = 'Button-Press'

>>>func.handles

'Button-Press'

>>>dir(func)

['__annotations__','__call__','__class__','__closure__','__code__',...more omitted...

__str__','__subclasshook__','count','handles']

这样的属性可以用来直接把状态信息附加到函数对象,而不必使用全局、非本地和类等其他技术。和非本地不同,这样的属性可以在函数自身的任何地方访问。从某种意义上讲,这也是模拟其他语言中的“静态本地变量”的一种方式——这种变量的名称对于一个函数来说是本地的,但是,其值在函数退出后仍然保留。

以上是关于python系列教程205——函数属性的主要内容,如果未能解决你的问题,请参考以下文章

python系列教程151——range函数

python系列教程201——递归函数

python系列教程206——函数注释

python系列教程201——递归函数

廖雪峰的Python系列教程——函数式编程之偏函数

python系列教程154——zip函数