本章节主要学习 Python
的变量,字符串和数字两种常规数据类型,以及空值和布尔值两种特殊数据类型,
Python中包含六种常规数据类型和两种种特殊数据类型。六种常规数据类型为字符串(String)
、数字(Number)
、列表(List)
、元祖(Tuple)
、集合(Set)
和字典(Dictionary)
,其中字符串、数字、元组是不可变类型,列表、集合、字典是可变类型。列表、元祖、集合和字典四种数据类型也称为容器,相对较为困难,下一章节再详细学习。两种特殊数据类型为空值(None)
和布尔值(Boolean)
。在学习数据类型之前先简单了解一下Python的变量。
1 Python变量
Python变量命名规则: - 变量名只能包含字母、数字和下划线; -
变量名可以以字母和下划线开头,但不能以数字开头; -
不要将Python中关键字 和函数名 用作变量名,即不要使用Python保留用于特殊用途的单词;
- 变量名应既简短又具有描述性; -
变量名应避免使用容易引起误解的符号,如小写字母l
(容易被误认为数字1
)、大写字母O
(容易被误认为数字0
)等。
上述规则第三条提到不要把Python关键字和函数名用作变量名。在Python中有许多关键字和内置函数,因此有必要了解这些关键字和内置函数。
Python自带了一个keyword
模块,可以用于查看和判断关键字。
1 2 import keywordkeyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
1 keyword.iskeyword('and' )
True
1 keyword.iskeyword('has' )
False
将内置函数名用作变量名时,不会导致错误,但会覆盖这些函数的行为。Python内置函数 较多,其用法以后再详解。
2 特殊数据类型
Python有两种特殊数据类型:空值(None) 和布尔值(bool) 。
👉 空值(None)
空值用None表示,但不能理解为数字0,因为0是有意义的,而None是一个特殊值。空值也可以用NaN
表示,在后续学习NumPy和Pandas处理数据时会被经常用到。
👉 布尔值(bool)
布尔值:一个布尔值只有真(True)
和假(Flase)
两种。在Python中,空值(None)、所有类型的数字0(包括浮点型,长整型和其他类型)、空序列(比如空字符串、元组和列表)以及空字典都默认为假。
Python内置函数中有一个bool()
函数,bool(x)
返回一个布尔值,True 或者 False。
1 2 3 4 print (bool (0 ))print (bool (1 ))print (bool ([]))bool (['This is a list' ])
False
True
False
True
3 数字
Python中数字类型包括整数(int)、浮点数(float)和复数(complex)三种。Python内置函数type()
可用来查询变量所指的对象类型。
3.1 整数
Python可以处理任意大小的整数,当然还包括负整数。在Python中对数字的赋值较为灵活。
1 2 3 num2 = num1 = 10 print (num1, num2)
1 2 3 num3, num4 = 9 , 10 print (num3, num4)
3.2 浮点数
浮点数由整数部分和小数部分组成。浮点数与浮点数之间的运算可能会有四舍五入的误差。整数和浮点数混合运算时,会默认把整数转化为浮点数。
1 2 3 f1 = 1.1 f2 = 2.2 print (f1 + f2)
3.3 复数
复数由实数和虚数两部分组成,表示为real+imag*j
或complex(real, imag)
,其中real,imag默认均为浮点数。
complex(real, imag)
返回值为 real +
imag*1j
的复数,或将字符串或数字转换为复数。imag为可选项,默认值为零。
3.4 一些数学常量
math库是Python的标准库之一,其中存储了一些常用的数学常量。
3.5 整数和浮点数之间的类型转换
整数和浮点数之间可以相互转换,但二者都无法和复数相互转换。
int(x, base)
返回一个使用数字或字符串
x 生成的整数对象。x 有两种类型 number 和 str。
👉 若 x 为纯数字,则不能有 base
参数,否则报错;其作用为对参数 x
取整。注意:浮点数转换为整数时向下取整,即只保留浮点数的整数部分,且不考虑四舍五入 。
1 2 print (int (2.1 ))print (int (2.9 ))
👉 若 x 为 str,则 base 可有可无。base 存在时,视 x 为
base 类型数字,并将其转换为 10 进制数字。若 x 不符合 base
规则,则报错。str需为整数。
round(number, ndigits)
在浮点数转换为整数时,如果需要考虑四舍五入,可使用Python内置函数round()
,该函数返回
number 舍入到小数点后 ndigits 位精度的值。 任何整数值都可作为有效的
ndigits (正数、零或负数)。如果 ndigits 被省略或为
None,则返回最接近输入值的整数。
在浮点数转换为整数时,如果需要向上取整或向下取整,可使用math
库中的ceil()
和floor()
函数:
math.ceil(x)
x 向上取整,即大于或者等于
x 的最小整数。
math.floor(x)
x 向下取整,小于或等于 x
的最大整数。
math库的floor()函数与Python内置函数int()
实现的效果一致,因此也可使用int()函数来实现向下取整。
1 2 3 print (math.ceil(3.6 ))print (math.floor(3.6 ))print (int (3.6 ))
float(x)
返回从数字或字符串 x
生成的浮点数。
4 字符串
字符串(str)就是一系列字符。在Python中,用引号括起来的都是字符串,其中的引号可以是单引号,也可以是双引号。
1 2 print ('This is a string.' )print ("This is also a string." )
This is a string.
This is also a string.
在打印字符串时可灵活混用双引号和单引号。
1 2 3 print ('I told my friend, "Python is my favorite language!"' )print ("The language 'Python' is named after Monty Python, not the snake." )print ("One of Python's strengths is its diverse and supportive community." )
I told my friend, "Python is my favorite language!"
The language 'Python' is named after Monty Python, not the snake.
One of Python's strengths is its diverse and supportive community.
在Python中可以对字符串进行一系列操作,也有一些内置函数或关键字可用于对字符串的简单操作或判断。
4.1 求字符串长度
Python内置函数len()
可求取字符串长度。需要注意的是,字符串中的空格也是一个字符。
1 2 str1 = 'Hello, world!' len (str1)
13
4.2 切片(slice)
切片操作公式 str[start:end:step]
。注意Python中默认起始为0而不是1,默认步长为1。
'el,wrd'
如果不指定起始、结尾和步长,则相当于截取原字符串全部的字符,即对原字符串进行复制,制作了一个副本,这种用法在对字符串进行操作而不想改变原字符串的情景下很实用。
1 2 str1_copy = str1[:] print (str1_copy)
Hello, world!
4.3 字符串的合并
1 2 3 str2 = 'Hello, Python!' all_str = str1 + ' ' + str2 print (all_str)
Hello, world! Hello, Python!
'Hello, world!Hello, world!Hello, world!'
使用'sep'.join(seq)
合并字符串
sep
:分隔符。分隔符可以自定义,常用的有,
、-
、\
等,也可以是空格' '
,但不能为空''
。
seq
:要连接的元素序列。此处注意seq是一个参数,合并时要把多个字符串放在一个列表或元组或字典中。
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串。
'Hello, world! Hello, Python!'
1 '-' .join(['h' , 'e' , 'l' , 'l' , 'o' ])
⚠
join
和+
对字符串的操作可以达到相同的效果,但二者性能并不相同,实际上,join
的性能要明显好于+
,因此在编写大型程序时,尽量使用join
,从而缩短程序运行时间。
4.4 字符串的分割
使用str.split(sep='',num=string.count(str))[n]
分割字符串
sep:分隔符。若字符串中没有分隔符,则把整个字符串作为列表的一个元素。
num:表示分割次数。如果存在参数num,则仅分隔成 num+1
个子字符串,并且每一个子字符串可以赋给新的变量。
[n]:表示选取第n个分片。
⚠
当使用空格作为分隔符时,对于中间为空的项会自动忽略。
['Hello,', 'world!']
['Hello', ' world!']
['abcdefg']
1 2 3 my_blog = 'www.iamzc.wang' my_blog.split('.' )
['www', 'iamzc', 'wang']
['www', 'iamzc.wang']
1 2 my_blog.split('.' , 1 )[1 ]
'iamzc.wang'
4.5 添加/删除空白
在Python中,空白泛指任何非打印字符,如空格、制表符(、换行符()等。可以使用空白来组织输出,使其更易读、美观。
1 2 3 4 print ('无空白:' + 'Python' )print ('换行符:' + '\nPython' )print ('制表符:' + '\tPython' )print ('换行符+制表符:' + '\n\tPython' )
无空白:Python
换行符:
Python
制表符: Python
换行符+制表符:
Python
在Python中,使用以下方法能够删除字符串多余的空白:
str.strip
:去掉字符串前后所有空格,内部空白不受影响
str.lstrip
:去掉字符串前部(左部)的所有空白
str.rstrip
:去掉字符串后部(右部)的所有空白
⚠
这种删除是暂时的,不改变变量,若需永久删除多余空白,需将删除后的结果存回变量中。
1 2 blank_str = ' Hello, world! '
'Hello, world!'
'Hello, world! '
' Hello, world!'
' Hello, world! '
1 2 3 blank_str = blank_str.strip() blank_str
'Hello, world!'
4.6 改变字母大小写
str.upper()
:字母全部大写
str.lower()
:字母全部小写
str.swapcase()
:大小写互换
str.title()
:首字母大写
1 2 3 4 5 my_name = 'wang ZHICHAO' print (my_name.upper())print (my_name.lower())print (my_name.swapcase())print (my_name.title())
WANG ZHICHAO
wang zhichao
WANG zhichao
Wang Zhichao
4.7 替换字符串
1 'Tom smiled, Tom cried, Tom shouted' .replace('Tom' ,'Jane' )
'Jane smiled, Jane cried, Jane shouted'
4.8 判断字符串内容是否相同
1 2 3 x = 'Hello world!' y = 'Hello world!' x == y
True
4.9
判断字符串中是否包含某个字符
False
True
4.10 判断字母数字
str.isalpha()
判断字符串是否全部由字母构成
str.isdigit()
判断字符串是否全部由数字构成
str.isalnum()
判断字符串是否仅包含字母和数字,而不含特殊字符
False
1 2 s = 'Helloworld' s.isalpha()
True
4.11 字符串排版
str.center()
字符串居中对齐
str.ljust()
字符串左对齐
str.lright()
字符串右对齐
5
'*******hello********'
'hello***************'
'***************hello'
字符串排版也可使用format()
传递参数完成任务
'*******hello********'
'hello***************'
'***************hello'
5 数字和字符串的合并
整数和浮点数也可以与字符串类型相互转换。在进行字符串与数字合并输出时,注意要保持类型一致。
1 2 3 4 age = 23 message = 'Happy ' + str (age) + 'rd Birthday!' print (message)
Happy 23rd Birthday!
6 格式化输出数字和字符串
format(value, format_spec)
将 value
转换为 format_spec 控制的“格式化”表示。用法:'string{}
string{}'.format(参数1,参数2)
1 2 "{} {}" .format ("hello" , 'world' )
'hello world'
1 2 "{1} {0} {1} {0}" .format ("hello" , "world" )
'world hello world hello'
1 2 3 alist = ['Jack' , 18 ] print ("My name is {}, I'm {} years old." .format (*alist))
My name is Jack, I'm 18 years old.
1 2 3 alist = [18 , 'Jack' ] print ("My name is {0[1]}, I'm {0[0]} years old." .format (alist))
My name is Jack, I'm 18 years old.
1 2 3 adict = {'name' : 'Jack' , 'age' : 18 } print ("My name is {name}, I'm {age} years old." .format (**adict))
My name is Jack, I'm 18 years old.
6.2 使用f-string
在Python3.6中新引入一种字符串格式化方法,f-string
,亦称为格式化字符串常量(formatted
string
literals)。主要目的是使格式化字符串的操作更加简便。f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。f-string在功能方面不逊于传统的%-formatting语句和str.format()函数,同时性能又优于二者,且使用起来也更加简洁明了,因此对于Python3.6及以后的版本,推荐使用f-string进行字符串格式化。
1 2 3 4 name = 'Jack' age = 20 print (f"My name is {name} , I'm {age} years old." )
My name is Jack, I'm 20 years old.
1 2 3 4 5 print (f"My name is {name.upper()} ." )print (f"I'll be {age + 30 } years old 30 years later." )
My name is JACK.
I'll be 48 years old 30 years later.
1 2 3 adict = {'name' : 'Jack' , 'age' : 18 } print (f"My name is {adict['name' ]} , I'm {adict['age' ]} years old." )
My name is Jack, I'm 18 years old.
使用 f-string
输出特定格式数字。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from math import piprint (f"{pi:.2 f} " ) print (f"{+pi:.2 f} " )print (f"{-pi:.2 f} " )print (f"{pi:.2 %} " )print (f"{pi*1000 :.2 e} " )
1 2 3 4 5 3.14 +3.14 -3.14 314.16% 3.14e+03