Python

Python语言是一种解释型、面向对象、动态数据类型的高级程序设计语言,如今已成为绝大部分数据分析师的首选数据分析语言。其设计的核心理念是代码的易读性,以及允许编程者通过若干行代码轻松表达想法创意。

版本

本教程所有代码采用 Python3.6 进行编写,在 Python 可通过以下命令查看版本:

[1]:
import sys
sys.version
[1]:
'3.7.1 | packaged by conda-forge | (default, Feb 26 2019, 04:48:14) \n[GCC 7.3.0]'

在 Jupyter Notebook 中通过!python --version命令查看版本。

[2]:
!python --version
Python 3.7.1

语法

缩进

锁紧是表达代码间包含和层次关系的唯一手段,在 Python 中通过 4 个空格或 1 个 TAB 键来表示。

注释

注释是不被程序执行的辅助性说明信息。在 Python 中单注释分为单行和多行,单行注释以#开头,其后内容为注释;多行注释以'''开头和结尾,中间内容为注释。

[3]:
# 这是一个单行注释

'''
这是一个多行注释
这是一个多行注释
'''
print('注释')
注释

变量

变量是用来保存和表示数据的占位符号。在 Python 中通过等号=用向变量赋值或修改值。 变量名是大小写字母、数字、下划线_和汉字等字符的组合,对大小写敏感,首字母不能是数字,也不能与保留字相同。

[4]:
# 向变量x赋值为1
x = 1
print('x =',x)

# 修改变量x的赋值为2
x = 2
print('x =',x)
x = 1
x = 2

保留字

保留字是被编程语言内部定义并保留使用的标识符。在 Python 中有 33 个保留字,保留字是编程语言的基本单词,对大小写敏感。

and

as

assert

break

class

continue

def

elif

else

except

finally

for

from

if

import

in

is

lambda

not

or

pass

raise

return

try

while

with

yield

del

global

nonlocal

True

False

None

操作符

操作符是完成运算的一种符号体系

运算操作符

操作符

描述

x + y

加法运算

x - y

减法运算

x * y

乘法运算

x / y

除法运算

x // y

整除运算

x % y

取模(余数)运算

- y

负数运算

x ** y

幂运算,y 为小数时为开方运算

赋值操作符

操作符

描述

x += y

即 x = x + y

x -= y

即 x = x - y

x *= y

即 x = x * y

x /= y

即 x = x / y

x //= y

即 x = x // y

x %= y

即 x = x % y

x **= y

即 x = x ** y

比较运算符

比较运算结果为 True 或 False。

操作符

描述

==

等于

!=

不等于

<>

不等于,与 != 类似

>

大与

<

小于

>+

大于等于

<=

小于等于

数据类型

数据类型是供计算机程序理解的数据形式,在 Python 中数据类型被分为基本数据类型和复合数据类型。

  • 基本数据类型:包括整数、浮点数、复数、布尔数值和空值。

  • 复合数据类型:包括字符串、列表、元组、字典和集合。

整数 (int)

Python 中的整数与数学中整数的概念一致,可正可负,没有取值范围限制,在 Python 中有 4 种表达形式。

表达形式

格式

十进制

-100,0,100

二进制

以0b或0B开头:0b01,-0B01

八进制

以0o或0O开头:0o17,-0O17

十六进制

以0x或0X开头:0x0f, -0X0f

整数虽然有 4 种表达形式,但输出格式都是十进制。

[5]:
print("二进制数 0b01 的输出格式是:",0b01)
print("八进制数 0o17 的输出格式是:",0o17)
print("十六进制数 0x0f 的输出格式是:",0x0f)
二进制数 0b01 的输出格式是: 1
八进制数 0o17 的输出格式是: 15
十六进制数 0x0f 的输出格式是: 15

浮点数(float)

Python 中的浮点数与数学中实数的概念一致,指带有小数点及小数的数字。浮点数取值范围和小数精度都存在限制,但常规计算可忽略。取值范围数量级约\(-10^{308}\)\(10^{308}\),精度数量级\(10^{16}\)

在 Python 中浮点数有两种表达形式:一种用小数点+数字形式表示;一种用科学计数法表示,使用字母e或E作为幂的符号,以10为基数,\(<a>e<b>\)表示\(a*10^b\)

[6]:
print('浮点数 110e-3 值为:',110e-3)
print('浮点数 5.2E2 值为:',5.2E2)
浮点数 110e-3 值为: 0.11
浮点数 5.2E2 值为: 520.0

复数(plural)

Python 中的复数与数学中复数的概念一致,记 a+b*j 为复数,其中 a 是实部,b 是虚部。

[7]:
x = 1 + 2j
print('复数 1 + 2j 的实部是:', x.real)
print('复数 1 + 2j 的虚部是:', x.imag)
复数 1 + 2j 的实部是: 1.0
复数 1 + 2j 的虚部是: 2.0

布尔数值(bool)

Python 中的布尔数值与数学中布尔代数的概念一致,分为TrueFalse。利用布尔数值可进行逻辑运算。

[8]:
x = True
y = False

空值(None)

空值是 Python 中一种特殊的数据类型,用 None表示。None表示一个空对象,不能理解为0

[9]:
x = None
x == 0
[9]:
False

序列(sequence)

序列是具有先后关系的一组元素,各元素类型可以不同。元素间通过序号引导,通过下标访问序列的特定元素。字符串、列表和元组类型都属于序列类型。

序号分为两种:正向递增序号和正向递减序号,对应关系如下表:

正向递增序号

0

1

2

n-1

序列

1

2

3

n

反向递减序号

-n

-n+1

-n+2

-1

利用序号可以对序列进行索引和切片操作:

  • 索引指通过序号选取序列中特定元素的操作,通过sequence[index]使用;

  • 切片指从序列获取多个元素的操作,通过sequence[start_index:end_index:step]使用,start_index表示开始索引位置,默认为0end_index表示结束索引位置,默认为n-1step表示步长,默认为1。切片操作前闭后开,不包括sequence[end_index]

[10]:
x = [1, 2, 3, 4, 5]

print('x[1] = ',x[1])
print('x[-1] =',x[-1])
print('x[1:4:2] =',x[1:4:2])
print('x[::-1] =',x[::-1])
x[1] =  2
x[-1] = 5
x[1:4:2] = [2, 4]
x[::-1] = [5, 4, 3, 2, 1]

字符串、列表和元组类型作为序列的子类,都拥有序列的通用函数和方法:

函数和方法

描述

len(x)

返回序列 x 的长度

min(x)

返回序列 x 的最小元素

max(x)

返回序列 x 的最大元素

x.index(a)或x.index(a,i,j)

返回序列 x 从 i 开始到 j 位置中第一次出现元素 a 的位置

x.count(a)

返回序列 x 中出现元素 a 的总次数

字符串

字符串是由 0 个或多个字符组成的有序字符序列,由一对单引号''或一对双引号""表示。

[11]:
print('我是一个字符串')
print("我是另一个字符串")
print("'我还是一个字符串'")
我是一个字符串
我是另一个字符串
'我还是一个字符串'

如果现在字符串中输入一个单引号'或双引号",需要通过转义符\表达

[12]:
print('这是一个单引号(\')')
print('这是一个双引号(\")')

这是一个单引号(')
这是一个双引号(")

转义符和字母进行组合可以表达出一些字符串无法表达的含义

  • \b: 后退

  • \n: 换行,即光标移动到下行行首

  • \r: 回车,即贯标移动到本行行首

字符串继承序列类型的函数和方法,但也具有独有的函数和方法:

函数和方法

描述

str(x)

返回任意类型x所对应的字符串类型,如str(123) = "123"

hex(x) 或 oct(x)

返回整数x的十六进制或八进制小写形式字符串,如hex(425) = "0x1a9"

chr(x)

返回 Unicode 编码x对应的字符,如chr(1000) = 'Ϩ'

ord(x)

返回字符x对应的 Unicode 编码,如ord('Ϩ') = 1000

str.lower() 或 str.upper()

返回字符串的副本,全部字符小写/大写,如 'AbCd'.lower() = 'abcd'

str.split(sep=None)

返回一个列表,由str根据sep被分隔的部分组,如'a,b,c'.split(',') = ['a','b','c']

str.count(sub)

返回子串substr中出现的次数,如'abca'.count('a') = 2

str.replace(old, new)

返回字符串str副本,所有old子串被替换为new,如'abc'.replace('a', 'ab') = 'abbc'

列表(list)

列表是一种序列类型,创建后可以随意被修改。使用方括号[]list()创建,元素间用逗号,分隔。列表中各元素类型可以不同,无长度限制。

[13]:
x = ['abc', 123]
print(x)

y = list('123')
print(y)
['abc', 123]
['1', '2', '3']

列表继承序列类型的函数和方法,但也具有独有的函数和方法:

函数和方法

描述

list.append(x)

list最后增加一个元素x

list.clear()

删除list中所有元素

list.copy()

复制list,并生成一个新列表

list.inerst(i,x)

list的第i位置增加元素x

list.pop(i)

返回list中第i位置元素,并在list中删除该元素

list.remove(x)

删除list出现的第一个元素x

list.reverse()

颠倒list

元组(tuple)

元组是一种序列类型,一旦创建就不能被修。使用小括号()tuple()创建,元素间用逗号,分隔。可以使用或不使用小括号

[14]:
x = 'abc',123
x
[14]:
('abc', 123)

元组继承了序列类型的全部通用操作,因为创建后不能修改,因此没有特殊操作。

字典(dict)

字典是一种储存键值对的数据类型,键值对之间无序。通过大括号{}dict()创建,键值对用冒号:表示。在字典变量中,通过键获得值。

键(keys)可以看做索引的扩展,值(values)储存数据。

[15]:
x = {'a':1, 'b':2}
print('x =',x)
print("x['a'] =",x['a'])
x = {'a': 1, 'b': 2}
x['a'] = 1

字典类型操作函数和方法

函数和方法

描述

dict.keys()

返回dict中所有键信息

dict.values()

返回dict中所有值信息

dict.items()

返回dict中所有键值对信息

dict.get(k, x)

若键k存在,则返回对应的值,否则返回x

dict.pop(k, x)

若键k存在,则取出对应的值,否则返回x

dict.popitem()

dict随机取出一个键值对,以元组形式返回

dict.clear()

删除dict所有键值对

len(dict)

返回dice中元素个数

集合(set)

Python 的集合类型与数学中的集合概念一致,是多个元素的无序组合。元素与元素间无序,不存在相同元素。集合中的元素不可更改,不能使可变数据类型。

集合通过大括号{}set()创建,元素间用逗号,分割,创建空集合必须使用set()方法。

[16]:
x = {'a', 1, 10, 'a'}
x
[16]:
{1, 10, 'a'}

函数

函数(function)

函数是一段具有特定功能的、可重用的语句组,是一种功能的抽象。

在 Python 中通过def构建函数,格式如下:

def <函数名>(<参数(0或多个)>):
    <函数体>
    return <返回值>
[17]:
# 计算斐波那契数列
def f(n):
    if n==1:
        return 1
    elif n==2:
        return 1
    else:
        return f(n-1)+f(n-2)

# 第10个斐波那契数
f(10)
[17]:
55