Python3 开发入门 —— 第二讲(基本数据类型和变量)

Python3 开发入门 —— 第一讲(输入、输出、代码注释)

数据类型

计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:

Python 基本的数据类型包括:

  • Numbers(数字)

  • String(字符串)

  • Boolean (布尔)

  • List(列表)

  • Tuple(元组)

  • Dictionary(字典)

  • None (空值)

Python 支持四种不同的数字类型:

  • int(有符号整型)

  • long(长整型[也可以代表八进制和十六进制])

  • float(浮点型)

  • complex(复数)

在计算机中,变量用于保存数据。我们用 = 进行变量赋值,左边是变量名称,右边是数 据对象。对于 x = 'Hello World',我们称将字符串’Hello World’ 赋值给了变量 x,也可以理解为变量 x 指向了该字符串。量变量在程序中用一个变量名表示了,变量名必须是大 小写英文、数字和 _ 的组合,且不能用数字开头。Python 中变量是没有类型的,变量指向的数据对象是有类型的。

>>> x=1
>>> type(x)
<class 'int'>
>>> y=1.0
>>> type(y)
<class 'float'>
>>> s="Hello"
>>> type(s)
<class 'str'>
>>> s=x+y
>>> type(s)
<class 'float'>
>>> print(x)
1
>>> print(y)
1.0
>>> print(s)
2.0
>>> b=s>x
>>> print(b)
True
>>> type(b)
<class 'bool'>
>>>

不同之间的类型可以通过内置函数进行转换,比如 int() 可将给定数据转为整形,float() 可转为浮点型,str() 可转为字符串。但是前提,是给定的数据可以转为该种类型,否则会报错。

一些数值类型的实例:

intlongfloatcomplex
1051924361L0.03.14j
100-0x19323L15.2045.j
-7860122L-21.99.322e-36j
0800xDEFABCECBDAECBFBAEl32.3e+18.876j
-0490535633629843L-90.-.6545+0J
-0x260-052318172735L-32.54e1003e+26J
0x69-4721885298529L70.2E-124.53e-7j

长整型也可以使用小写"L",但是还是建议您使用大写"L",避免与数字"1"混淆。Python使用"L"来显示长整型。

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


整数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1100-80800,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff000xa5b4c3d2,等等。

浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.233.14-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有TrueFalse两种值,要么是True,要么是False,在Python中,可以直接用TrueFalse表示布尔值(请注意大小写),也可以通过布尔运算计算出来:

>>> True
True
>>> False
False
>>> 3 > 2
True
>>> 3 > 5
False

布尔值可以用andornot运算。

and运算是与运算,只有所有都为Trueand运算结果才是True

>>> True and True
True
>>> True and False
False
>>> False and False
False
>>> 5 > 3 and 3 > 1
True

or运算是或运算,只要其中有一个为Trueor运算结果就是True

>>> True or True
True
>>> True or False
True
>>> False or False
False
>>> 5 > 3 or 1 > 3
True

not运算是非运算,它是一个单目运算符,把True变成FalseFalse变成True

>>> not True
False
>>> not False
True
>>> not 1 > 2
True

布尔值经常用在条件判断中,比如:

if age >= 18:
    print('adult')
else:
    print('teenager')

空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,我们后面会继续讲到。

字符串

字符串是以单引号'或双引号"括起来的任意文本,比如'abc'"xyz"等等。请注意,''""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有abc这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I'm,空格,OK这6个字符。

如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如:

'I\'m \"OK\"!'

表示的字符串内容是:

I'm "OK"!

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\,可以在Python的交互式命令行用print()打印字符串看看:

>>> print('I\'m ok.')
I'm ok.
>>> print('I\'m learning\nPython.')
I'm learning
Python.
>>> print('\\\n\\')
\
\

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义,可以自己试试:

>>> print('\\\t\\')
\       \
>>> print(r'\\\t\\')
\\\t\\

如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容,可以自己试试:

print('''line1
... line2
... line3''')

输出
line1
... line2
... line3

上面是在交互式命令行内输入,注意在输入多行内容时,提示符由>>>变为...,提示你可以接着上一行输入。如果写成程序,就是:

print('''line1
line2
line3''')

输出
line1
line2
line3

多行字符串'''...'''还可以在前面加上r使用,请自行测试。

List(列表)

List(列表) 是 Python 中使用最频繁的数据类型。

列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。

列表是写在方括号[ ]之间、用逗号分隔开的元素列表。

和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。

列表截取的语法格式:变量[头下标 : 尾下标]

索引值以 0 为开始值,-1 为从末尾的开始位置。

加号(+)是列表连接运算符,星号(*)是重复操作。

list = [ 'abcd', 786 , 2.23, '程序喵', 70.2 ]
tinylist = [123, '程序喵']
 
print(list)            # 输出完整列表
print(list[0])         # 输出列表第一个元素
print(list[1:3])       # 从第二个开始输出到第三个元素
print(list[2:])        # 输出从第三个元素开始的所有元素
print(tinylist * 2)    # 输出两次列表
print(list + tinylist) # 连接列表

输出
['abcd', 786, 2.23, '程序喵', 70.2]
abcd
[786, 2.23]
[2.23, '程序喵', 70.2]
[123, '程序喵', 123, '程序喵']
['abcd', 786, 2.23, '程序喵', 70.2, 123, '程序喵']

列表中的元素是可以改变的

>>> x=[1,2,3,4]
>>> x[1]
2
>>> x[1]="Anson"
>>> x[1]
'Anson'
>>> x
[1, 'Anson', 3, 4]
>>>

List内置了有很多方法,例如append()pop()等等,这在后面会讲到。

Python元组

元组是另一个数据类型,类似于List(列表)

元组用"()"标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表

示例

tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
tinytuple = (123, 'john')
 
print(tuple)                # 输出完整元组
print(tuple[0])             # 输出元组的第一个元素
print(tuple[1:3])           # 输出第二个至第三个的元素 
print(tuple[2:])            # 输出从第三个开始至列表末尾的所有元素
print(tinytuple * 2)        # 输出元组两次
print(tuple + tinytuple)    # 打印组合的元组

输出
('runoob', 786, 2.23, 'john', 70.2)
runoob
(786, 2.23)
(2.23, 'john', 70.2)
(123, 'john', 123, 'john')
('runoob', 786, 2.23, 'john', 70.2, 123, 'john')

Set(集合)

集合(set)是一个无序不重复元素的序列。

基本功能是进行成员关系测试和删除重复元素。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}

print(student)   # 输出集合,重复的元素被自动去掉

# 成员测试
if('Rose' in student) :
    print('Rose 在集合中')
else :
    print('Rose 不在集合中')

# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')

print("a:", a)
print("b:", b)
print("a和b的差集:", a - b)     # a和b的差集
print("a和b的并集:", a | b)     # a和b的并集
print("a和b的交集:", a & b)     # a和b的交集
print("a和b中不同时存在的元:", a ^ b)     # a和b中不同时存在的元

输出
{'Jim', 'Jack', 'Tom', 'Mary', 'Rose'}
Rose 在集合中
a: {'b', 'a', 'd', 'r', 'c'}
b: {'a', 'z', 'l', 'c', 'm'}
a和b的差集: {'b', 'r', 'd'}
a和b的并集: {'b', 'a', 'z', 'l', 'd', 'r', 'c', 'm'}
a和b的交集: {'a', 'c'}
a和b中不同时存在的元: {'r', 'b', 'm', 'z', 'l', 'd'}

Dictionary(字典)

字典(dictionary)是Python中另一个非常有用的内置数据类型。

列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取

字典是一种映射类型,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合

键(key)必须使用不可变类型。在同一个字典中,键(key)必须是唯一的。

dict = {}
dict['one'] = "程序喵"
dict[2]     = "chengxumiao"
 
tinydict = {'name': 'ibloger','code':1, 'site': 'www.ibloger.com'}
 
print(dict)
print(dict['one'])       # 输出键为 'one' 的值
print(dict[2])           # 输出键为 2 的值
print(tinydict)          # 输出完整的字典
print(tinydict.keys())   # 输出所有键
print(tinydict.values()) # 输出所有值

输出
{'one': '程序喵', 2: 'chengxumiao'}
程序喵
chengxumiao
{'name': 'ibloger', 'code': 1, 'site': 'www.ibloger.com'}
dict_keys(['name', 'code', 'site'])
dict_values(['ibloger', 1, 'www.ibloger.com'])

构造函数 dict() 可以直接从键值对序列中构建字典如下:

>>> dict([('Anson',1),('X-rapido',2),("Miao",3)])
{'Anson': 1, 'X-rapido': 2, 'Miao': 3}
>>> {x: x**2 for x in (2,4,6)}
{2: 4, 4: 16, 6: 36}
>>> dict(Anson=1,Rapido=2,Miao=3)
{'Anson': 1, 'Rapido': 2, 'Miao': 3}
>>>

另外,字典类型也有一些内置的函数,例如clear()keys()values()

注意:

1、字典是一种映射类型,它的元素是键值对

2、字典的关键字必须为不可变类型,且不能重复

3、创建空字典使用 { }

变量

变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。

变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,比如:

a = 1

变量a是一个整数。

t_007 = 'T007'

变量t_007是一个字符串。

Answer = True

变量Answer是一个布尔值True

在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如:

a = 123 # a是整数
print(a)
a = 'ABC' # a变为字符串
print(a)

这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下(// 表示注释):

int a = 123; // a是整数类型变量
a = "ABC"; // 错误:不能把字符串赋给整型变量

和静态语言相比,动态语言更灵活,就是这个原因。

请不要把赋值语句的等号等同于数学的等号。比如下面的代码:

x = 10x = x + 2

如果从数学上理解x = x + 2那无论如何是不成立的,在程序中,赋值语句先计算右侧的表达式x + 2,得到结果12,再赋给变量x。由于x之前的值是10,重新赋值后,x的值变成12

最后,理解变量在计算机内存中的表示也非常重要。当我们写:

a = 'ABC'

时,Python解释器干了两件事情:

  1. 在内存中创建了一个'ABC'的字符串;

  2. 在内存中创建了一个名为a的变量,并把它指向'ABC'

也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据,例如下面的代码:

a = 'ABC'b = a
a = 'XYZ'print(b)

最后一行打印出变量b的内容到底是'ABC'呢还是'XYZ'?如果从数学意义上理解,就会错误地得出ba相同,也应该是'XYZ',但实际上b的值是'ABC',让我们一行一行地执行代码,就可以看到到底发生了什么事:

执行a = 'ABC',解释器创建了字符串'ABC'和变量a,并把a指向'ABC'

py-var-code-1

执行b = a,解释器创建了变量b,并把b指向a指向的字符串'ABC'

py-var-code-2

执行a = 'XYZ',解释器创建了字符串'XYZ',并把a的指向改为'XYZ',但b并没有更改:

py-var-code-3

所以,最后打印变量b的结果自然是'ABC'了。

多个变量赋值

Python允许你同时为多个变量赋值。例如:

a = b = c = 1

以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。

您也可以为多个对象指定多个变量。例如:

a, b, c = 1, 2, "john"

以上实例,两个整型对象1和2的分配给变量 a 和 b,字符串对象 "john" 分配给变量 c。

常量

所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:

PI = 3.14159265359

但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量PI的值,也没人能拦住你。

del() 函数删除变量

del语句删除一些对象的引用。

del语句的语法是:del var1[,var2[,var3[....,varN]]]]

您可以通过使用del语句删除单个或多个对象的引用。例如:

del var
del var_a, var_b
>>> del a
>>> a
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    a
NameError: name 'a' is not defined
>>> a="Anson"
>>> a
'Anson'
>>> del a
>>> a
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    a
NameError: name 'a' is not defined
>>> x={"Anson","Miao"}
>>> x
{'Anson', 'Miao'}
>>> type(x)
<class 'set'>
>>> del x
>>> x
Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    x
NameError: name 'x' is not defined

Python数据类型转换

有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。

以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。

函数描述

int(x [,base])

将x转换为一个整数

float(x)

将x转换到一个浮点数

complex(real [,imag])

创建一个复数

str(x)

将对象 x 转换为字符串

repr(x)

将对象 x 转换为表达式字符串

eval(str)

用来计算在字符串中的有效Python表达式,并返回一个对象

tuple(s)

将序列 s 转换为一个元组

list(s)

将序列 s 转换为一个列表

set(s)

转换为可变集合

dict(d)

创建一个字典。d 必须是一个序列 (key,value)元组。

frozenset(s)

转换为不可变集合

chr(x)

将一个整数转换为一个字符

unichr(x)

将一个整数转换为Unicode字符

ord(x)

将一个字符转换为它的整数值

hex(x)

将一个整数转换为一个十六进制字符串

oct(x)

将一个整数转换为一个八进制字符串





未经允许请勿转载:程序喵 » Python3 开发入门 —— 第二讲(基本数据类型和变量)

点  赞 (1) 打  赏
分享到: