前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AI 学习之路——轻松初探 Python 篇(二)

AI 学习之路——轻松初探 Python 篇(二)

作者头像
小之丶
发布2018-03-07 10:59:20
8990
发布2018-03-07 10:59:20
举报
文章被收录于专栏:WeaponZhiWeaponZhi

这是「AI 学习之路」的第 2 篇,「Python 学习」的第 2 篇

我将分两篇讲解下 Python 的基础语法,这是第一篇。大家也可以在很多地方看到入门的学习资料,我就简单的根据自己理解和学习,用尽量简单和好理解的方式,再来小入门一下,文中可能会用到一些 Java 上的理解。

总而言之,我不希望是一种阅读文档的方式,而是用一种思考和共鸣的方式去理解各个知识点

一些建议

今天在群里,有的小伙伴建议我使用一些类似 PyCharm 这样的智能编译器来入门 Python,实际上我何尝不想用编译器呢,我也是老早就下载了 PyCharm,但我还是决定在学习的过程中不使用任何智能编译器,使用命令行和纯文本编辑器来一个字符一个字符的写代码,我也建议大家这样做,先暂时放放手里的编译器。

为什么一再强调这样做呢,在上大学的时候,每次学一门新的语言,老师都会强调让我们用命令行来编译代码,这样做不仅能帮助我们更好的理解一门语言的编译过程,而且一行一行敲出来可以更好的培养我们对这门语言的「语感」,是不是真的和学英语感觉差不多,实际上确实是差不多的,写代码也是要一个「语感」

我们在控制台或者终端中输入「python3」将进入 Python 的交互式环境,在交互式环境中,我们可以直接输入代码,回车后,每一行代码的结果都会被打印输出出来。你也可以通过执行「python test.py」来运行一个 .py 文件。但这两种输出方式有一定区别,举个例子。

在交互式环境下输入以下代码并回车

代码语言:javascript
复制
>>> 'Python is the best language. '
'Python is the best language. '

'Python is the best language' 是一个字符串,我们下篇文章会说到。这里我们发现,输入我们输入了一个字符串并回车后,交互式环境直接帮我们把这个字符串打印出来了。我们试试在 test.py 文件中输入这段代码吧

代码语言:javascript
复制
'Python is the best language. '

通过「python test.py」执行文件发现没有任何输出,它不会像交互式环境下输出每一行。提醒大家一点的是,在交互式环境中,我们可以省略「.py」,直接通过「 python test」来执行 Python 文件。

我们把「test.py」稍作修改,添加 print 语句,就能打印出来了

代码语言:javascript
复制
print('Python is the best language. ')

这里推荐大家使用「Sublime Text」配合交互式环境来进行学习,在 Sublime Text 中进行代码编写,在 Tools --> Build System 中选择 Python 后,通过「Command+B」(Mac) 来编译,如果有需要验证某一行代码,就复制到交互式环境中去验证,使用这种方式来学习 Python 语法,别提有多来劲了。

输入输出

1. print

我们看到了好几次「print( )」了,Python 的输出语句,2.x 和 3.x 是有所区别的:

代码语言:javascript
复制
这是 2.x 的语法>>> print 'Hello, Python'这是 3.x 的语法>>> print('Hello, Python')

print() 也可以带多参数,用「,」相隔,每次遇到逗号会出处一个空格,就像这样:

代码语言:javascript
复制
>>> print('小之','正在','帅气的','学 Python')
小之 正在 帅气的 学 Python

不止是字符串,print() 还可以打印出整数:

代码语言:javascript
复制
>>> print(2017-1994)23

然后配合刚刚的多参数函数就可以组合出一些有意思的输出:

代码语言:javascript
复制
>>> print('小之今年',2017-1994,'岁。')
小之今年 23 岁。

我还在青春期呢。

2. input

我们可以通过 input() 来进行等待输入,然后把输入结果放到一个变量中,3.x可以支持中文变量名!:

代码语言:javascript
复制
>>> 姓名 = input()
小之
>>> 姓名
`小之`

我们通过键盘输入,将「小之」这个字符串存放在了「姓名」这个变量中,输出「姓名」会直接把存放的字符串给打印出来。

我们搭配一下上面的知识,来综合应用下:

代码语言:javascript
复制
>>> 姓名 = input()
小之
>>> 性别 = input()
男
>>> print('姓名:',姓名,'性别:',性别)
姓名:  小之 性别:  男

Python 的缩进

Python 不像 Java,它没有大括号和分号这样明显的代码块控制符号,一切的代码块都是通过缩进来区分,这样做的好处是,它强制你写出语法严格的缩进模式,不会像 Java 一样,只要你符号使用的对,你甚至可以极端的把所有代码写在一行里。

但这样做又会有一些问题,如果逻辑比较复杂,可能你的代码就会有非常冗长的「迷之缩进」,看的你怀疑人生。用 Java 写客户端的同学可能会有一个体会,在写一些嵌套请求或者涉及到匿名内部类的时候应该深有体会,环环相扣的大括号在你眼前像麻花一般晃动,酸爽自知,不过好在有了「Lambda」和一些链式结构,这种情况才有所缓解,这里就不深谈了。

在 Python 里,这种情况可能会更严重,但实际上这种缩进语法也有一种反向指引作用,他会促使你去想尽一切办法写一些缩进比较少的代码,为了达到这个目的,首先你就得保证你的代码拥有良好的设计性,每个函数遵守「单一原则」。

这让我想到了「单元测试」,测试驱动开发就是这样,如果你想让你的代码具有可测性,那你不得不在开发阶段就让代码具有良好的设计性,每一个函数都尽量只做一个事,这样才能把每一段逻辑「可命名化」。

好比做菜可以分好多步骤,比如洗菜、切菜、炒菜、放调料等,你得把每个步骤都拎出来一个函数,这个函数名就叫洗菜,然后它只干洗菜的事。如果你把这些步骤都放在一个函数里,函数名叫做菜,这实际上不是一个很好的做法,因为它干的事太多了,而你的命名不能很好的让阅读你代码的人细化的理解到它到底做了啥。

所以,缩进里面的门道可多了呢。

数据类型

1. 整数与浮点数

Python 的数据类型和其他语言比较类似,整数运算始终是精确的,而浮点数可能会有精度的丢失。

没错,即便是整数的除法,结果也是精确的:我们使用 5/3 来看看结果

代码语言:javascript
复制
>>> 5/3
1.6666666666666667

「/」计算的结果是浮点数,5/3 你无论试几次,它都是这个结果。即便整除,最后还是浮点数。

代码语言:javascript
复制
>>> 6/3
2.0

还有一个取整除法「//」,这是一种割尾取值:

代码语言:javascript
复制
>>> 5//3
1

当然,还有我们熟悉的「%」,余数计算:

代码语言:javascript
复制
>>> 5%3
2

2. 布尔值

布尔值只有两种值:True 和 False,不是 True 就是 False,经常用在判断语句中,他们可以搭配 and、or、not 来运算,也可以直接输出或者通过布尔运算计算出来:

代码语言:javascript
复制
>>> True
True
>>> False
False
>>> 2>1
True
>>> 2<1
False

if age >= 23:
    print('比小之成熟')
else:
    print('比小之年轻')

3. 空值

Python 中的空值用「None」表示,和 Java 中的 null 有点像。

4. 变量

Python 中的变量是可以被任何数据类型赋值的,这是动态语言的特性,而像 Java 这样的静态语言,在给变量赋值的时候,是需要指定类型的。

代码语言:javascript
复制
int a = 10; //指定 a 为整型
a = "Test";  // 编译期报错,类型不匹配

但 Python 没有这种问题,同样的变量可以被赋予不同类型的值。

代码语言:javascript
复制
a = 10;     // a 为整数类型
a = 'Test' // a 现在是字符串类型

不过 Python 和 Java 变量的内存语义是类似的。变量都是指向一个引用。

代码语言:javascript
复制
a = 'ABC'
b = a
a = "XYZ"
print(b)

这里的 b 打印出来是 'ABC',a 和 b 存储的是引用指针,b = a 的时候,b 存储了 a 的引用,当 a 的引用变化的时候,b 的引用当然不会变化,而字符串又是一种常量池的实现方式,所以 b 就会打印出来 'ABC',大家是不是觉得和 Java 非常类似呢

常量在 Python 中用大写字母表示:

代码语言:javascript
复制
PI = 3.141592653

不过实际上它也是个变量,也可以被修改。只是约定俗成用这种方式来表示常量罢了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WeaponZhi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档