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 条评论
登录 后参与评论

相关文章

来自专栏一名合格java开发的自我修养

如何遍历文件夹下上亿文件而不栈溢出

序:一个文件夹下面有很多层的小文件,如何算出这个文件夹下面有多少文件?递归遍历,简单暴力,递归在一般情况确实是比较方便的解决方案,但是当文件夹深度多深,递归的反...

772
来自专栏一名合格java开发的自我修养

如何遍历文件夹下上亿文件而不栈溢出

序:一个文件夹下面有很多层的小文件,如何算出这个文件夹下面有多少文件?递归遍历,简单暴力,递归在一般情况确实是比较方便的解决方案,但是当文件夹深度多深,递归的反...

793
来自专栏HTML5学堂

在对象的原型上添加方法?

HTML5学堂:利利前段时间写了几个数组、字符串的方法,其中有一个是克隆(复制)一个数组。于是,最近一直在琢磨如何让这个复制变得更简单,可不可以把这个自定义的方...

2825
来自专栏生信宝典

18式优雅你的Python

文章授权转载自 Python与算法之美,粗体文字为生信宝典的修改和补充。文后有生信宝典原创的系列Python学习教程(Python2和Python3)。

952
来自专栏北京马哥教育

十分钟完成Bash 脚本进阶!列举Bash经典用法及其案例

前言:在linux中,Bash脚本是很基础的知识,大家可能一听脚本感觉很高大上,像小编当初刚开始学一样,感觉会写脚本的都是大神。虽然复杂的脚本是很烧脑,但是,当...

1023
来自专栏破晓之歌

常用正则表达式(高亮,markdown) 原

1.oscer 们会喜欢用 Markdown 编辑器吗:https://www.oschina.net/question/12_75077

884
来自专栏Crossin的编程教室

【编程课堂】有序字典 OrderedDict

编程课堂将和每周一坑一样,成为本教室公众号的一个长期固定栏目。每期讲解一个编程知识点,包括但不限于 Python 语法、模块介绍、编程小技巧等。用简短的篇幅,让...

3398
来自专栏编程

Python之路-day4

#读取文件内容 withopen("readme.txt")asmyFile: content = myFile.readlines() print(conte...

1736
来自专栏IT派

Code | Python30个编程技巧!

1. 原地交换两个数字 Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例: ? 3. 使用三元操作符来进行条件赋值 三元...

3374
来自专栏技术栈大杂烩

Python: 受限制的 "函数调用"

函数功能简单明了, 对于结果, 大家应该也不会有太大的异议:func分别是取得全局命名空间中a的值和使用内置命名空间中的函数id获取了a的地址. 熟悉Pytho...

1163

扫码关注云+社区