计算机程序需要能够处理各种数据,不管是数值、文本、图形、音频、视频、网页等等各种不同的数据类型。编程语言也都具备创建和操作数据的功能。Python中有7个标准的数据类型:Bool(布尔)、Number(数字)、String(字符串)、Tuple(元组)、List(列表)、Set(集合)、Dictionary(字典)。

变量 Variable

每当我们创建一组数值的时候,计算机会为它分配一些指定的内存空间。而要寻找到内存地址,我们则需要一个导游,变量就是这么一个能帮助我们找到数值地址的导游。如果把计算机内存空间想象成是一个仓库,我们可以把变量理解是一组数值的标签,标签上记录着数据的具体货柜编号,通过标签上的指示,我们就能找到数据了。

在下面的代码中,我们用message变量指向了字符串“Hello!”,然后使用print函数打印出message,就会输出结果“Hello!”:

message = "Hello!"
print(message)

Python提供了很简便的语法特性,可以让我们在一行内同时为多个变量赋值:

str1, str2, str3 = "A", "B", "C"
print(str1 + str2 + str3) # ABC
x, y, z = 1, 2, 3
print(1 + 2 + 3) # 6
a = b = c = 1
print(a + b + c) # 3

在创建变量的时候,我们一定要注意下面的命名规则:
1. 变量名只能包含字母、数字和下划线 ( _ )
– 正确:hello_world_1
– 错误:$hello / *cool
2. 变量名中是不被允许有空格的,我们可以通过单词首字母大写或用下划线来分割不同的单词(推荐使用下划线)
– 正确:studentName / hello_world
– 错误:hello word
3. Python内置的函数和关键字不能被用作变量名的
– 正确: student
– 错误: print / class / def
4. 变量名最好简短并能有明确的意义
– 正确:student_name / class_grade
– 错误:sdf_23

小贴士:当我们使用变量名时,一定要注意拼写正确,以下的错误是很常见的:

message = 'Hello World!'
print(mesage)

知识补药:计算机在创建变量时会在内存中开辟一个空间,基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。一个变量可以通过赋值指向不同的对象。

不可变数据和可变数据

在Python标准的6个基本数据类型中,Number、String、Tuple是不可变数据,其余3个都是可变数据。那到底什么是不可变数据呢,我们先来看以下的这段代码:

x = 1 
print(id(x)) # 10968800
y = 1 
print(id(y)) # 10968800
x = 2
print(id(x)) # 10968832
y = 2
print(id(y)) # 10968832

上面的程序是对不可变数据类型int的操作,函数id可以查看当前变量的地址指。可以看到变量x,y一开始都指向同一个对象1,但我们让x和y指向2的时候,虽然变量名是一样的,但是地址却发生变化了。所以我们可以把不可变数据理解为:变量x引用的地址处的值是不能改变的,若要改变,只能在新的地址上创建新对象,然后让变量x指向新的地址。

布尔类型 Bool

布尔类型既True和False。

字符串的很多函数都会返回布尔函数:

string = "Hello Word"
print(string.isalnum()) # 查看是否所有字符都是数字 -> False
print(string.isalpha()) 
print(string.isupper()) # Check if string contains upper case

布尔数值的操作:

True and False # False
True and True # True
False and True # False
False or True # True
False and False # False
True ^ False # True
True ^ True # False

数字 Number

Python3中数字有4种类型:int(整数)、long(长整数)、float(浮点数)、complex(复数)。我们可以使用内置的type函数来查看变量所指的对象类型:

a, b, c, d = True, 20, 5.5, 4+3j
print(type(a), type(b), type(c), type(d))
# <class 'bool'> <class 'int'> <class 'float'> <class 'complex'>

整数可以使用十六进制和八进制来表示:

number = 0xA0F # 十六进制
print(number) # 2575
number = 0o37 # 八进制
print(number) # 31

数字运算操作类型:+(加法),-(减法),*(乘法),/(除法),%(取余),**(乘方)

print(2 + 2) # 加法
print(3 - 2) # 减法
print(2 * 3) # 乘法
print(3 / 2) # 除法, 得到一个浮点数
print(2 // 4) # 除法, 得到一个整数
print(3 % 2) # 取余
print(3 ** 2) # 乘方

任何带有小数点的数字都是浮点数,当我们把浮点数和整数混合的时候,我们会得到一个浮点数。
我们也可以在

0.1 + 0.1 # 0.2
2 * 0.2 # 3 * 0.1
3 * 0.1 # 0.30000...4 

python默认的是17位小数的精度,前16位是准确的,第17位开始不准确

复数(complex)是由实数部分和虚数部分构成的,可以用a + bj或者complex(a, b)表示,复数的实部a和虚部b都是浮点数。

除了数字的基本操作之外,我们也需要注意数字的命名规则:

universe_age = 14_000_000_000 # 在数字中使用下划线可以让很长的数字易读性更强
MAX_CONNECTIONS = 5000 # 恒定的数字需要全部大写

字符串 String

字符串是由一系列的字符组成的,是由单引号 ‘ 或双引号 ” 括起来的,同时使用反斜杠 \ 转义特殊字符。

str1 = 'This is a string.'
str2 = "This is also a string."

双引号和单引号的自由转换,可以让你在引号中套用引号更方便:

str1 = 'I told my friend, "Python is my favorite language!"'
str2 = "The language 'Python' is named after Montry Python, not the snake."

我们可以在字符串中带入变量,只要在开头引号前加f就可以了 (f代表format)

first_name = "Enoch"
last_name = "Zheng"
full_name = f"{first_name} {last_name}" # Enoch Zheng
full_name2 = f"{first_name.upper()} {last_name.upper()}" # ENOCH ZHENG

字符”\”可以转义很多特殊符号,不如\n表示换行,\t表示制表符,字符\本身也需要转义,所以\\表示的字符就是\

print("I\'m ok.") # I'm ok.
print("I\'m learning\nPython.")
"""
I'm learning
Python.
"""

字符串需要注意的事项:为了避免字符串里为了实现转义,需要加很多的\,Python允许你在字符串的开头加入r,让引号的内部字符串不转义

print(r"\\\\t\\") # \\\t\\
print('One of Python's strengths is its diverse community.') # Error
print('One of Python\'s strengths is its diverse community.') # Works fine

字符串的操作和函数

字符串的连接符和内置操作:加号(+)是字符串的连接符,星号(*)用来复制字符串,请看下面代码:

str = 'TuringPlanet'
 
print (str)          # 输出字符串 -> TuringPlanet
print (str + "ENOCH") # 连接字符串 -> TuringPlanetEnoch
print (str * 2)      # 输出字符串两次 -> TuringPlanetTuringPlanet 
print (str[0:-1])    # 输出第一个到倒数第二个的所有字符 -> TuringPlane
print (str[0])       # 输出字符串第一个字符 -> T
print (str[2:5])     # 输出从第三个开始到第五个的字符 -> rin
print (str[2:])      # 输出从第三个开始的后的所有字符 -> ringPlanet

有用的字符串函数:

name = "Hello World"
print(name.title()) # Hello World
print(name.upper()) # HELLO WORLD
print(name.lower()) # hello world
str1 = "    Hello"
str2 = "  World"
# 用来消除空格的函数
print(str1.strip() + str2.strip()) # HelloWorld

字符串格式化

Python支持格式化字符串的输出,这有助于我们编写复杂的字符串:

print("%s was born in %d." % ('Python', 1991))
print("{} was born in {}.".format('Python', 1991))
message = "{} was born in {}"
print(message.format('Python', 1991))
lan = 'Python'
year = 1991
print(f"{lan} was born in {year}.")

常用运算符和函数参照表

算数运算符 Arithmetic operatiors

运算符意义例子
+加 – 两个对象相加x + y
+2
减 – 得到负数或是一个数减去另一个数x – y
-2
*乘 – 两个数相乘或是返回一个被重复若干次的字符串x * y
/除 – 左边的对象除以右边的对象x / y
% 取模 – 返回除法的余数x % y
//取整除 – 返回商的整数部分 (向下取整)x // y
**幂 – 返回x的y此幂x ** y

逻辑运算符 Logical Operators

运算符意义例子
and返回True如果两个运算对象都是Truex and y
or返回True如果其中一个运算对象是Truex or y
not返回True如果运算对象是False (运算数的对立)not x

比较运算符 Comparison operators

运算符意义例子
>返回True如果左边的运算数大于右边运算数x > y
<返回True如果左边的运算数小于右边运算数x < y
==返回True如果两个运算数相等x == y
!=返回True如果两个运算数不等x != y
>=返回True如果左边运算数大于等于右边运算数x >= y
<=返回True如果左边运算数小于等于右边运算数x <= y

数学函数

函数返回值 ( 描述 )
abs(x)返回数字的绝对值,如abs(-10) 返回 10
ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5
exp(x)返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x)返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x)返回数字的下舍整数,如math.floor(4.9)返回 4
log(x)如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x)返回以10为基数的x的对数,如math.log10(100)返回 2.0
max(x1, x2,…)返回给定参数的最大值,参数可以为序列。
min(x1, x2,…)返回给定参数的最小值,参数可以为序列。
modf(x)返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y)x**y 运算后的值。
round(x [,n])返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
sqrt(x)返回数字x的平方根。

课后练习

分别把字符串“Python”,数字1991赋于不同的变量,然后用格式化的方法打印出“Python诞生于1991″

str = 'Python'
year = 1991
print(f”{str}诞生于{year}”)