Python 有什么与众不同? 很多很多. 首先要指出 Python 有很多我们熟悉的东西, 类似于所有其它通用高级编程语言, Python 同样有 类、方法、语句、表达式、函数、操作符和模块等,Python 还有一些特别的东西,下面开始学习记录。

简介?

有这么一个需求, 我需要在 PC、MAC、Android、IOS 不列举了,总之就是我需要一个能够跨平台部署的东西,没错 用 Python 就对了(别的 JavaWeb、RN 什么的这里不提),据说还能用 Python 爬些数据,重点是速度快,下面我们开始 Python 的学习。

开始 Python 环境搭建

1. 安装 Python 3

你的计算机可能已经安装了某个版本的 Python,Mac OS X 会预装 Python 2,Linux 的大多数版本也是如此(也有可能是 Pyhon 3),但 Windows 不同,他没有内置任何版本,下面来检查计算机内是否内置有任何 Python 版本:
如果是 Mac OS X 或者 Linux 可以键入
1
python -v
如果是 Windows 则键入
1
2
3
4
5
// path 是安装路径
{path}/python.exe -v

// 一般 Python 默认路径是
c://Python31/python.exe -v
或者你的操作系统没有安装任何的 Python 版本, 可以在 官网 针对自己的操作系统下载对应版本的 Python。

MAC 版的 Python V3.6.3 的下载地址

安装 Python 3 完成,会有一个 IDLE ( 虽然我用 Item 2)这是 Python 的集成开发环境, 尽管简单,但极其有用。IDLE 包括一个能够利用颜色突出显示语法的编辑器、一个调试工具、Python Shell, 以及一个完整的 Python 3 在线文档集。

2. 使用 IDLE 来包住学习 Python

IDLE 提供一个完备的代码编辑器,允许你在这个编辑其中编写代码,Python Shell 可以在其中实验运行代码。总的来说 IDLE 的 shell 是真的强势棒棒哒,因为利用它可以在编写的同时运行 Python 代码。
第一次启动 IDLE 的时候,会显示 “三个大于号” 的提示符(>>>),可以再这里输入代码。shell 得到你的代码语句后会立即执行,并在屏幕显示生成结果。
IDLE 知道所有 Python 语法,它会提供 “完成提示” (当你使用一个内置函数(如 print())时,会弹出这种 “完成提示”)。Python 的码农通常把内置函数称为 BIF (built-in function)。print() BIF 的作用是把消息显示到标准输出(就是屏幕)。
IDLE 使用区分颜色的语法来突出限时代吗。默认的,内置函数都是紫色,字符串是绿色,Python 语言的关键字( 如:if )就是橙色。生成的所有结果显示为蓝色。如果你不喜欢这些颜色选择,只需要调整 IDLE 的首选项就可以很容易的改变颜色选择。
另外,IDLE 也很清楚 Python 的缩进语法( Python 要求代码块缩进 )。刚开始使用 Python 的时候,可能会很难适应这点,但是 IDLE 可以减轻你的负担,他会根据需要自动缩进。

3. 有效的使用 IDLE

IDLE 提供了大量特性,不过只需要了解其中一部分就可以很好的使用 IDLE。

TAB 完成

先键入一些代码,然后按下 TAB 键,IDLE 会根据一些建议,帮你完成这个语句。

回退代码语句

按下 Alt + P,可以回退到 IDLE 中之前输入的代码语句。或者按下 Alt + N 可以移到下一个代码语句。可以编辑之前输入的任何语句,甚至是跨多行的代码语句。

编辑回退的代码

一旦回退代码语句, 还可以进行编辑,并使用箭头键切换语句。可以编辑之前输入的任何语句,甚至是跨多行的代码语句。

调整 IDLE 的首选项

IDLE 的首选项对话框允许你私人定制 IDLE 的默认行为。有四个设置标签页可以调整,可以控制字体和 TAB 行为,改变突出显示语法所用的颜色,调整某些按键的组合行为,海军可以改变 IDLE 的启动设置。所以,如果你确实喜欢鲜艳的骚粉红色字符串,IDLE 会给你这个权利,可以改变 diamante 在屏幕上如何提示。

Pyhton 之列表学习

任何值得招收创建的程序都必然会处理数据,有些时候,数据很简单也很直接 —— 很容易处理。但还有些情况下,所要处理的数据不论从结构还是含义上讲都很复杂,这就要求你花些功夫把它完全搞清楚,另外编写代码来处理这些数据更是需要花些心思。
为了降低复杂性,通常可以把数据组织为列表:可以有顾客列表、朋友鞋标、购物清单和待办事项清单等。由于用列表组织数据如此常见,Python 中可以很容易地利用代码创建和处理列表。

01. 创建简单的 Python 列表

从简单的数据开始下手,例如:我要购买一台新的牛逼的台式电脑,我们会有以下的数据列表。

CPU: i7 8700K ¥3199
VGA: 1080Ti ¥7200
SIMM: 16G 3200 ¥2100
MAINBOARD: Z370 ¥3200
total: ¥15699

这就是我们的数据,什么内存条贵了?我们不讨论这个,回到正题,接下来我们从这配置清单列表开始入手,在此基础上逐步的深入;

为了把人可读的列表转为 Python 可读的列表,需要遵循以下条件:

  1. 在数据两边加 “” 双引号,将各个配件转换为字符串;
  2. 用逗号将列表项余下一项分隔开来;
  3. 在列表的两边加上开始和结束中括号;
  4. 使用 = 赋值操作符将这个列表赋值到一个标识符,也就是变量;
1
2
3
4
mountings = [
"i7 8700k", "1080TI",
"16G 3200", "Z370"
]

完全可以把创建列表的代码放在一行上(当然,前提是假设你有足够的空间,全部都能放在一行上放下,我那是老码农为了简洁看起来舒服的写法):

1
mountings = ["i7 8700k", "1080TI", "16G 3200", "Z370"]
疑惑了吧,是不是感觉少了点东西,没错就是变量类型,Python 不需要知道变量类型,像 Kotlin 都需要个 var 来标识,Python 就是这么的任性,不需要知道声明是什么类型的变量,”Python 是世界上最好最简单的语言!“( 虽然我并不赞同这样的做法,感觉很突兀 )

02. 列表就像是数组

在 Python 中创建一个列表时,解析器会在内存中创建一个类似数组的数据结构来存储数据,列表中的每个数据项都有一个与之关联的数值偏移量,数据项是以堆的形式存放数据,自下而上先进后出的概念形成一个堆栈。类似于其它编程语言中的数组技术,堆栈中的第一个数据是从 0 开始的

Z370 3
16G 3200 2
1080TI 1
i7 8700K 0

03. 使用中括号记法访问列表数据

1
print(mountings[0])
应该看出来了 print 是打印用的,嗯,和别的编程语言一样数组使用中括号是可以获取到数据的

打开 IDEL 试试手:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> 
mountings = [
"i7 8700k", "1080TI",
"16G 3200", "Z370"
]
>>> print(mountings[0])
i7 8700k
>>> print(mountings[1])
1080TI
>>> print(mountings[2])
16G 3200
>>> print(mountings[3])
Z370
>>> print(mountings[4])
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print(mountings[4])
IndexError: list index out of range
>>>
编码体验还是阔以滴,比较棒,相比其它编程体验来讲是全新的,下面有故意报错,并且也提示了 list index out of range

Pythin 中的列表看起来像极了数组,不过还不只有这些,列表是完备的 Python 集合对象,也就是说,列表通过列表方法的形式提供了一些现成的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
>>> mountings = [
"i7 8700k", "1080TI",
"16G 3200", "Z370"
]
>>> print(mountings[0])
i7 8700k
>>> print(mountings[1])
1080TI
>>> print(mountings[2])
16G 3200
>>> print(mountings[3])
Z370
>>> print(mountings[4])
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
print(mountings[4])
IndexError: list index out of range
>>> mountings.append("DELL");
>>> print(mountings[4])
DELL
>>> print(mountings)
['i7 8700k', '1080TI', '16G 3200', 'Z370', 'DELL']
>>> mountings.pop()
'DELL'
>>> print(mountings)
['i7 8700k', '1080TI', '16G 3200', 'Z370']
>>> mountings.extend([
"DELL", "USCORSAIR"
])
>>> print(mountings)
['i7 8700k', '1080TI', '16G 3200', 'Z370', 'DELL', 'USCORSAIR']
>>> mountings.remove("USCORSAIR")
>>> print(mountings)
['i7 8700k', '1080TI', '16G 3200', 'Z370', 'DELL']
>>> mountings.insert(4, "USCORSAIR")
>>> print(mountings)
['i7 8700k', '1080TI', '16G 3200', 'Z370', 'USCORSAIR', 'DELL']
无须描述了吧,这个列表操作的各种插入、各种查询、各种删除操作,对了,Python 列表是一个高层集合,支持混合类型,比如你在数组里面插入了字符串,你还可以插入整形,没错,很奇妙吧,去试试吧。

04. 处理列表数据

来点好玩的,比如打印一堆数据,想到了什么,没错,循环打印,目前有两种方法
  1. for 循环

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> mountings = [
    "i7 8700k", "1080TI",
    "16G 3200", "Z370"
    ]

    >>> // each_flick 就是目标标识符
    >>> // in 将目标标识符与列表分隔开来
    >>> // : 冒号标识列表处理 code 开始
    >>> for each_flick in mountings:
    >>> print(each_flick)
  2. while 循环

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> mountings = [
    "i7 8700k", "1080TI",
    "16G 3200", "Z370"
    ]

    >>> count = 0
    >>> // count 用来自增到 < mountings 的长度位置 while 停止
    >>> while count < len(mountings)
    >>> count = count + 1
    >>> print(mountings[count])

05. 在列表中存储列表、查找列表、处理复杂数据、处理多层嵌套列表

下面来一个更有意思的玩意儿 list 嵌套 list
1
2
3
4
5
6
>>> mountings = [
"i7 8700k", "1080TI",
"16G 3200", "Z370", ["logitech", ["HHKB"]]
]
>>> print(mountings[4][0][0])
HHKB
看出来了吧,很有意思,可以多次的嵌套下去,还是和上条一样打印全部如果只是 for 打印的话打印到 list 的时候会把 list 给打印出来而不会把 list 的元素打印出来
1
2
3
4
5
6
7
>>> mountings = [
"i7 8700k", "1080TI",
"16G 3200", "Z370", ["logitech", ["HHKB"]]
]
>>> for each_flick in mountings:
>>> print(each_flick)
i7 8700k 1080TI 16G 3200 Z370 ["logitech", ["HHKB"]]
总的来说就是 mountings 有 3层 list 而 for 循环打印出了第一层,如还不明白,可以去试试写 Java 取 Json 数据那可比这个嵌套有意思。
那么有什么解决方案呢,没错多次 for 循环,只需要判断下个打印对象是否是 list 就行了
1
2
3
4
5
>>> mountings = [
"i7 8700k", "1080TI",
"16G 3200", "Z370", ["logitech", ["HHKB"]]
]
>>> isinstance(mountings, list)
isinstance(判断对象, 类型) 达到条件即可为 true 然后继续 for 循环即可
1
2
3
4
5
6
for mounting in mountings:
if isinstance(mountings, list)
for nested_item in mounting
print(nested_item)
else
print(mounting)
再多嵌套几层的话,还得继续编写 for if 是不是觉得很蠢,咱们继续看下面

PS: 在 Python 或 IDEA shell 中:码入 dir(_builtins_) 可以看到 Python 提供的内置方法列表,查看某个 BIF 的作用,如 input,可以在 shell 码入 help(input) 就可以获得 input 的功能描述,目前为止 Python 大概提供了有 70 多个 BIF;

06. 不要重复;应当创建一个函数

前面讲到如果 list 结构够复杂,我们的嵌套也就多,作为一个牛逼逼的程序员怎么能干这种蠢事呢,那么怎么解决,方法有很多比如递归
创建函数的方法
1
def 函数名 (参数):
ps : 参数可选冒号表示函数代码开始,规范学习一定要注意缩进
1
2
3
4
5
6
def print_lol (the_list):
for mounting in the_list:
if isinstance(mountings, list)
print_lol(mountings)
else
print(mounting)
看看使用递归即可减少 “冗余” 的代码了,这整洁骚气的代码才是我们程序员应该有的