• 售前

  • 售后

热门帖子
入门百科

基于Python 函数和方法的区别分析

[复制链接]
阿拉斯加他爸爸 显示全部楼层 发表于 2021-10-26 12:28:34 |阅读模式 打印 上一主题 下一主题
简单总结:

1、与类和实例无绑定关系的function都属于函数(function);
2、与类和实例有绑定关系的function都属于方法(method)。
首先摒弃错误认知:并不是类中的调用都叫方法
函数(FunctionType)

函数是封装了一些独立的功能,可以直接调用,能将一些数据(参数)传递进去举行处理处罚,然后返回一些数据(返回值),也可以没有返回值。可以直接在模块中举行界说利用。 所有传递给函数的数据都是显式传递的。
方法(MethodType)

方法和函数类似,同样封装了独立的功能,但是方法是只能依靠类或者对象来调用的,表示针对性的操作。
方法中的数据self和cls是隐式传递的,即方法的调用者;
方法可以操作类内部的数据
简单的说,函数在python中独立存在,可直接利用的,而方法是必须被别人调用才气实现的。
静态方法除外(与类和对象均无关,通过类名和对象名均可被调用,属函数)
在模块中实现的函数只要导入这个模块的这个函数既可以恣意利用了,但是在类中声明的必须导入这个类之后然后再通过创建实例或者类名来调用。可以说直接在模块中声明的是更广泛广泛性的函数,而在类中声明的方法一样平常是专属于一类事物特有的
  1. from types import MethodType,FunctionType
  2. class Foo(object):
  3.   def __init__(self):
  4.    self.name="haiyan"
  5.   def func(self):
  6.    print(self.name)
  7. obj = Foo()
  8. print(isinstance(obj.func,FunctionType)) #False
  9. print(isinstance(obj.func,MethodType)) #True #说明这是一个方法
  10. print(isinstance(Foo.func,FunctionType)) #True #说明这是一个函数。
  11. print(isinstance(Foo.func,MethodType)) #False
复制代码
是的!例子中很明确,类对象调用func是方法,类调用func是函数,并且是自己传递参数123!
留意,这只是在 python3 中才有的区分,python2 中全部称为方法。
最大的区别是参数的传递参数,方法是自动传参self,函数是自动传参
那么以后我们就可以直接看参数是如何传递的来判断,
如果还不确定可以打印范例看看
  1. from types import FunctionType,MethodType
  2. print(isinstance(obj.func,MethodType)) ---># True
  3. print(isinstance(Foo.func,FunctionType)) ---># True
复制代码
表面区别:

区别一所处的位置:函数是直接写文件中而不是class中,方法是只能写在class中。
区别二界说的方式:

1.函数界说的方式 def关键字 然后接函数名 再是括号 括号内里写形参也可以省略不写形参
  1. def functionName():
  2. """这里是函数的注释"""
  3. print("这一块写函数的内容"
复制代码
2.方法界说的方式 首先方法是界说在类中的其他他大体和函数界说差不多,这里需要留意的一点就是方法必须带一个默认参数(相称于this),静态方法除外
  1. class className(super):
  2. def methodName(self):
  3.   """这里是方法的注释
  4.   self相当于this;
  5.   """
  6.   print("这里是方法的内容")
复制代码
区别三调用的方式:

1.函数的调用:函数的调用是直接写 函数名(函数参数1,函数参数2,......)
  1. def functionName():
  2. print("这是一个函数")
  3. #调用
  4. functionName()
复制代码
2.方法的调用:方法是通过对象点方法调用的(这里是指对象方法)
  1. class className:
  2. def method(self):
  3.   print("这是一个方法")
  4. #调用---------------------
  5. #实例化对象
  6. c=className()
  7. c.method()
复制代码
python类的实例方法、静态方法和类方法区别及其应用场景

一、先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法。

ps.python中self,cls的区别
平凡实例方法,第一个参数需要是self,它表示一个详细的实例本身。
如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个平凡的函数利用。
而对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。
  1. # coding:utf-8
  2. class Foo(object):
  3. """类三种方法语法形式"""
  4. def instance_method(self):
  5.   print("是类{}的实例方法,只能被实例对象调用".format(Foo))
  6. @staticmethod
  7. def static_method():
  8.   print("是静态方法")
  9. @classmethod
  10. def class_method(cls):
  11.   print("是类方法")
  12. foo = Foo()
  13. foo.instance_method()
  14. foo.static_method()
  15. foo.class_method()
  16. print('----------------')
  17. Foo.static_method()
  18. Foo.class_method()
复制代码
运行结果如下
  1. 是类<class '__main__.Foo'>的实例方法,只能被实例对象调用
  2. 是静态方法
  3. 是类方法
  4. ----------------
  5. 是静态方法
  6. 是类方法
复制代码
分析:
实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。
实例方法,第一个参数必须要默认传实例对象,一样平常习惯用self。
静态方法,参数没有要求。
类方法,第一个参数必须要默认传类,一样平常习惯用cls。
增补:python方法和函数集锦
方法的利用: 变量.方法名(参数)
函数的利用: 函数名(参数)
字符串

1、删除空缺

rstrip(): 返归去掉尾部的空格后的字符串。(不改变原字符串)
lstrip(): 去掉首部空格
strip(): 去掉两端的空格
2、修改字符串巨细写

title(): 以首字母大写的方式显示每个单词
upper(): 将字符串转换为全部大写
lower(): 将字符串转换为全部小写
  1. name = "ada lovelace"
  2. print(name.title())
  3. # => Ada Lovelace
  4. print(name.upper())
  5. # => ADA LOVELACE
  6. print(name.lower())
  7. # => ada lovelace
复制代码
数字、浮点数

1、范例转换

str():将数字范例用作字符串
列表

1、添加元素

append(): 在列表末端添加元素 insert(index, value): 在列表索引位置添加新元素
2、删除元素

del语句
pop(): 删除列表末端元素
pop(index): 删除指定索引位置的元素
remove(value): 删除指定值的元素(第一次出现值)
3、排序

枚举的方法只实用于所有元素都是小写字母的列表,如果是大写字母和小写字母混合的情况,因为解读大写字母的方式有多种,所以需要进一步指定精确的排列方法才行。
(1) 永久性修改
sort(): 按列表元素首字母排序。(直接修改原列表)
sort(reverse = True): 按列表元素首字母倒序排序。
利用:arr.sort()
(2) 暂时排序(返回排序后的列表,不改变原列表)
sorted():按列表元素首字母排序。 sorted(arr, reverse = True): 按列表元素首字母倒序排序利用:sorted(arr)
4、倒着打印列表

reverse()
反转列表元素的顺序,但并不举行排序处理处罚。永久性修改列表元素的排列顺序。但是可再次利用reverse()方法反转规复
5、确定列表的长度

len(arr)
以上为个人履历,希望能给大家一个参考,也希望大家多多支持草根技能分享。如有错误或未思量完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作