gpt4 book ai didi

python - python3中的method和function有必要区分吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:19:46 29 4
gpt4 key购买 nike

Python 中有很多方法和函数。

这是一段代码

a = list('hello,world')
len(a)

文档说 len() 是一个

builtin_function_or_method

我知道方法和函数之间的区别,方法是在对象的上下文中,而函数不是。

问题是,在博客中有必要区分方法和功能吗?

例如,我正在写一个教程,我可以说

expression_1: len(a) 函数给出列表a中的元素个数

expression_2: len(a) 方法给出列表a中的元素个数

这样的场景有必要区分术语吗?

最佳答案

就术语而言,方法附加到类实例(或类本身,对于 classmethodstaticmethod),函数不是。

实际上,在 Python 3 中,这种区别比以前要弱得多。最初,在 Python 2 中,“方法”更为重要;如果在类中引用函数,则在类中定义函数使其成为未绑定(bind)方法,如果在实例中引用,则使其成为绑定(bind)方法。

在 Python 3 中,未绑定(bind)方法的概念消失了;当从类本身引用时,您将获得一个普通函数,而不是一个方法(绑定(bind)或未绑定(bind));当您从类的实例中引用方法时,您只会得到一个绑定(bind)方法。

从本质上讲,现在确实有两类事物:

  1. 不能作为方法绑定(bind)的函数(因为它们没有实现描述符协议(protocol)来生成绑定(bind)方法;仅适用于 CPython 中的内置函数)
  2. 可以绑定(bind)为方法的函数(包括 Python 本身定义的所有函数)

类别 2 中的所有内容都是函数,如果附加到类,则可以充当方法,然后从该类的实例中引用。术语描述了意图,但在实现方面,几乎没有什么区别。

请注意,即使在 Python 2 中,两种类别的方法也是相同的,只是即使从类本身加载时也会调​​用函数的描述符协议(protocol)(绕过它并在不创建未绑定(bind)方法的情况下获取原始函数,你必须做 ClassName.__dict__['methodname'])。因此,作为实现问题,方法一直只是绑定(bind)函数的结果。

关于python - python3中的method和function有必要区分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56267153/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com