函数function —— A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.
方法method —— A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).
函数function —— A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.
方法method —— A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).
函数和方法的区别
1、函数要手动传self,方法不用传
2、如果是一个函数,用类名去调用,如果是一个额方法,用对象去调用
区别一所处的位置:函数是直接写文件中而不是class中,方法是只能写在class中。
区别二定义的方式:
1.函数定义的方式 def关键字 然后接函数名 再是括号 括号里面写形参也可以省略不写形参
2.方法定义的方式, 首先方法是定义在类中的,其他大体和函数定义差不多,这里需要注意的一点就是方法必须带一个默认参数(相当于this),静态方法除外
区别三调用的方式:
1.函数的调用:函数的调用是直接写 函数名(函数参数1,函数参数2,......)
2.方法的调用:方法是通过对象点方法调用的(这里是指对象方法)
在Python中,对这两个东西有明确的规定:
函数function —— A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.
方法method —— A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).
从定义的角度上看,我们知道函数(function)就相当于一个数学公式,它理论上不与其它东西关系,它只需要相关的参数就可以。所以普通的在module中定义的称谓函数是很有道理的。
那么方法的意思就很明确了,它是与某个对象相互关联的,也就是说它的实现与某个对象有关联关系。这就是方法。虽然它的定义方式和函数是一样的。也就是说,在Class定义的函数就是方法。
从上面的角度看似乎很有道理。
>>> def fun():
pass
>>> type(fun)
>>> class Cla():
def fun():
pass
@classmethod
def fun1(cls):
pass
@staticmethod
def fun2():
pass
>>> i=Cla()
>>> Cla.fun.__class__
>>> i.fun.__class__ #这个还像话
>>> type(Cla.fun1)
>>> type(i.fun1)
>>> type(Cla.fun2)
>>> type(i.fun2)
事实上,上面的结果是可以解释的:
1,普通方法(老版中直接就是"instancemethod")在module中与在Class中定义的普通函数,从其本身而言是没有什么区别的,他们都是对象函数属性。 之所以会被说在Class中的定义的函数被称为方法,是因为它本来就是面向将来的实例对象的,其实他们就是实例方法,这些方法是与实例相联系的(从实例出发访问该函数会自动赋值)。所以你从Class访问仍然是一个函数
2,类方法("classmethod"),因为类同样是对象,所以如果函数与类进行联系了话(与实例方法一样的模式)那么就能够这么说了!
3,静态方法,虽然定义在内部,并且也较方法,但是却不与任何对象联系,与从类访问方法是一样的,他们仍然是函数。
这样看来上面的定义可以改改了:
函数的定义自然不变。
方法的定义可以是这样的,与某个对象进行绑定使用的函数。注意哦。绑定不是指" . "这个符号,这个符号说实在的只有域名的作用。绑定在这里是指,会默认赋值该绑定的对象。
在Python中,对这两个东西有明确的规定:
函数function —— A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.
方法method —— A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).
从定义的角度上看,我们知道函数(function)就相当于一个数学公式,它理论上不与其它东西关系,它只需要相关的参数就可以。所以普通的在module中定义的称谓函数是很有道理的。
那么方法的意思就很明确了,它是与某个对象相互关联的,也就是说它的实现与某个对象有关联关系。这就是方法。虽然它的定义方式和函数是一样的。也就是说,在Class定义的函数就是方法。
1,普通方法(老版中直接就是"instancemethod")在module中与在Class中定义的普通函数,从其本身而言是没有什么区别的,他们都是对象函数属性。 之所以会被说在Class中的定义的函数被称为方法,是因为它本来就是面向将来的实例对象的,其实他们就是实例方法,这些方法是与实例相联系的(从实例出发访问该函数会自动赋值)。所以你从Class访问仍然是一个函数
2,类方法("classmethod"),因为类同样是对象,所以如果函数与类进行联系了话(与实例方法一样的模式)那么就能够这么说了!
3,静态方法,虽然定义在内部,并且也较方法,但是却不与任何对象联系,与从类访问方法是一样的,他们仍然是函数。
这样看来上面的定义可以改改了:
函数的定义自然不变。
方法的定义可以是这样的,与某个对象进行绑定使用的函数。注意哦。绑定不是指" . "这个符号,这个符号说实在的只有域名的作用。绑定在这里是指,会默认赋值该绑定的对象。
从几个维度来介绍下python中函数和方法的区别:
首先,从分类的角度来分析。
(1)函数的分类:
内置函数:python内嵌的一些函数。
匿名函数:一行代码实现一个函数功能。
递归函数
自定义函数:根据自己的需求,来进行定义函数。
(2)方法的分类:
普通方法:直接用self调用的方法。
私有方法:__函数名,只能在类中被调用的方法。
属性方法:@property,将方法伪装成为属性,让代码看起来更合理。
特殊方法(双下划线方法):以__init__为例,是用来封装实例化对象的属性,只要是实例化对象就一定会执行__init方法,如果对象子类中没有则会寻找父类(超类),如果父类(超类)也没有,则直接继承object(python 3.x)类,执行类中的__init__方法。
类方法:通过类名的调用去操作公共模板中的属性和方法。
静态方法:不用传入类空间、对象的方法, 作用是保证代码的一致性,规范性,可以完全独立类外的一个方法,但是为了代码的一致性统一的放到某个模块(py文件)中。
其次,从作用域的角度来分析:
(1)函数作用域:从函数调用开始至函数执行完成,返回给调用者后,在执行过程中开辟的空间会自动释放,也就是说函数执行完成后,函数体内部通过赋值等方式修改变量的值不会保留,会随着返回给调用者后,开辟的空间会自动释放。
(2)方法作用域:通过实例化的对象进行方法的调用,调用后开辟的空间不会释放,也就是说调用方法中对变量的修改值会一直保留。
最后,调用的方式不同。
(1)函数:通过“函数名()”的方式进行调用。
(2)方法:通过“对象.方法名”的方式进行调用。
区别一所处的位置:函数是直接写文件中而不是class中,方法是只能写在class中。
区别二定义的方式:
1.函数定义的方式 def关键字 然后接函数名 再是括号 括号里面写形参也可以省略不写形参
2.方法定义的方式, 首先方法是定义在类中的,其他大体和函数定义差不多,这里需要注意的一点就是方法必须带一个默认参数(相当于this),静态方法除外
区别三调用的方式:
1.函数的调用:函数的调用是直接写 函数名(函数参数1,函数参数2,......)
2.方法的调用:方法是通过对象点方法调用的(这里是指对象方法)
相关问题推荐
可以试下在cmd命令行执行,编辑器中对turtle的支持度不是很好。
人工智能是一门起步晚却发展快速的科学。20 世纪以来科学工作者们不断寻求着赋予机器人类智慧的方法。现代人工智能这一概念是从英国科学家图灵的寻求智能机发展而来,直到1937年图灵发表的论文《理想自动机》给人工智能下了严格的数学定义,现实世界中实际要...
代理ip网址http://www.goubanjia.com/http://www.ip181.com/https://www.kuaidaili.com/python 环境安装requests库安装bs4库proxies设置代理服务器地址proxies = {'http': 'http://61.155.164.110:3128'}http://www.goub......
要求:用户正确输入用户名和密码便成功登陆,分别有三次机会输入用户名和密码,超过3次便锁定分析:用两个while循环即可,代码如下:user_name = Brettpassword = 1314i = 0n = 0Is_exit = False #进入循环标志while not Is_exit:User_name = input(please ...
MacOS设置环境变量path的完全总结 一、MacOS加载bash shell 环境变量的加载顺序 mac 一般使用bash作为默认shell,Mac系统的环境变量,加载顺序为:1、系统级别的/etc/profile ...
当你运行代码的时候,需要你指定闹钟的时间,然后闹钟就会在指定的时间想起来。电脑pytho加载time模块,获取此时此刻的时间:import timet = time.localtime()print(t)时间是以字典的形式出现的。从字典里面提取时间信息:now = time.strftime(%H %M, t).spli...
在几千条数据中有正负数,筛选出同一供应商下正负数相加为零的数据,正负数相加有可能为一正一负相加为零,也有可能是一正多负,也有可能一负多正,总体是将可以所有正负数相加为零的数据标注颜色出来。excel论坛上说计算量太 ...可以用pandas来处理...
import sqlite3p = sqlite3.connect(file:memDB1?mode=memory&cache=shared, uri=True)p.execute('CREATE TABLE tbTest (fld1, fld2)')p.execute(INSERT INTO tbTest VALUES ('fld1', 'fld2'...
define的东西不一定是function,也可能是generator之类的
不可以所有编程最起码都得学函数,分支,循环之后才可以编写代码
>>> import math>>> setattr(math, random, lambda x: x+1)>>> math.random(2903)2904
count = 0 # 添加1def fib(n): global count # 添加2 count += 1 # 添加3 if n==0: return 0 elif n==1: return 1 else: return fib(n-1) + fib(n-2)print(fib(5)) # 5
apply
Python Lambda函数是没有任何名称的函数。它们也称为匿名或无名功能。 lambda一词不是名称,而是关键字。此关键字指定后面的函数是匿名的。现在您已经知道这些匿名函数指的是什么,让我们进一步了解一下如何编写这些Python Lambda函数。...
python里动态构造函数可以使用闭包lista = [funca,funcb,funcc]def make_func(val): def func(name): print('hello %s from %s' % (name, val)) return funcfuncs = map(make_func, lista)map(lambda...
估计,题主说的是这些东西首先,我也是初学者,只是平时经常用help查看一下函数库,所以经常遇到*arg代表是不固定传参,可以传,列表,单个元素,元组,他会把你传的这些东西形成一个元组**kwargs也代表不固定传参,可以传字典,他会吧你传的东西形成一个字典...