返回

西安达内教育

Python函数与方法有什么不同

python学习网更新时间:2021-11-03 浏览:119

许多朋友会非常疑虑,在python中方式与函数有什么不同,都是根据def去理解的啊?其实不是,今日大家就来各自推荐下二者…

在了解以前先看来下边的一段编码:


class Yoo:

def hi(self):

print("Guess it...")

上边的编码,在正常的运作的条件下,hi是方式 或是涵数,你们如何看?

大部分盆友会感觉,这还用问么,在类中界定的一定便是方式 ,涵数是独立概念的啊。假如您有这样的念头,那么就太可怕了!

种类分辨

如果我们想分辨一个目标,是啥种类,新手都是会应用type,而方式 解析函数,在type中已经有界定,各自为MethodType,FunctionType,依照上边常说,大家开展下分辨


# hi为方式 

x = Yoo()

isinstance(x.hi, MethodType) >>> True

# hi为涵数

isinstance(Yoo.hi, FunctionType) >>> True

为何相同的编码,不一样的获取方法,会获得不一样的结果呢?这还如何差别方式 与涵数啊!其实不是很难,大伙儿只*须 记得一句话:

方式 ,是用于叙述一个目标的个人行为姿势!

**种方式是类的目标启用hi即是方式 ,第二种是类启用hi则为涵数….

涵数与方式

涵数

有关python的涵数,大致可分成内嵌涵数,匿名函数,自定义函数….

内嵌涵数:听姓名就了解python为大家默认的一些涵数,例如type,range,这些…全量的能够看看吧https://www.runoob.com/python/python-built-in-functions.html

匿名函数:python匿名函数lambda将简洁的几行指令转换为单行实行,真是不能太便捷。

自定义函数:客户我们界定的涵数….

方式

python的方式 ,就非常丰富了,你能那么区划它:

实例方法 根据self开展调节的方式

特性方式 根据装饰器property来界定的getattr和setattr的特性方式

法术方式 又称之为独特方式 ,特点显著,即根据双下滑钱应用的方式

独享方式 在方式 前加上2个下横线界定的方式

类方法 根据类名的启用去实际操作公共性模版中的特性和方式

静态方法 无需传到类室内空间,目标的方式 , 功效是确保编码的一致性,规范化,能够彻底单独类外的一个方式

今日主要跟大伙儿比较下实例方法,类方法,静态方法,使我们看来一段编码


class MainClass:

def shilifangfa(self):

print('这是一个实例方法')

@classmethod

def leifangfa(cls):

print('这是一个类方法')

@staticmethod

def jingtaifangfa():

print('这是一个静态方法')

m=MainClass()

m.shilifangfa()

m.leifangfa()

m.jingtaifangfa()

output:

这是一个实例方法

这是一个类方法

这是一个静态方法

行吧,先说下方式 的类型吧:

实例方法

类方法

静态方法

探析差别

但是,这三种方式 有什么不同呢,光看上边的这一段编码,沒有什么差别啊。

那麼大家把这个编码稍加改动


class MainClass:

def shilifangfa(self):

print('这是一个实例方法',self)

@classmethod

def leifangfa(cls):

print('这是一个类方法',cls)

@staticmethod

def jingtaifangfa():

print('这是一个静态方法')

m=MainClass()

m.shilifangfa()

m.leifangfa()

m.jingtaifangfa()

output:

这是一个实例方法 <._main._.MainClass object at 0x00000000012AF0B8>

这是一个类方法 

这是一个静态方法

此次的輸出和之前对比,是不是见到实例方法,大家*须 发送给它一个案例目标,而类方法大家*须 发送给他的是一个类

那麼如果我们给实例方法传送的并不是一个由类造成的案例会怎么呢?


MainClass.shilifangfa()

TypeError: shilifangfa() missing 1 required positional argument: ‘self’

出错的意思就是很显著,大家*须 发送给他一个案例的名字,自然你也能随意写一个标值去传送,那麼也就沒有做为实例方法的实际意义了

讲了实例方法,那麼类方法呢?一样大家换一种方式去启用

MainClass.leifangfa()

这是一个类方法

优化差别

此次沒有其他转变,为什么呢?

缘故取决于,当应用类方法时,传送的主要参数应该是一个类名,但如果是案例,系统软件会自行寻找案例相对应的类名字

细心看一下下边的编码,你能对实例方法与类方法有更具体的了解


class MainClass:

a=100 # 方式 实际上的特性

def shilifangfa(self):

print('这是一个实例方法',self.a)

print(self.index) # 一切正常浏览

self.a=200 # 等同于案例自身建立了一个特性

print(self.a) # output a=200

print(MainClass.a) # output a=100

@classmethod

def leifangfa(cls):

print(cls.index) # type object 'MainClass' has no attribute 'index'

# 留意这一句type object 它变向的对你说,类也是一个目标,只*一个type的目标

# 这就更证实了python中的那句,万物皆目标

print('这是一个类方法',cls.a)

cls.a = 200 # 改动了类自身的a

print(cls.a) # output a=200

print(MainClass.a) # output a=200

# print(cls.index) # 类方法没法获得到案例的特性

@staticmethod

def jingtaifangfa():

print('这是一个静态方法')

m=MainClass()

m.index=1000 # 案例自身的特性

m.shilifangfa()

MainClass.leifangfa()

m.jingtaifangfa()


相关资讯

Python操作Excel教程:average函数求平均值的算法
2021-10-30 922
Python操作Excel教程-average函数求平均值...
人工智能和创客教育有什么区别
2022-11-05 881
人工智能和创客教育有什么区别对于人工智能,教育工作者首先要了解和接触这些技术,然后在课堂上介绍给学生。在这个过程中,教师...
怎么用热力图实现Python数据可视化
2021-10-28 749
大数据可视化是计算机科学或深度学习新项目中十分特别的一环。一般,你需要在工程前期开展探究性的数据统计分析(EDA),进而对信息有一定的掌握,并且建立数据可视化的确能够使剖析的目的更清楚...
人工智能在制造业的生产中可以发挥哪些作用
2021-06-12 468
人工智能在制造业的生产中可以发挥的作用共分为7项,分别是:1、预测性和预防性维护;2、提高机器人的效能;3、制造供应链;...
二维密度图实现Python可视化的方法
2021-10-28 451
二维密度图(2D Density Plot)是一维版本号密度图的形象化拓展,相对性于一维版本号,其特点是可以见到有关2个自变量的概率分布函数...
Python的基础语法
2021-11-03 447
编写Paython程序流程以前*对英语的语法有一定的掌握,才可以编写标准的Python程序流程...
Python操作Excel教程:提取Excel工作表的名字并修改的方法
2021-10-30 385
Python操作Excel教程-提取Excel工作表的名字并修改...
怎么运行python
2023-01-10 382
怎么运行python1. 使用Python自带的IDLE在开始--程序--Python2.5(视你安装的版本而不同)中找到IDLE(Python GUI),点击后弹出如下...

相关课程

栏目导航