今天咱们继续来聊聊Python的一些基础语法。
我们先以Python之禅中的一段话做为开篇语:优美胜于丑陋;明了胜于晦涩;简洁胜于复杂。这其中贯穿了Python设计者的思维,那么传说中的Python之禅是哪里来的呢?打开命令行,输入python敲回车,进入解释器,然后输入
import this
可以看到如下内容,你可以自己试试哦
Beautiful is better than ugly.
# 优美胜于丑陋(Python以编写优美的代码为目标)
Explicit is better than implicit.
# 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
Simple is better than complex.
# 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
Complex is better than complicated.
# 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
Flat is better than nested.
# 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
Sparse is better than dense.
# 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
Readability counts.
# 可读性很重要(优美的代码是可读的)
Special cases aren't special enough to break the rules.
Although practicality beats purity.
# 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
Errors should never pass silently.
Unless explicitly silenced.
# 不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写except:pass风格的代码)
In the face of ambiguity, refuse the temptation to guess.
# 当存在多种可能,不要尝试去猜测
There should be one-- and preferably only one --obvious way to do it.
# 而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
Although that way may not be obvious at first unless you're Dutch.
# 虽然这并不容易,因为你不是 Python 之父(这里的Dutch是指Guido)
Now is better than never.
Although never is often better than *right* now.
# 做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
# 如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
Namespaces are one honking great idea -- let's do more of those!
# 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)
上面是Python之禅的所有内容,他为我们讲述了Python编程过程中应该遵循的原则,然而,作者是很调皮的,我们来看看这段import this是怎么实现的,我们打开Python的安装目录,本猿安装在C:\Python36,然后进入C:\Python36\Lib,我们找到this.py,然后打开这个文件,我们来看看他的代码。
好了,看到这段代码,其实本猿也看不懂,哈哈,这段代码完全没有遵从Python之禅,完全看不懂嘛,Python之禅的作者很皮的。
上面了解了Python编程的原则以后,咱们来回归正题,Python的基础语法。
首先,我们来讲一下Python中的缩进原则,这个是初学者最容易碰到的问题。我们从一个栗子出发,打开命令行,输入python进入解释器,输出我们的Hello World!如下图所示:
新手经常碰到的一个异常就是:IndentationError:unexcepted indent。
什么原因呢?Python规定使用缩进(空格或tab键)来控制整个程序的结构,上面我们的第二个print函数输出"Hello World!"时,前面多了一个空格,和上面的一行没有对齐,所以引起了上面的错误。另外,程序中如果使用空格键进行对齐,所有的对齐都应该使用空格键,不能空格和Tab混用。通常情况下我们使用四个空格或一个Tab做为缩进的字符。这里说完可能还不直观,我们看个简单的例子,里面的内容看不懂没有关系,关键是需要知道什么是通过缩进控制的程序。
#-*-encoding=utf-8-*-
from random import randint
a = randint(1,100) #从1到100取一个随机整数
if a > 80:
b = a + 1
print("a>80,the value of b is ",b)
elif a <= 80 and a > 30:
b = a + 2
print("30<a<=80,the value of b is ",b)
else:
b = a + 3
print("a<30,the value of b is ",b)
从上面的例子我们可以看出,Python在写代码的时候需要堆得整整齐齐哦,否则就会报错,本质上是同一级代码需要对齐,上级代码和下级代码的关系靠空格或Tab键来控制。要想运行上面的程序,你可以复制上面的代码,新建一个文本文档,推荐使用notepad++),把内容粘贴进去,保存为test.py,通过命令行进入test.py所在的目录,执行python test.py即可。
聊完了代码缩进下面我们再聊几个概念:函数,参数,变量,函数返回值。学过初中数学的童鞋应该熟悉函数的定义,举个简单的栗子:
y=3x+1
上面的式子中x是自变量,y是应变量,在程序猿的世界里,其实也离不了这个概念。我们把上面式子中的x叫做变量,3*x+1叫做函数,y叫做函数返回值。那么如何使用Python来实现上面的这个函数呢?我们先给出这个函数的实现,然后来慢慢解释。
def dosomething(x):
y = 3 * x + 1
return y
第一行的def dosomething的意思就是说我这里有一个名字叫做dosomething的函数,用编程术语来描述就是:声明了一个dosomething的函数,def就是“这是个函数的”意思,这是一个关键字,声明函数的时候必须要使用这个关键字。后面的括号里的x是这个函数的自变量,用编程术语来描述就是指“参数”。
我们来看第二行,第二行描述了函数要做的事情,就是把3*x + 1的计算结果保存在y这个应变量里面(这里的描述略有偏差,为了帮助理解先忽略这个问题)。
第三行return y就是指把y里保存的计算结果返回,return也是一个关键字,表示返回某个值。返回给谁呢?
我们继续来看,我们需要计算x=3的值,怎么做呢?在数学概念里,我们可以将
y =3*x +1
写成
f(x) = 3*x + 1
我们计算x=3的时候表达式如下:
f(3) = 3*3 + 1
在程序猿的世界里其实差别并不大,我们想计算x = 3的值只需要执行如下内容:
dosomething(3)
这个过程叫做函数的调用,所谓调用就是传一个真实的x的值给声明的dosomething,这个函数会根据具体的函数内容计算出应变量的值,也就是传说中的函数返回值。
从上面的例子中我们总结一下:自变量、应变量统称为变量,dosomething叫做函数名,x叫做函数的参数,y叫做函数的返回值。其中def是声明函数的关键字,return是返回函数值的关键字。
如何执行上面的代码呢?我们和前面演示缩进的那个程序是类似的。新建一个文本文档,粘贴如下内容:
def dosomething(x):
y = 3 * x + 1
return y
print(dosomething(3))
上面我们拿数学中的例子来解释了函数等概念,但是这个定义是很狭窄的,为了便于理解我们可以先用数学概念类比。实际上,函数就是某个特定功能的实现,可以是上面我们说的一个一次函数的实现,也可能是返回了一个图片、或者一个文字,这些图片和文字就是函数体内处理后得到的结果,这里如果难理解的话我们先不要着急,在后面的教程里面会大量涉及这些概念,通过各种各样的例子,你会对这些概念的理解越来越深刻。
好了,今天的教程就先到这里,如果不能理解就自己动手写点程序吧。
喜欢的话可以关注下我的公众号哦~
长按关注哦~