小学生学python(六)类与函数

每个程序都有一个入口函数,一般都是延续C语言的风格从mian函数开始,至于在调用main函数之前发生的事情,我们不用关心,编译器帮我们做了。

在python语言中,直接用一条__name__ == '__main__'语句就可以拿到我们编写程序的起点,如下:

if __name__ == '__main__':
    print("test")

但是,如果不按照上面用__name__ == '__main__',直接写函数

def line_func(a, b):
    def func(x):
        return a*x + b
    return func

运行发现没执行到。如果这个文件里有直接写语句,比如

def line_func(a, b):
    def func(x):
        return a*x + b
    return func

line1 = line_func(2, 5)
print(line1(2))

运行时,就会从line1= 这一行开始了。

至于出现上面这种现象的原因,是有库文件_pydev_execfile.py引起的,在18行有这么个语句

    exec(compile(contents+"
", file, 'exec'), glob, loc)

在一个文件,我们可以随便写处理业务的语句,比如求和

a=1
b=2
c=a+b

如果遇到很多地方要用求和,就可以把上面的语句封装成一个函数,那样就可以一次实现,多处调用,看上去也会代码简洁。定义函数很简单,使用def,后面跟个函数名称,xiaomao,xiaogou都行,就像取名字一样,最好使用能看函数名就知道函数干啥的名字。比如:

def Add(a, b):
    return a+b

c = Add(1, 2)
print(c)
c = Add(2, 2)
print(c)

那既然函数已经可以把我们的业务封装起来了,要类来做啥呢?

百度百科的解释:

     类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。    类是对现实生活中一类具有共同特征的事物的抽象。编写类时,你可以定义一大类对象都有的通用行为。 基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。 

比如上面定义了一个加法的函数,然后我们再定义一些减法函数,乘法函数,除法函数,幂函数,阶乘函数等。这个时候我们就可以来定义一个类,取名为算法类

class Algorith():
 
    def Add(self, a, b):
        return a + b

    def Minus(self, a, b):
        return a - b
#创建Algorith的实例 
my_algo = Algorith()
print(my_algo.Add(1,2))
    my_algo可以调用类中的方法,如Add,Minus。当然也可以实例化多个对象,相互是独立的。我们可以把一个类 写在一个.py文件,
在其他文件中只要把这个文件import进来就能调用了。

假如要写一个关于动物的程序,有猫,有狗。那么可以定义一个Cat类,一个Dog。但猫是咪咪叫,狗是吠,
Speak(叫)这个方法就有了不同的实现内容,放在不同类中取相同的方法名完全合法合规。但是在一个文件有两个一样的函数就会发生冲突,后面写的会把前面
写的覆盖掉,so分别写在不同类中就没这种烦恼。
class Cat():
    def Speak(self):
        print("猫叫")
    def Walk(self):
        print("猫步走")
    def Eat(self):
        print("吃鱼")

class Dog():
    def Speak(self):
        print("狗吠")
    def Walk(self):
        print("蹦跳")
    def Eat(self):
        print("吃肉")

my_cat = Cat()
my_cat.Speak()
my_dog = Dog()
my_dog.Speak()

那么,方法跟函数区别在哪呢?

在类中的方法跟函数的写法一样,放在类中就叫方法,不在类中就叫函数。即类中的函数叫方法,函数的一切适用于方法。

以上如果不足之处,敬请指正。

 




原文地址:https://www.cnblogs.com/ikel/p/10048956.html