当前位置: 代码网 > it编程>前端脚本>Ruby > Python函数的正确用法及其注意事项

Python函数的正确用法及其注意事项

2024年05月12日 Ruby 我要评论
简单总结: 与类和实例无绑定关系的function都属于函数(function); 与类和实例有绑定关系的function都属于方法(method)。 首先摒弃错误认知:并不是类中的调用都叫方法 函数(FunctionType) 函数是封装了一些独立的功能,可以直接调用,能将一些数据(参数)传递进去 ...

简单总结:

  • 与类和实例无绑定关系的function都属于函数(function);
  • 与类和实例有绑定关系的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("这是一个方法")
#python学习交流群:531509025 
#调用---------------------
#实例化对象
c=classname()
 
c.method()

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

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

ps.python中self,cls的区别

普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。
如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。
而对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。

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。

(0)

相关文章:

  • Ruby多线程库(Thread)使用方法详解

    Ruby多线程库(Thread)使用方法详解

    thread是ruby的线程库,thread库已经内置在ruby中,但如果想要使用线程安全的queue、mutex以及条件变量等,则需要手动require &#... [阅读全文]
  • Ruby信号处理详解

    Ruby信号处理详解

    ruby使用process.kill发送信号process.kill(signal, pid, ...) → integerprocess.kill发送指定的信... [阅读全文]
  • Ruby 面向对象知识总结

    Ruby 面向对象知识总结

    ruby 是纯面向对象的语言,ruby 中的一切都是以对象的形式出现。ruby 中的每个值都是一个对象,即使是最原始的东西:字符串、数字,甚至连 true 和 ... [阅读全文]
  • 深入分析Ruby 变量

    深入分析Ruby 变量

    变量是持有可被任何程序使用的任何数据的存储位置。ruby 支持五种类型的变量。 一般小写字母、下划线开头:变量(variable)。 $开头:全局变量(gl... [阅读全文]
  • Ruby 迭代器知识汇总

    Ruby 迭代器知识汇总

    简单来说:迭代(iterate)指的是重复做相同的事,所以迭代器(iterator)就是用来重复多次相同的事。迭代器是集合支持的方法。存储一组数据成员的对象称为... [阅读全文]
  • Ruby生成随机数的方法总结

    Ruby生成随机数的方法总结

    数字实际上不是随机的没有一台计算机能纯粹通过计算产生真正的随机数。它们能做的最好的事情就是生成伪随机数,伪随机数是一组看起来随机但实际上不是随机的数字。对于人类... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com