喜欢小之的文章的能够关注公众号「WeaponZhi」持续关注动态 java
这是「AI 学习之路」的第 2 篇,「Python 学习」的第 2 篇python
我将分两篇讲解下 Python 的基础语法,这是第一篇。你们也能够在不少地方看到入门的学习资料,我就简单的根据本身理解和学习,用尽可能简单和好理解的方式,再来小入门一下,文中可能会用到一些 Java 上的理解。编辑器
总而言之,我不但愿是一种阅读文档的方式,而是用一种思考和共鸣的方式去理解各个知识点。函数
今天在群里,有的小伙伴建议我使用一些相似 PyCharm 这样的智能编译器来入门 Python,实际上我未尝不想用编译器呢,我也是老早就下载了 PyCharm,但我仍是决定在学习的过程当中不使用任何智能编译器,使用命令行和纯文本编辑器来一个字符一个字符的写代码,我也建议你们这样作,先暂时放放手里的编译器。单元测试
为何一再强调这样作呢,在上大学的时候,每次学一门新的语言,老师都会强调让咱们用命令行来编译代码,这样作不只能帮助咱们更好的理解一门语言的编译过程,并且一行一行敲出来能够更好的培养咱们对这门语言的「语感」,是否是真的和学英语感受差很少,实际上确实是差很少的,写代码也是要一个「语感」。学习
咱们在控制台或者终端中输入「python3」将进入 Python 的交互式环境,在交互式环境中,咱们能够直接输入代码,回车后,每一行代码的结果都会被打印输出出来。你也能够经过执行「python test.py」来运行一个 .py 文件。但这两种输出方式有必定区别,举个例子。测试
在交互式环境下输入如下代码并回车ui
>>> 'Python is the best language. '
'Python is the best language. '
复制代码
'Python is the best language'是一个字符串,咱们下篇文章会说到。这里咱们发现,输入咱们输入了一个字符串并回车后,交互式环境直接帮咱们把这个字符串打印出来了。咱们试试在 test.py 文件中输入这段代码吧spa
'Python is the best language. '
复制代码
经过「python test.py」执行文件发现没有任何输出,它不会像交互式环境下输出每一行。提醒你们一点的是,在交互式环境中,咱们能够省略「.py」,直接经过「 python test」来执行 Python 文件。命令行
咱们把「test.py」稍做修改,添加 print 语句,就能打印出来了
print('Python is the best language. ')
复制代码
这里推荐你们使用「Sublime Text」配合交互式环境来进行学习,在 Sublime Text 中进行代码编写,在 Tools --> Build System 中选择 Python 后,经过「Command+B」(Mac) 来编译,若是有须要验证某一行代码,就复制到交互式环境中去验证,使用这种方式来学习 Python 语法,别提有多来劲了。
咱们看到了好几回「print()」了,Python 的输出语句,2.x 和 3.x 是有所区别的: 这是 2.x 的语法
>>> print 'Hello, Python'
复制代码
这是 3.x 的语法
>>> print('Hello, Python')
复制代码
print() 也能够带多参数,用「,」相隔,每次遇到逗号会出处一个空格,就像这样:
>>> print('小之','正在','帅气的','学 Python')
小之 正在 帅气的 学 Python
复制代码
不止是字符串,print() 还能够打印出整数:
>>> print(2017-1994)
23
复制代码
而后配合刚刚的多参数函数就能够组合出一些有意思的输出:
>>> print('小之今年',2017-1994,'岁。')
小之今年 23 岁。
复制代码
我还在青春期呢。
咱们能够经过 input() 来进行等待输入,而后把输入结果放到一个变量中,3.x能够支持中文变量名!
>>> 姓名 = input()
小之
>>> 姓名
`小之`
复制代码
咱们经过键盘输入,将「小之」这个字符串存放在了「姓名」这个变量中,输出「姓名」会直接把存放的字符串给打印出来。
咱们搭配一下上面的知识,来综合应用下:
>>> 姓名 = input()
小之
>>> 性别 = input()
男
>>> print('姓名:',姓名,'性别:',性别)
姓名: 小之 性别: 男
复制代码
Python 不像 Java,它没有大括号和分号这样明显的代码块控制符号,一切的代码块都是经过缩进来区分,这样作的好处是,它强制你写出语法严格的缩进模式,不会像 Java 同样,只要你符号使用的对,你甚至能够极端的把全部代码写在一行里。
但这样作又会有一些问题,若是逻辑比较复杂,可能你的代码就会有很是冗长的「迷之缩进」,看的你怀疑人生。用 Java 写客户端的同窗可能会有一个体会,在写一些嵌套请求或者涉及到匿名内部类的时候应该深有体会,环环相扣的大括号在你眼前像麻花通常晃动,酸爽自知,不过好在有了「Lambda」和一些链式结构,这种状况才有所缓解,这里就不深谈了。
在 Python 里,这种状况可能会更严重,但实际上这种缩进语法也有一种反向指引做用,他会促使你去想尽一切办法写一些缩进比较少的代码,为了达到这个目的,首先你就得保证你的代码拥有良好的设计性,每一个函数遵照「单一原则」。
这让我想到了「单元测试」,测试驱动开发就是这样,若是你想让你的代码具备可测性,那你不得不在开发阶段就让代码具备良好的设计性,每个函数都尽可能只作一个事,这样才能把每一段逻辑「可命名化」。
比如作菜能够分好多步骤,好比洗菜、切菜、炒菜、放调料等,你得把每一个步骤都拎出来一个函数,这个函数名就叫洗菜,而后它只干洗菜的事。若是你把这些步骤都放在一个函数里,函数名叫作菜,这实际上不是一个很好的作法,由于它干的事太多了,而你的命名不能很好的让阅读你代码的人细化的理解到它到底作了啥。
因此,缩进里面的门道可多了呢。
Python 的数据类型和其余语言比较相似,整数运算始终是精确的,而浮点数可能会有精度的丢失。
没错,即使是整数的除法,结果也是精确的:咱们使用 5/3 来看看结果
>>> 5/3
1.6666666666666667
复制代码
「/」计算的结果是浮点数,5/3 你不管试几回,它都是这个结果。即使整除,最后仍是浮点数。
>>> 6/3
2.0
复制代码
还有一个取整除法「//」,这是一种割尾取值:
>>> 5//3
1
复制代码
固然,还有咱们熟悉的「%」,余数计算:
>>> 5%3
2
复制代码
布尔值只有两种值:True 和 False,不是 True 就是 False,常常用在判断语句中,他们能够搭配 and、or、not 来运算,也能够直接输出或者经过布尔运算计算出来:
>>> True
True
>>> False
False
>>> 2>1
True
>>> 2<1
False
if age >= 23:
print('比小之成熟')
else:
print('比小之年轻')
复制代码
Python 中的空值用「None」表示,和 Java 中的 null 有点像。
Python 中的变量是能够被任何数据类型赋值的,这是动态语言的特性,而像 Java 这样的静态语言,在给变量赋值的时候,是须要指定类型的。
int a = 10; //指定 a 为整型
a = "Test"; // 编译期报错,类型不匹配
复制代码
但 Python 没有这种问题,一样的变量能够被赋予不一样类型的值。
a = 10; // a 为整数类型
a = 'Test' // a 如今是字符串类型
复制代码
不过 Python 和 Java 变量的内存语义是相似的。变量都是指向一个引用。
a = 'ABC'
b = a
a = "XYZ"
print(b)
复制代码
这里的 b 打印出来是 'ABC',a 和 b 存储的是引用指针,b = a 的时候,b 存储了 a 的引用,当 a 的引用变化的时候,b 的引用固然不会变化,而字符串又是一种常量池的实现方式,因此 b 就会打印出来 'ABC',你们是否是以为和 Java 很是相似呢
常量在 Python 中用大写字母表示:
PI = 3.141592653
复制代码
不过实际上它也是个变量,也能够被修改。只是约定俗成用这种方式来表示常量罢了。
欢迎关注个人公众号