计算机程序需要能够处理各种数据,不管是数值、文本、图形、音频、视频、网页等等各种不同的数据类型。编程语言也都具备创建和操作数据的功能。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如果两个运算对象都是True | x and y |
or | 返回True如果其中一个运算对象是True | x 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}”)