Python3基础知识: 基本数据

Python

学习新的语言最好的资料是官方文档。由于笔者有其他语言基础,这里只整理区别和理解不清的地方。文档介绍Python语言及系统的诸多特性,开始是简单的语法、数据类型和表达式。接着介绍函数和模块,最后涉及异常和自定义类等高级内容。

文档地址:官方文档

Python解释器

Python是一门解释型语言,因为不需要编译和链接,可以在程序开发中节约宝贵的时间。

  • Python解释器

    在设备上安装好Python后就可以启动解释器了。打开终端,输入python3

    ps: 因为Mac默认安装Python2,所以需要使用Python3命令来启动。

  • 交互模式

    >>> :主提示符号
    ... : 从属提示符号

    解析器打印欢迎信息、版本号和授权提示。

    1
    2
    3
    4
    ➜  ~ python3
    Python 3.6.2 (default, Jul 27 2017, 13:31:44)
    [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.

    关于交互模式的更多信息请查看:交互模式

  • 源程序编码

    默认情况下,Python源文件是UTF-8编码。也可以指定不同的字符编码。

    # -*- coding: encoding -*-

Python简介

基本数据

  • 数字

    // : floor除法: 得到整数结果丢掉小数部分。

    ** : 计算幂乘方

  • 字符串

    可以用单引号和双引号标识。\用来转义。

    字符串文本分成多行。使用: """..."""'''...'''

    字符串可以被检索。索引值可以是整数也可以是负数。整数从左向右检索,负数从右向左检索。

    除了检索还是切片

    内置的len()返回字符串长度。

  • 列表

    列表类似于数组,但是列表元素不必是同一类型

    列表支持切片操作

    列表可以修改元素值

    内置len()返回列表长度

    使用append()末尾添加元素

其他内容后面深入讲解。

流程控制

  • if

    elif配合使用,elif可以是零个或多个,else是可选的。

  • for

    Python的for语句依据任意序列中国的子项,按它们的序列中的顺序来进行迭代。注意迭代过程中修改迭代序列不安全。

  • range(a, b, c)

    生成数值序列。a:起始值;b:终点不包含;c:步长。

  • break & continue

    和C语言相似。

  • pass

    什么都不做,用于那些语法上需要的情况。

函数

  • 函数定义

    关键字def引入函数定义。例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> def fib(n):
    ... """Print a Fibonacci series up to n."""
    ... a, b = 0, 1
    ... while a < n:
    ... print(a)
    ... a, b = b, a + b
    ... print()
    ...
    >>> fib(20)

    缩进很重要,Python通过缩进来判断语句的。

    docstring: 文档注释。可以使用工具自动生成文档。希望形成注释的习惯。

  • Lambda 函数

    使用lambda关键字,可以创建短小的匿名函数。

  • 函数参数

    Python中参数类型:必要参数、可选参数和关键字参数

数据结构

列表方法

在基本数据中提到列表,这里补充其他的方法:

方法 说明
list.append(x) 把元素添加到列表末尾
list.extend(L) 将给定的列表L所有元素都添加到另一个列表中
list.insert(i, x) 在第i个元素前插入元素x
list.remove(x) 移除值为x的元素
list.pop([i]) 从指定位置删除元素,并返回
list.clear() 删除所有元素
list.index(x) 返回第一个值为x的元素索引
list.count(x) 返回x在列表中出现的次数
list.sort() 对元素排序
list.reverse() 翻转列表
list.copy() 返回列表的一个拷贝

列表可以当做栈和队列使用

列表推导式

列表推导式由包含一个表达式的括号组成,表达式后面跟随一个 for 子句,之后可以有零或多个 for 或 if 子句
例如:

1
2
squares = [x ** 2 for x in range(10)]

del语句

从列表中删除给定的索引项,他不同于有返回值的pop()。del还可以从列表中删除切片或清空整个列表。

1
2
3
4
5
6
7
8
9
10
11
>>> a = [1, 2, 3, 4, 5, 6]
>>> del a[0] # 删除第一个元素
>>> a
[2, 3, 4, 5, 6]
>>> del a[2:4] # 删除2-4元素
>>> a
[2, 3, 6]
>>> del a[:] #删除所有元素
>>> a
[]
>>> del a # 删除整个变量,需要重新赋值才能使用

元组和序列

前面字符串和列表都是序列类型。下面另一个标准序列类型:元组。一个元组有数个逗号分隔值组成。

🌰:

1
2
3
4
5
>>>t = 123, 5432, 'Hello!'
>>> t[0]
123
>>> t
(123, 5432, 'Hello!')

注意: 元组是可以嵌套的,元组不可变,但是元组可以包含可变对象。

集合

Python还包含了一个数据类型:set(集合)。集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。支持 union, intersetction, difference sysmmetric difference等数学运算。

注意:创建空集合使用set(),而不是{}。因为{}用来创建空字典。

字典

字典是以关键字为索引,关键字是任意不可变类型,通常用字符串或数值。

使用用del来删除键。

使用In关键字来检查字典中是否存在某个关键字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> tel = {'jack': 123, 'sape': 321} # 定义一个字典
>>> tel
{'jack': 123, 'sape': 321}
>>> del tel['jack'] # 删除‘jack'项
>>> tel
{'sape': 321}
>>> tel['irv'] = 345 # 添加’irv'项
>>> tel
{'sape': 321, 'irv': 345}
>>> list(tel.keys()) # 所有键值
['sape', 'irv']
>>> sorted(tel.keys()) # 对键值排序
['irv', 'sape']
>>> 'guido' in tel # 判断’guido‘是否为键值
False
>>> 'irv' in tel
True

dic()构造函数可以从键值对中创建字典。

1
2
3
4
>>> dict([('sape', 123), ('guido', 321), ('jack', 543)])
{'sape': 123, 'guido': 321, 'jack': 543}
>>> dict(sape = 123, guido = 234, jack = 543)
{'sape': 123, 'guido': 234, 'jack': 543}

字典推导式可以从任意的键值表达式中创建字典。

1
2
>>> {x: x ** 2 for x in (2, 3, 6)}
{2: 4, 3: 9, 6: 36}

循环技巧

字典循环中使用items()将键和值同时读取出来。

1
2
3
4
5
6
7
8
9
# items() 获取键和值
# k 代表键
# v 代表值
>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
... print(k, v)
...
gallahad the pure
robin the brave

序列循环时,索引位置和对应值可以使用enumerate()函数同时得到。

1
2
3
4
5
6
7
8
# i 代表索引
# v 代表值
>>> for i, v in enumerate(['tic', 'tac', 'toe']):
... print(i, v)
...
0 tic
1 tac
2 toe

同时循环两个或更多序列,可以使用zip()整体打包

1
2
3
4
5
6
7
8
9
>>> question = ['name', 'quest', 'favorite color']
>>> answer = ['lancelot', 'the holy grall', 'blue']
>>> for q, a in zip(question, answer):
... print('{0} - {1}'.format(q, a))
...
name - lancelot
quest - the holy grall
favorite color - blue
>>>

需要逆向循环序列,先正向定位序列,在调用reversed()函数

要按排序后的顺序循环序列,使用sorted()函数,不会改动原序列,而是生成新的。

若要在循环内部修改正在遍历的序列,需要首先创建副本。切片表示法尤为方便。

小结

本节学习了Python3基础知识,如果有其他语言编程基础的小伙伴,简单了解下不同点就可以学会。

参考

官方文档

廖雪峰Python3