基于Python 函数和方法的区别说明


Posted in Python onMarch 24, 2021

简单总结:

1、与类和实例无绑定关系的function都属于函数(function);

2、与类和实例有绑定关系的function都属于方法(method)。

首先摒弃错误认知:并不是类中的调用都叫方法

函数(FunctionType)

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

方法(MethodType)

方法和函数类似,同样封装了独立的功能,但是方法是只能依靠类或者对象来调用的,表示针对性的操作。

方法中的数据self和cls是隐式传递的,即方法的调用者;

方法可以操作类内部的数据

简单的说,函数在python中独立存在,可直接使用的,而方法是必须被别人调用才能实现的。

静态方法除外(与类和对象均无关,通过类名和对象名均可被调用,属函数)

在模块中实现的函数只要导入这个模块的这个函数既可以任意使用了,但是在类中声明的必须导入这个类之后然后再通过创建实例或者类名来调用。可以说直接在模块中声明的是更普遍广泛性的函数,而在类中声明的方法一般是专属于一类事物特有的

from types import MethodType,FunctionType
class Foo(object):
  def __init__(self):
   self.name="haiyan"
  def func(self):
   print(self.name)
obj = Foo()
print(isinstance(obj.func,FunctionType)) #False
print(isinstance(obj.func,MethodType)) #True #说明这是一个方法
  
print(isinstance(Foo.func,FunctionType)) #True #说明这是一个函数。
print(isinstance(Foo.func,MethodType)) #False

是的!例子中很明确,类对象调用func是方法,类调用func是函数,并且是自己传递参数123!

注意,这只是在 python3 中才有的区分,python2 中全部称为方法。

最大的区别是参数的传递参数,方法是自动传参self,函数是主动传参

那么以后我们就可以直接看参数是如何传递的来判断,

如果还不确定可以打印类型看看

from types import FunctionType,MethodType
print(isinstance(obj.func,MethodType)) ---># True
print(isinstance(Foo.func,FunctionType)) ---># True

表面区别:

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

区别二定义的方式:

1.函数定义的方式 def关键字 然后接函数名 再是括号 括号里面写形参也可以省略不写形参

def functionName():
 """这里是函数的注释"""
 print("这一块写函数的内容"

2.方法定义的方式 首先方法是定义在类中的其他他大体和函数定义差不多,这里需要注意的一点就是方法必须带一个默认参数(相当于this),静态方法除外

class className(super):
  
 def methodName(self):
  """这里是方法的注释
  self相当于this;
  """
  print("这里是方法的内容")

区别三调用的方式:

1.函数的调用:函数的调用是直接写 函数名(函数参数1,函数参数2,......)

def functionName():
 print("这是一个函数")
  
#调用
functionName()

2.方法的调用:方法是通过对象点方法调用的(这里是指对象方法)

class className:
  
 def method(self):
  print("这是一个方法")
  
#调用---------------------
#实例化对象
c=className()
  
c.method()

python类的实例方法、静态方法和类方法区别及其应用场景

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

ps.python中self,cls的区别

普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。

如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。

而对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。

# coding:utf-8
class Foo(object):
 """类三种方法语法形式"""
  
 def instance_method(self):
  print("是类{}的实例方法,只能被实例对象调用".format(Foo))
  
 @staticmethod
 def static_method():
  print("是静态方法")
  
 @classmethod
 def class_method(cls):
  print("是类方法")
  
foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print('----------------')
Foo.static_method()
Foo.class_method()

运行结果如下

是类<class '__main__.Foo'>的实例方法,只能被实例对象调用

是静态方法

是类方法

----------------

是静态方法

是类方法

说明:

实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。

实例方法,第一个参数必须要默认传实例对象,一般习惯用self。

静态方法,参数没有要求。

类方法,第一个参数必须要默认传类,一般习惯用cls。

补充:python方法和函数集锦

方法的使用: 变量.方法名(参数)

函数的使用: 函数名(参数)

字符串

1、删除空白

rstrip(): 返回去掉尾部的空格后的字符串。(不改变原字符串)

lstrip(): 去掉首部空格

strip(): 去掉两端的空格

2、修改字符串大小写

title(): 以首字母大写的方式显示每个单词

upper(): 将字符串转换为全部大写

lower(): 将字符串转换为全部小写

name = "ada lovelace"
 

print(name.title())
# => Ada Lovelace
  
print(name.upper())
# => ADA LOVELACE
  
print(name.lower())
# => 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)

Python 相关文章推荐
Python常见数据结构详解
Jul 24 Python
python使用wxpython开发简单记事本的方法
May 20 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
Django如何自定义分页
Sep 25 Python
Python JSON格式数据的提取和保存的实现
Mar 22 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
Jun 24 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
python实现飞船大战
Apr 24 Python
基于python实现把json数据转换成Excel表格
May 07 Python
Django多数据库联用实现方法解析
Nov 12 Python
python中time、datetime模块的使用
Dec 14 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 Python
Pytorch之扩充tensor的操作
Mar 04 #Python
快速一键生成Python爬虫请求头
Mar 04 #Python
10个顶级Python实用库推荐
Mar 04 #Python
pytorch 把图片数据转化成tensor的操作
Mar 04 #Python
pytorch 计算Parameter和FLOP的操作
Mar 04 #Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 #Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 #Python
You might like
php导入导出excel实例
2013/10/25 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
JS基础之undefined与null的区别分析
2011/08/08 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
Python语言的12个基础知识点小结
2014/07/10 Python
最大K个数问题的Python版解法总结
2016/06/16 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
迟到检讨书1000字
2014/01/15 职场文书
计算机软件专业求职信
2014/06/10 职场文书
欢迎领导检查标语
2014/06/27 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
python文件与路径操作神器 pathlib
2022/04/01 Python