0


Python方法与函数的区别

补充

函数:function,功能,代码包
方法:method,类函数 class function,generic function 泛函数,对象与生俱来的函数
另看到一篇文章的标题是《Excel200多个宏代码集,比函数强多了!有效提高工作效率!》,这里的函数是内置函数,经历了应用的洗礼和算法的优化的常用功能的代码包。而宏代码集是宏所用的解释器的支持下的自定义代码包,宏的名称就相当于自定义函数的代码名。

之前

《Python学习手册第五版上册》P216

方法是与特定对象相关联,并作用于特定对象的简单函数。
从技术的角度讲,他们是附属于对象的属性,而这些属性碰巧引用了可调用函数罢了,这些函数总是拥有一个隐含的主体(self)。
从更精细的角度看,函数就是代码包,而方法调用同时结合了两种操作:一次属性获取和一次函数调用。

方法是类内置的函数,与类相关联,无法单独调用,调用时通常都引用了类的一些属性
方法和函数都是人对其定义的概念,用于人对其功能的区分,并不会真的对使用有什么影响
类内置的方法必定要与类相关联,不然调用时会报错

type(str.__add__)
Out[1]: wrapper_descriptor # 封装_描述符type(str.find)
Out[2]: method_descriptor # 方法_描述符type('abc'.find)
Out[3]: builtin_function_or_method # 内置函数或方法classFoo(object):def__init__(self):
         self.name="haiyan"deffunc(self):print(self.name)deff():# 错误演示,下面会有报错passtype(Foo)# 类
Out[28]:type

f=Foo()type(f)# 类Foo的一个对象
Out[30]: __main__.Foo

type(Foo.f)# 当用类去描述时,这叫做函数
Out[14]: function

Foo.func()
TypeError: func() missing 1 required positional argument:'self'

Foo.func(self)
NameError: name 'self'isnot defined
# 以上正确定义的类内的方法,无法被类调用,其实类本身就不是这么用的,他就是要实现其他类以及该类的对象的

Foo.f()# 但这个错误定义的函数却可以使用,但也仅能这样使用type(f.f)# 当用对象去
Out[15]: method

f.name # 属性(对象,元素)
Out[31]:'haiyan'

Foo.func # 来自于类的方法
Out[35]:<function __main__.Foo.func(self)>

f.func
Out[34]:<bound method Foo.func of <__main__.Foo object at 0x000001DFD280EAF0>># 绑定方法于类的函数,类的对象某某某hex(id(f))
Out[37]:'0x1dfd280eaf0'# 应对上述对象的地址

f.func()# 运行方法
haiyan

f.f()
TypeError: f() takes 0 positional arguments but 1 was given
# 报错,原因是类中定义函数时,需要有一个参数self

总之,方法和函数的称谓只是方便我们使用,实际与运行为准

常规情况下,类内定义的函数需要增加self的参数,只能对象来调用它,而对于对象来说,他就是方法
非常规情况下,类内不使用self参数的函数可以用类直接调用,而对象无法调用它,会报错,他是仅能由类所调用的一个函数,实际应用可能会运算和现实与该类相关的运行环境等

classFoo(object):
     name='hi'def__init__(self):
         self.name="haiyan"deffunc(self):print(self.name)deff():print(Foo.name)

Foo.name
Out[46]:'hi'

Foo.f
Out[47]:<function __main__.Foo.f()>

Foo.f()
hi

对象无法调用.f,因为对象自带.self属性/参数,这与.f的参数不符,总之带self参数的,类无法调用它,对象专用。不带self参数的,对象不能调用,类可以调用。
方法只是对对象而言,而对类而言,这些函数都是类的一个属性。能被对象调用的类的函数,对类的对象而言,就是方法,而不带self的类的函数,可以当作类自身的调试用功能,而与类的对象无关。

标签:

本文转载自: https://blog.csdn.net/jhsxy2005/article/details/116860622
版权归原作者 一心月 所有, 如有侵权,请联系我们删除。

“Python方法与函数的区别”的评论:

还没有评论