每当你迷茫徘徊的时候,你就可以打开这篇文章,这时候,有人就不懂了,就会来跟我说:“大哥,大哥,这篇文章究竟讲的是啥啊?”
哎!我现在就有责任和义务向大家介绍一下,这篇文章来自一本书,这本书它有他自己的名字,叫做:派等函数宝典。它是我花费了百年心血,我呕心沥血日夜凝华,在九九八十一天后,最终在火山喷发之时,天崩地裂之时,无数道惊雷交叉升华而产生的一本书。
这本书,它可以教会你如何掌握python语言,如何用python语言开发你想要的游戏或WEB网站,可以助你实现你的梦想,走上人生巅峰,迎娶白富美。
但是啊,这本书必须一页一页地翻阅,必须足足翻阅九九八十一页方可完成此书的修炼学习。假如你在没有学习完成之前,冒然翻开最后一页,你是非常容易受到反噬的,轻则失去敲代码的能力,重则直接影响你的现实生活。
你看看啊,我现在就尝试一下,我就仅仅地揭开最后一页的一个角,“啊啊啊啊啊,反噬太厉害了啊~~~痛死我了~~”
话说回来啊,这本派等函数宝典在我凝成它的过程中,它逐渐产生了它自己的意识,在翻开第一页准备学习之前,必须对着这本书大声喊出:“派等函数宝典是我爸爸!",方可继续使用。否则这本书将会自焚而灭,你将错过改变命运的机会,终生后悔。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
函数的核心呢,自然是def函数,可以自定义想要的算法功能。
接下来我们简单自定义一个打印个人信息的函数:
def print_people_information(name,age,sex,college):
print("your name is "+name+" .")
print("you are "+age+" years old.")
print("you may be "+ sex +"孩.")
print("you are from this college called: " +college)
print_people_information("黄爸爸","20","男","清华大学")
print("````````````````````````````")
print_people_information("严妈妈","18","女","北京大学")
打印的结果很明显了,括号内加粗的四个变量,就是你要使用这段函数时需要输入的四个变量,即可打印出你想看到的内容。
当然了,我们还可以自定义一个算法函数,例子如下:
def fuck(x,y):
x1=x*2
y1=y/4
result=x1+y1
print("The result is: "+str(result)+".")
fuck(2,4)
自定义了一个fuck函数,输入两个数字就会执行相应的计算,结果那么这段函数的结果自然是5.0。
在函数中,类与对象是其中最经典的两个概念。
那么问题来了,类到底是什么?
类是现实生活或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装到一起。
我们来简单看一下下面的代码,加深理解,学会如何使用class类:
class Student():
name="Master跑跑" #初始的数据
age=20
def student_information(self): #self,是一个必要性的功能,能够完成从class里的引用。
#强制缩进,在class之下,del想要引用里面的内容必须规范代码模块的位置。
print("name:"+self.name)
print("age:"+str(self.age))
student1=Student()
student1.student_information()
我们可以知道,这段代码中,创建了一个Studenet的class类,这个Student里面含有两个变量:name和age,这个时候我们可以输入初始的数据,
如果对这段函数不进行任何操作的话,输出会打印初始数据。
然后这时候自定义一个student1变量,去获取Student的初始数据。然后对studenet1进行studenet_information()函数处理。输出自然是:
name:Master跑跑
age:20
但是,要特别注意的是,这段代码中的def的函数,并没有提供可以修改数值的功能,也就是说,这段代码只能提供初始数据的打印。
那么我们来看看这一段更加复杂的函数,可以自行修改变量的值并输出:
class Student():
name='Master'
age=18
def __init__(self,name,age):
#__init__是构造函数。
#self其实并不是唯一选择,this可以,that也可以,其他也可以。
self.name=name
self.age=age
print("姓名:"+self.name) #这两段代码的意义实际上就是看__init__函数是否会自己打印一次。
print("年龄:"+str(self.age)) #从打印出来的结果可知,确实会自己打印了一次,所以可以删掉下面的print语句。
def marking(self,score): #自定义一个成绩函数
self.score=score
print("最后这位%s岁的%s同学的成绩是:%s"%(self.age,self.name,self.score))
student1=Student('黄跑跑',5)
# student2=Student('严跑跑',6)
student1.marking(70)
# print(student2.__dict__)
这段代码可以好好解读一下,首先是例行的定义Student的class类,先给name和age赋值初始数据。
重点就来到了__init__函数,注意,init左右两侧是两个_ (曾经愚蠢的我为了这个愣是找了10分钟的原因。)
__init__是构造函数,在使用一次这个函数时,里面若是有print函数,会自行打印一次。
然后__init__函数的内容自然是self.name=name,self.age=age 这样就可以自由输入两个想要打印的数据了。
然后我又加进去一个def自定义成绩的函数,所以这段代码最后的输出结果应该是:
姓名:黄跑跑
年龄:5
最后这位5岁的黄跑跑同学的成绩是:70
__dict__是将一个变量集的内容以集合的形式打印出来。
最后我在这段代码后再加一句:
print(student1.__dict__)
最后的打印结果自然是:
{'name': '黄跑跑', 'age': 5, 'score': 70}
那么问题就来了,我是否能让这段代码更短?答案是可以的,你可以将输入两个变量的值的代码用新的函数形式表达,存储到另一个文件。
我们先建立一个c1.py文件,在里面输入修改变量值的函数:
class FUCK():
def __init__(self,name,age):
self.name=name
self.age=age
那么这段函数的名字自然是FUCK了。然后我们打开原代码函数文件,进行如下修改:
from c1 import FUCK
#file文件的命名最好以字母开头,和变量命令一样。
# 比如我要是创建1.py文件,这儿就无法引用。故改成c1.py.
class Student(FUCK):
name='Master'
age=18
def __init__(self,name,age):
FUCK.__init__(self,name,age)
#super(Student, self).__init__(name,age)#这句和上一行的功能是一样的,使用了super函数智能引用.
print("姓名:"+self.name)
print("年龄:"+str(self.age))
def marking(self,score):
self.score=score
print("最后这位%s岁的%s同学的成绩是:%s"%(self.age,self.name,self.score))
student1=Student('黄跑跑',5)
student1.marking(70)
这样看过去是不是实际上没变多少长度?是的,因为多加了两行代码
一个是从c1.py文件中引用FUCK函数:from c1 import FUCK。然后为了完成接入,第二行须改成class Student(FUCK):
另一个是简化的代码:FUCK.__init__(self,name,age)。其实不难理解:将功能存放在FUCK功能的文件中,这段函数自然是调用c1.py文件的功能
所以最后打印的结果是没变的。
那么有些人疑问就来了,你这样花里胡哨的操作,代码也没有变得更短啊?
不不不,你们还是太过于年轻,太过于navie。如果你们这时候是在做游戏呢?你面对成千上万的函数计算怎么办?不会被弄混吗?这样的操作
的意义就在于秩序地存放功能,秩序地调用。
对了,其实
FUCK.__init__(self,name,age)
是可以写成另外一个形式的:
super(Student, self).__init__(name,age)#使用了super函数,完成智能调用。功能效果是一样的。