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

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

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

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

一些建议

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

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

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

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

>>> 'Python is the best language. '
'Python is the best language. '

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

'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 语法,别提有多来劲了。

输入输出

1. print

我们看到了好几次「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 岁。

我还在青春期呢。

2. input

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

>>> 姓名 = input()
小之
>>> 姓名
`小之`

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

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

>>> 姓名 = input()
小之
>>> 性别 = input()
男
>>> print('姓名:',姓名,'性别:',性别)
姓名:  小之 性别:  男

Python 的缩进

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

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

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

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

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

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

数据类型

1. 整数与浮点数

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

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

>>> 5/3
1.6666666666666667

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

>>> 6/3
2.0

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

>>> 5//3
1

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

>>> 5%3
2

2. 布尔值

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

>>> True
True
>>> False
False
>>> 2>1
True
>>> 2<1
False

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

3. 空值

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

4. 变量

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

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

原文发布于微信公众号 - WeaponZhi(WeaponZhi)

原文发表时间:2017-11-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的SOD蜜

TOP语句放到表值函数外,效率异常低下的原因分析

SQLSERVER的表值函数是SQLSERVER 2005以来的新特性,由于它使用比较方便,就像一个单独的表一样,在我们的系统中大量使用。有一个获取客户数据的S...

1899
来自专栏鸿的学习笔记

python新手应注意的一些小问题

最重要的是看你公司喜欢哪个版本的python。。。。对于你个人而言,python2与python3的差别你可以忽略。。。。 一.注意pep8的编程风格,请记住...

472
来自专栏PPV课数据科学社区

【学习】数据分析师的Python日记-第1天:谁来给我讲讲Python?

今天带来的是PYTHON,这是一篇非常有意思的文章。希望对大家有帮助。 ---- ---- 导语:或许是网上嘈嘈杂杂的关于大数据、互联网的新形势争论,或许是招聘...

1899
来自专栏C语言及其他语言

【编程经验】printf专题:你可能不知道的printf用法【文末有福利】

你可能不知道的printf用法 ? 不少小伙伴反映C语言只会用printf函数,但一些参数、返回值什么的还不了解,所以今天总结一二,给大家总结和梳理一下...

2638
来自专栏微信公众号:Java团长

MySQL索引优化分析

为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及ex...

621
来自专栏java一日一条

Java异常有多慢?

实际上,真正要讨论的问题并不是,“相对‘那些不会发生错误的代码’来说,‘那些以异常形式上报的错误’会有多慢?”,因为你可能也认同“已接受的回答”。相反,真正的问...

412
来自专栏好好学java的技术栈

“面试不败计划”:集合、日期、异常、序列化、其他知识点

862
来自专栏CDA数据分析师

工具 | 学习总结:当我学完Python我学了些什么

本文是本人学完Python后的一遍回顾,加深理解顺便留作手册以备查阅。 学习Python的这几天来,觉得Python还是比较简单,容易上手的,就基本语法而言,...

18110
来自专栏Linyb极客之路

MySQL索引优化分析

为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及ex...

864
来自专栏程序你好

Java集合对象如何进行内存优化

752

扫描关注云+社区