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

简单总结:

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)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Python排序函数的使用方法详解

    Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为"方法"更合适)来进行排序,而对于其他可迭代对象(如set,dict),我们可以使用更灵活的sorted()函数. 一.List的sort()函数 Python源码builtins.py文件对sort()函数的定义如下 def sort(self, key=None, reverse=False): """ L.sort(key=None,

  • python函数超时自动退出的实操方法

    本章给大家在项目使用时候,常见的一种情况解决案例,即是当我们调用多个线程,使用了同一个函数去处理数据的时候,有些用函数已经处理完成,但是有些还没有,这就需要我们将任务进行分割,然后当一小部分任务执行后,退出来,另外没有执行的完成超时的就继续去执行,下面就针对遇到这些问题的小伙伴,给大家提供解决参考. 安装timeout-decorator库: pip3 install timeout-decorator 编写异常语句: @timeout_decorator.timeout(5, timeout_

  • python中lower函数实现方法及用法讲解

    之前小编介绍过python中将字符串小写字符转为大写的upper函数的使用方法(upper函数).有将小写转为大写的需要,那也有将大写转为小写的情况.本文主要介绍在python中可以将字符串大写自摸转换为小写字母的lower函数. 1.lower() 转换字符串中所有大写字符为小写 2.语法 str.lower() -> str 3.返回值 返回将字符串中的所有大写字母转换为小写字母的字符串 4.使用实例 #!/usr/bin/python3 str = "ABCDEFG" pr

  • Python列表排序 list.sort方法和内置函数sorted用法

    很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内置函数的使用方法和区别. 一.list.sort方法 list.sort方法会就地排序列表,也就是说不会把原列表复制一份.这也是这个方法的返回值是None的原因,提醒您本方法不会新建一个列表. 在这种情况下返回None其实是Python的一个惯例:如果一个函数或者方法对对象进行的是就地改动,那

  • python中函数返回多个结果的实例方法

    其实有一个疑惑一直在小编心中,每一个代码段编写里,总会出现好多个函数,也许有人和小编有一样的认同感,后来,小编明白,每一个函数本身都是都有各自的目的,有的是需要去必须返回一个字符串,有的是必须要去返回浮点数,还有的是需要去返回多个值,这也是大家所需要的,下面给大家演示. 函数返回多个结果 $ vim e3.py def damage(skill1,skill2): damage1 = skill1 * 3 damage2 = skill2 * 2 + 10 return damage1,dama

  • python中zip()函数遍历多个列表方法

    在对列表的元素进行找寻时,会频繁的说到遍历的理念.对于复杂的遍历要求,如多个列表中查找就显然不适合用for循环.本篇所要带来的是zip() 函数的方法,能够对多个迭代器进行遍历.下面我们就python中zip的说明.语法.使用注意点进行讲解,然后带来遍历多个列表的实例. 1.说明 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表.(注:在python3中返回的是zip对象) 2.语法 zip(iterable, ...) # 其中 it

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

    简单总结: 1.与类和实例无绑定关系的function都属于函数(function): 2.与类和实例有绑定关系的function都属于方法(method). 首先摒弃错误认知:并不是类中的调用都叫方法 函数(FunctionType) 函数是封装了一些独立的功能,可以直接调用,能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值.可以直接在模块中进行定义使用. 所有传递给函数的数据都是显式传递的. 方法(MethodType) 方法和函数类似,同样封装了独立的功能

  • python函数与方法的区别总结

    (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函数 自定义函数:根据自己的需求,来进行定义函数. (2)方法的分类: 普通方法:直接用self调用的方法. 私有方法:__函数名,只能在类中被调用的方法. 属性方法:@property,将方法伪装成为属性,让代码看起来更合理. 特殊方法(双下划线方法):以__init__为例,是用来封装实例化对象的属性,只要是实例化对象就一定会执行__init方法,如果对象子类中没有则会寻找父类(超类),如果

  • 基于Python __dict__与dir()的区别详解

    Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: __dict__是一个字典,键为属性名,值为属性值: dir()用来寻找一个对象的所有属性,包括__dict__中的属性,__dict__是dir()的子集: 并不是所有对象都拥有__dict__属性.许多内建类型就没有__dict__属性,如list,此时就需要用dir()来列出对象的所有属性. __di

  • 基于Python函数的作用域规则和闭包(详解)

    作用域规则 命名空间是从名称到对象的映射,Python中主要是通过字典实现的,主要有以下几个命名空间: 内置命名空间,包含一些内置函数和内置异常的名称,在Python解释器启动时创建,一直保存到解释器退出.内置命名实际上存在于一个叫__builtins__的模块中,可以通过globals()['__builtins__'].__dict__查看其中的内置函数和内置异常. 全局命名空间,在读入函数所在的模块时创建,通常情况下,模块命名空间也会一直保存到解释器退出.可以通过内置函数globals()

  • 基于Python函数和变量名解析

    1.Python函数 函数是Python为了代码最大程度的重用和最小化代码冗余而提供的基本程序结构,用于将相关功能打包并参数化 Python中可以创建4种函数: 1).全局函数:定义在模块中,每个模块都是一个全局作用域,因此,全局作用域的范围仅限于单个程序文 2).局部函数:嵌套在其它函数中 3).lambda函数:表达式 4).方法:与特定数据类型关联的函数表,并且只能与数据类型关联一起使用 Python提供众多内置函数 Python创建.改变.查找变量名都是在名称空间中进行,在代码中变量名被

  • 基于python时间处理方法(详解)

    在处理数据和进行机器学习的时候,遇到了大量需要处理的时间序列.比如说:数据库读取的str和time的转化,还有time的差值计算.总结一下python的时间处理方面的内容. 一.字符串和时间序列的转化 time.strptime():字符串=>时间序列 time.strftime():时间序列=>字符串 import time start = "2017-01-01" end = "2017-8-12" startTime = time.strptime

  • Go语言中普通函数与方法的区别分析

    本文实例分析了Go语言中普通函数与方法的区别.分享给大家供大家参考.具体分析如下: 1.对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然. 2.对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以. 以下为简单示例: 复制代码 代码如下: package structTest    //普通函数与方法的区别(在接收者分别为值类型和指针类型的时候)  //Date:2014-4-3 10:00:07    import ( 

  • 基于Python下载网络图片方法汇总代码实例

    本文介绍下载python下载网络图片的方法,包括通过图片url直接下载.通过re/beautifulSoup解析html下载以及对动态网页的处理等. 通过pic_url单个/批量下载 已知图片url,例如http://xyz.com/series-*(1,2..N).jpg,共N张图片,其链接形式较为固定,这样经简单循环,直接通过`f.write(requests.get(url).content)'即可以二进制形式将图片写入. import os import requests def dow

  • golang 函数以及函数和方法的详解及区别

    golang 函数以及函数和方法的区别 在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西.官方的解释是,方法是包含了接收者的函数.到底什么意思呢. 首先函数的格式是固定的,func+函数名+ 参数 + 返回值(可选) + 函数体.例 func main() { fmt.Println("Hello go") } 在golang中有两个特殊的函数,main函数和ini

  • JavaScript基础系列之函数和方法详解

    目录 一.函数和方法的区别 二.如何写好一个函数 2.1 命名准确 2.1.1 函数命名 2.1.2 参数命名 2.2 函数注释 2.2.1 参数注释 2.3  函数参数 2.3.1 参数默认值 2.3.2 对象参数 2.3.3 参数数量 2.3.4 参数类型防御 2.4 函数的返回 2.4.1 幂等函数 2.4.2 纯函数 2.4.3 return null 函数和方法的区别 总结 一.函数和方法的区别 函数(function):函数是带有名称和参数的 JavaScript 代码段,可以一次定

随机推荐