说在前面
为了目标而努力
目标和计划
如果说学习,应该是有规划的,怪我之前没有交代清楚,接下来补充交代一下。
初识 python
首先,我们先来看一个比较简单的程序: 其中包含了最基本的语法和结构,我们对照着来解读一下,一个 python 程序是怎么构成的吧!
温馨提示:代码在 pycharm 中写的,这个编辑工具比较适合大家开发,之后会简单讲一下它的用法。左边是行号,中间是代码。
import datetime
这一行以后可能会有很多行,关键字`import`用来将外部的包导入到我们的代码中。这样,在我们的代码里就可以使用别人写好的功能,省时省力哦。
包:在很多语言中都有类似的概念。比如我们要写一个排列组合的计算程序,里面会涉及到阶乘。在普通概念中,我们要自己写一个或多个阶乘的方法。但是引入了别人写好的包后,只需要一句话就可以完成这个操作啦。可以说,在 python 的路上,包是必不可少的内容。
class Hello(object):
`class`关键字用来标识这是一个类。什么是类呢?用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实现,之后我们会提到。听了定义是不是有些头大?我们举个栗子:就说动物吧。比如有一种动物叫狗 🐶,那么狗有什么特征呢?有尾巴,有眼睛鼻子,有年龄身高等等。那么这些就是狗的属性。狗喜欢啃骨头,开心喜欢摇尾巴,这些就是狗能做的事情的一部分,也就是 🐶 具有的方法。好,那么狗就是一个类,它标识了具有这些属性的集合。对象是类的实例。花花就是一个狗的对象。刚才我们描述的内容花花都具备,更重要的是,它本身是一条狗。正因为它是一条狗,所以他会有这些属性。那么大毛也是,欢欢也是。它们都是狗这个类实际化后产生的对象。 回到`Hello`类,它后面有个括号是什么呢?它表示一种继承关系,表示`Hello`是属于`object`的。`object`是什么,继承又是什么呢?我们继续说 🐶。我们知道了狗是一个类,有这个那个属性,但是猫也有啊,甚至有的属性人也有呀?因为我们都是哺乳动物。那么狗,猫,人都是属于哺乳动物的吧,哺乳动物也有一些特性。比如用肺呼吸,体温恒定等等。我们把共同的特征放在哺乳动物类里面去,这样就不用提到狗或者猫就要说很多相同的内容啦,只需要说一个哺乳动物就可以概括了。那么我们可以说猫狗人三个类都是哺乳动物的子类,换句话说,它们继承了哺乳动物类。在 python 中就可以表达为 `class 猫(哺乳动物):`。 这么说可以理解了吧。那么 object 是什么类?为什么我们的 Hello 要继承它呢?原来`object`是 python 中最顶级的类,它是所有类的父类。类似于现实世界中的夸克。当然,我们也可以省略这个`object`,因为默认没有父类的类都是继承于它的。 有了类之后就要有自己的属性和方法啦。我们接着往下看。
可以看到,class 这句话距离上方有两个空行。这可不是随意按的回车哦。这个是 python 标准语法格式。类定义之前要有两个空行。
age = 10
首先我们要注意一点,这句话和后面的一大堆都是带有缩进的。也就是在 class 那句话的后面。缩进代表有缩进的部分都是上一行里面的部分,也就是这一大块都是类的内容。我们可以用空格或者 tab 来进行缩进但是一定不能混用。一般我们用 2 或 4 个空格来表示缩进。一般情况下一个 tab 等于 4 个空格。 来我们看一下这一行代码。`age`是一个属性,也是一个类变量。变量就是一个单词可以代表一个值的东西。类变量就是能表示类属性,在类中直接定义的变量。在 python 中是不需要定义类型的。python 只有字符串,整数和小数三种基本类型。数字和小数直接写就好,字符串要加双引号。这个之后会说。像 age 就是一个数字属性的变量。是类`Hello`的一个属性。我们在以后会用到这个变量。
def say_hello(self, name):
print('hello ' + name + '!')
这段呢是一个函数,我们也可以称之为方法。数学中的函数呢是有自变量,有因变量。那么括号里的可以看作是自变量,函数如果最后有`return`就是会返回一个因变量。函数嘛就是来实现功能的,标准格式就是前方空一行,开头 def 加空格,然后是函数名,后面的括号里就是参数也就是自变量列表,然后跟一个冒号。下面缩进一格写函数内容,也叫函数体。在里面就是具体的实现方法啦。这里没有写很复杂的方法,就是输出了个 Hello +传入的参数 name。 这里的 print 将内容输出到屏幕上。字符串之间是可以通过加号连接的。
def how_old_are_you(self, your_age):
your_age = int(your_age)
if your_age>self.age:
print('你比我大哦')
elif your_age == self.age:
date = datetime.date.today()
year = date.year
print('我们一样大,都是' + str(year - self.age) + "年出生的哦")
else:
print("我比你大,叫哥哥!")
这个方法也是一个输出方法,但是里面涉及的内容比较多。明天我们主要讲这个方法,今天有点晚了可能讲不完,就先不讲啦,下一章我们通过这个方法认识条件语句。
name = input("请输入你的姓名:")
age = input("请输入你的年龄:")
各位请看好,这两句话没有缩进哦。说明从这里开始已经不是 Hello 类中的内容啦。那么当我们运行一个 python 脚本时,就是按顺序执行的。类中的内容属于预先定义的内容,你不调用它不执行,而是从这种独立的语句开始执行的。 input 方法用于接收用户输入,并返回给等号前面的变量。这个方法是我们暂时和计算机程序交互的一个方法。通过执行了这两句话,计算机就可以收到我们输入的内容啦!
hello = Hello()
hello.say_hello(name)
hello.how_old_are_you(age)
在接收到我们的内容的同时,`name`和`age`两个值也就存起来了。python 把它们放到内存的某个区域中。接下来,`hello = Hello()`这句话就是我们上面所说的,将`Hello`这个类实例化,产生了`hello`这个对象。这里我们要注意,两个单词的大小写不同,所代表的含义也不同哦。他俩在这里是类和对象的关系,在其他地方可能没什么联系,这是人为定义的。所以大家一定要注意,在编程中大小写的要求是很严格的,千万不要混淆哦。 在实例化了`Hello`类生成了`hello`对象后,就可以通过`hello`这个对象来调用类中定义的方法啦。有的同学可能会问:为什么不能直接用类来调用方法呢?答案是可以。但是只是一些其中的方法。接着猫猫狗狗的例子,你可能对你家的狗狗喊道:“欢欢,过来!”它会开开心心地朝你跑过来。这里接收指令执行动作的是欢欢,也就是狗的实例,而不是狗这个分类。所以,大部分情况下,调用类方法必须先将方法实例化。
最后看一下这个程序的演示: 第一行和最后一行是系统输出不用管。中间则是我们定义好的函数和输入输出的方法。系统先让我们输入了姓名和年龄,然后实例化了`Hello`类,最终执行了其中`的say_hello`和`how_old_are_you`方法,输出了这两句话!
写在后面
本周的目的是让大家能简单的看懂 python 的代码,并且对基本的概念有一定的了解。所以大家不用心急什么时候可以写代码呀。以后每个周末我都会出一段视频带着大家回顾一下上一周学过的内容,欢迎支持!