精华内容
下载资源
问答
  • Python中函数与方法的区别 (1)函数的分类: 内置函数:python内嵌的一些函数。 匿名函数:一行代码实现一个函数功能。 递归函数 自定义函数:根据自己的需求,来进行定义函数。 (2)方法的分类: 普通方法:直接...

    Python中函数与方法的区别

    (1)函数的分类:

    内置函数:python内嵌的一些函数。

    匿名函数:一行代码实现一个函数功能。

    递归函数

    自定义函数:根据自己的需求,来进行定义函数。

    (2)方法的分类:

    普通方法:直接用self调用的方法。

    私有方法:__函数名,只能在类中被调用的方法。

    属性方法:@property,将方法伪装成为属性,让代码看起来更合理。

    特殊方法(双下划线方法):以__init__为例,是用来封装实例化对象的属性,只要是实例化对象就一定会执行__init方法,如果对象子类中没有则会寻找父类(超类),如果父类(超类)也没有,则直接继承object(python 3.x)类,执行类中的__init__方法。类方法:通过类名的调用去操作公共模板中的属性和方法。

    静态方法:不用传入类空间、对象的方法, 作用是保证代码的一致性,规范性,可以完全独立类外的一个方法,但是为了代码的一致性统一的放到某个模块(py文件)中。

    其次,从作用域的角度来分析:

    (1)函数作用域:从函数调用开始至函数执行完成,返回给调用者后,在执行过程中开辟的空间会自动释放,也就是说函数执行完成后,函数体内部通过赋值等方式修改变量的值不会保留,会随着返回给调用者后,开辟的空间会自动释放。

    (2)方法作用域:通过实例化的对象进行方法的调用,调用后开辟的空间不会释放,也就是说调用方法中对变量的修改值会一直保留。

    最后,调用的方式不同。

    (1)函数:通过“函数名()”的方式进行调用。

    (2)方法:通过“对象.方法名”的方式进行调用。

    展开全文
  • 一直忙着赶项目,活脱脱就是一个秉持着“能用就行原则”工具人[哭了],至于那颗充满十万个为什么好奇心直接被忽略各位请细品,如果老Amy直接在公司要问领导“为什么同样是 def 定义,会有函数与方法两个名称?...

    滴滴,老Amy来啦!之前做开发的时候,一直忙着赶项目,活脱脱的就是一个秉持着“能用就行原则”的工具人[哭了],至于那颗充满十万个为什么的好奇心直接被忽略~各位请细品,如果老Amy直接在公司要问领导“为什么同样是 def 定义,会有函数与方法两个名称?”,暴脾气的领导还不跳起来给我两下?

    这我也理解,毕竟这个问题这么问,大家肯定会向我投来同情的目光并且告诉我:“啥~定义在类里的函数叫方法,晓得不?臭Amy”,emm…我就在想,这句话有据可依嘛?于是鲁迅上身:“从来如此,便对吗?”

    于是乎,今天老Amy就来跟大家一起唠唠这方法与函数“背后的故事”~

    前身

    Python中的 inspect 模块,提供了一系列的对对象进行类型检查的函数,其中可以看到 ismethod() 与 isfunction() 函数,就是用来判断什么是方法(method),什么是函数(funtion)的
    在这里插入图片描述
    首先来举个栗子,我们直接定义一个函数test,使用 ismethod() 与 isfunction() 验证 test 是方法还是函数,还是…成年人的世界我都要?

    In [1]: import inspect
    ​
    In [2]: def test():
       ...:     print("welcome...")
       ...:
       
    In [3]: inspect.ismethod(test)
    Out[3]: False
    
    In [4]: inspect.isfunction(test)
    Out[4]: True
    

    运行的结果分别是 False 和 True,说明这是一个函数而不是一个方法…emmm…那有的朋友就会说,这不跟我想的一样嘛?那我们在命令行中来看看这两个函数的源码
    在这里插入图片描述
    在这里插入图片描述

    ismethod真相

    ismethod() 判断出的是实例方法(instance method) ,最主要的是,它包含__self__属性

    But…类的内部定义的方法全都是真正意义上的方法(MethodType)吗?

    • 当没有创建实例时,实例方法以及静态方法都不算作MethodType
    In [16]: class Demo(object):
        ...:     def ins_func(self):
        ...:         pass
        ...:
        ...:     @classmethod
        ...:     def cls_func(cls):
        ...:         pass
        ...:
        ...:     @staticmethod
        ...:     def sta_func():
        ...:         pass
        ...:
        
    In [17]: inspect.ismethod(Demo.ins_func)
    Out[17]: False
    
    In [18]: inspect.ismethod(Demo.cls_func)
    Out[18]: True
    
    In [19]: inspect.ismethod(Demo.sta_func)
    Out[19]: False
    
    • 当创建实例后,实例方法就成为了MethodType,但是静态方法仍然不是。
    In [20]: d = Demo()
    
    In [21]: inspect.ismethod(d.ins_func)
    Out[21]: True
    
    In [22]: inspect.ismethod(d.cls_func)
    Out[22]: True
    
    In [23]: inspect.ismethod(d.sta_func)
    Out[23]: False
    

    isfunction真相

    看到 isfuntion() 所检测的是用户自定义函数(a user-defined function),我又开始揣测,我们使用过那么多的Python内置函数,比如:len() 、range() 、 map()…都是啥?

    • 首先,它们的类型不是 function
    In [7]: inspect.isfunction(len)
    Out[7]: False
    
    In [8]: inspect.isfunction(range)
    Out[8]: False
    
    In [9]: inspect.isfunction(map)
    Out[9]: False
    
    • 实际上,一般的内置函数的类型都是 builtin_function_or_method
    In [10]: type(len)
    Out[10]: builtin_function_or_method
    

    仅此而已吗?我们需要注意的是 range() 、 map() 等都只是看起来像函数…实际上,看图,它们都属于 type

    In [11]: type(range)
    Out[11]: type
    
    In [12]: type(map)
    Out[12]: type
    

    这是为啥呢?来看看官网说明文档
    在这里插入图片描述
    上图可以看到,Built-in Functions 里面不仅仅只有 functions (内置函数),还有types (内置类)。也就是说,range(),map() 都是类~

    “我擦…不会吧!咋整的全民误会?”,很有必要的去看了看python2的说明文档
    在这里插入图片描述
    这样就很好理解了,官方在python3已经修正了python2的定义,但是我们已经习惯了全部都叫函数了呀~所以,就有了这些模棱两可的叫法。

    到这里老Amy好像有点晕车了必须附上偶像的表情hhhhh,简单的给大家做个总结叭~

    总结

    方法
    • 实例前:只有类方法才是MethodType,而实例方法与静态方法都不是。
    • 实例后:类方法与实例方法都是MethodType,而静态方法不是。
    函数
    • 用户自定义函数可通过 aspect.isfunction() 来验证
    • Built-in Functions 包含 functions(内置函数)以及types(内置类)。
      如:type(len) 是 builtin_function_or_method,type(range) 则是 type。

    今日鸡汤

    在这里插入图片描述
    今天的鸡汤有点狠,但是我们都要在快生活[emmm…]当中找到平静又有力量的自己,谢谢你看到这里啦,不防再来个在看与关注叭~笔芯

    在这里插入图片描述

    展开全文
  • Python中函数方法的区别

    万次阅读 多人点赞 2019-04-28 21:48:23
    类和实例无绑定关系function都属于函数(function); 类和实例有绑定关系function都属于方法(method)。 首先摒弃错误认知:并不是类中的调用都叫方法 函数(FunctionType) 函数是封装了一些独立...

    简单总结:

    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。

    https://blog.csdn.net/helloxiaozhe/article/details/79940321

    https://blog.csdn.net/amoscn/article/details/77074403

    展开全文
  • (2)方法的分类: 普通方法:直接用self调用的方法。 私有方法:__函数名,只能在类被调用的方法。 属性方法:@property,将方法伪装成为属性,让代码看起来更合理。 特殊方法(双下划线方法):以__init__为例,是...
  • (2)方法的分类: 普通方法:直接用self调用的方法。 私有方法:__函数名,只能在类被调用的方法。 属性方法:@property,将方法伪装成为属性,让代码看起来更合理。 特殊方法(双下划线方法):以__...

    区别:分类、作用域、调用方式
    分类
    (1)函数的分类:
    内置函数:python内嵌的一些函数。
    匿名函数:一行代码实现一个函数功能。
    递归函数
    自定义函数:根据自己的需求,来进行定义函数。
    (2)方法的分类:
    普通方法:直接用self调用的方法。
    私有方法:__函数名,只能在类中被调用的方法。
    属性方法:@property,将方法伪装成为属性,让代码看起来更合理。
    特殊方法(双下划线方法):以__init__为例,是用来封装实例化对象的属性,只要是实例化对象就一定会执行__init方法,如果对象子类中没有则会寻找父类(超类),如果父类(超类)也没有,则直接继承object(python 3.x)类,执行类中的__init__方法。
    类方法:通过类名的调用去操作公共模板中的属性和方法。
    静态方法:不用传入类空间、对象的方法, 作用是保证代码的一致性,规范性,可以完全独立类外的一个方法,但是为了代码的一致性统一的放到某个模块(py文件)中。
    作用域
    (1)函数作用域:从函数调用开始至函数执行完成,返回给调用者后,在执行过程中开辟的空间会自动释放,也就是说函数执行完成后,函数体内部通过赋值等方式修改变量的值不会保留,会随着返回给调用者后,开辟的空间会自动释放。
    (2)方法作用域:通过实例化的对象进行方法的调用,调用后开辟的空间不会释放,也就是说调用方法中对变量的修改值会一直保留。
    调用方式
    (1)函数:通过“函数名()”的方式进行调用。
    (2)方法:通过“对象.方法名”的方式进行调用。

    展开全文
  • 今天huskiesir在对列表进行操作时候,用到了sorted()函数,偶然情况下在菜鸟教程上看到了内置方法sort,同样都可以实现我对列表排序操作,那么方法函数有什么区别和联系呢? 如下是我个人总结: 1.调用...
  • 类的理解,Python中方法与函数的区别 #类中第一参数的存在,第一参数的重要性 #类中所有方法的第一参数必须是同一个单词,表示大家从属于一个类,可以不是self,只要大家都改成同一个单词就行,系统建议是self #构造...
  • 区别函数在类体之外定义,参数不含有关键字self; 方法在类体内部定义,参数含有关键字self。 联系: 都是用关键字def做开始部分定义 ...
  • Python内置,具有特殊意义标识符 如何查看Python的关键字 import keyword print(keyword.kwlist) 函数: 封装有独立功能,可以直接调用。后面需要跟() 方法: 通过对象调用,主要针对这个...
  • 实例化出来调用,叫做方法 直接用类名调用,叫做函数 1 #例如 2 class Car: 3 def __init__(self,c): 4 self.color = c 5 def setSpeed(self,s): 6 self.speed = s 7 8 car1 = Car() 9 ...
  • 下面小编就为大家带来一篇浅谈python socket函数中,sendsendall的区别与使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 本篇内容主要介绍从几个维度来介绍下python中函数方法的区别: 首先,从分类的角度来分析。 (1)函数的分类: 内置函数:python内嵌的一些函数。 匿名函数:一行代码实现一个函数功能。 递归函数 自定义...
  • python socket编程,有两个发送TCP的函数,send()sendall(),区别如下: socket.send(string[, flags]) 发送TCP数据,返回发送字节大小。这个字节长度可能少于实际要发送数据长度。换句话说,这个函数...
  • python socket编程,有两个发送TCP的函数,send()sendall(),区别如下:socket.send(string[, flags]) 发送TCP数据,返回发送字节大小。这个字节长度可能少于实际要发送数据长度。换句话说,这个函数执行一次,...
  • 一般我们称def 写在类就是方法,写在外面函数方法不用传self(自动传),函数需要手动传self参数 较为严格判断: 对象.def01–> def01就是方法 其它都是函数 eg: 类.def01–> def01就是函数 def01–> ...
  • Python 各种imread函数的区别与联系 先来看看常用的读取图片的方式: PIL.Image.open scipy.misc.imread scipy.ndimage.imread cv2.imread matplotlib.image.imread skimge caffe.io.load_iamge 这些方法可以分为...
  •  关键字是python内置,具有特殊意义标识符,自定义标识符命名时不可之重复。可通过以下代码查看python内置关键字内容 import keyword print(keyword.kwlist) ['False', 'None', 'True', 'and', 'as'...
  • ** 1、append()方法的使用 ** A = [1, 2, 3, 4, 5] B = ['a', 'b', 'c', 'd'] A.append(B) print("The new A is ", A) 输出结果为 ...注意:仔细观察两者输出结果的区别 apend()函数的输出结果为[1,
  • 首先,注意修辞,方法和函数,来科普下python中函数与方法的区别。与类和实例无绑定关系的function都属于函数(function);与类和实例有绑定关系的function都属于方法(method)。简单讲就是--类里面的叫做方法,类...
  • Json是一种轻量级数据交换格式,Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: ...Python中repr是内置函数 repr(object) 参数:object – 对象。返回值:返回一个对象 string 格式.
  • 本文实例分析了Python中的对象,方法,类,实例,函数用法。分享给大家供大家参考。具体分析如下:Python是一个完全面向对象语言。不仅实例是对象,类,函数方法也都是对象。class Foo(object):static_attr = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 698
精华内容 279
关键字:

python中函数与方法的区别

python 订阅