大家好,欢迎来到IT知识分享网。
变量与数据类型
- 1 概述
- 2 变量
- 3 数据类型
- 3.1 数值类型
- 3.2 字符串类型
- 3.3 序列类型
- 3.3.1 列表类型
- 3.3.2 元组
- 3.3.3 range
- 3.4 映射类型
- 3.5 集合类型
- 3.6 布尔类型
- 3.7 二进制类型
- 3.7.1 bytes(字节串)
- 3.7.2 bytearray(字节数组)
- 3.7.3 memoryview(内存视图)
- 3.8 NoneType类型
- 4 总结
大家好,我是欧阳方超,公众号同名。

1 概述
介绍变量与基本数据类型,包括变量的动态类型特性、数值类型、字符串类型、序列类型(列表、元组、range)、映射类型(字典)、集合类型(set、frozenset)、布尔类型以及二进制类型(bytes、bytearray、memoryview)。同时结合简单示例,说明了NoneType类型的特点和典型用法。
2 变量
Python中变量不需要声明,也没提供声明变量的语法,变量在首次向它赋值时会被创建。
a = 10
在为变量赋值时,也不用声明变量的类型,甚至在为某个变量赋值后,还可以将其他类型的数据再次赋值给这个变量,因此Python是一种动态类型的语言,它的变量本身不绑定固定的数据类型。
b = 10 b = "Peter"
Python中一切皆对象,因此变量指向的是内存中的某个对象,而这个对象才有类型。
a = 90 b = a # id()函数可以查看对象标识 print(id(a)) print(id(b))
上面的例子,首先创建了对象90,然后a引用了这个对象,接着b也引用了这个对象,通过下面两个输出语句,可以发现它们输出相同的内容,因为它们引用了共同的对象90。
3 数据类型
Python中的内置数据类型如下。
3.1 数值类型
数值类型包括int、float、complex,即整数、浮点数、复数三种,
a = 10 b = 1.09 c = 1 + 4j print(type(a)) print(type(b)) print(type(c))
type()函数可以查看变量所引用对象的类型,因此上面程序的输出为:
<class 'int'> <class 'float'> <class 'complex'>
3.2 字符串类型
Python中的字符串类型为str,
a = "10" print(type(a))
上面程序的输出为
<class 'str'>
3.3 序列类型
序列类型,sequence type,从英文的角度应该能看出这种类型所存储的数据是有顺序的,序列类型细分为list、tuple、range。
3.3.1 列表类型
list,即列表类型,可以用来存多个数据项,这些数据项是存放的,当新加元素时会被放在列表的末尾。
mylist = ["apple", "banana", "orange"] print(type(mylist)) print(mylist)
输出为:
<class 'list'> ['apple', 'banana', 'orange']
3.3.2 元组
tuple,称为元组,也是用于存多个数据项的有序序列。注意,元组是不可变的,一旦创建,元组的数据项不能被修改、增加、删除。
3.3.3 range
range,是range()函数返回的对象的类型,该对象是一个数字序列,这个序列可以转为list。
r = range(10) print(type(r)) print(list(r))
上面程序的输出为:
<class 'range'> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3.4 映射类型
Python中的映射类型是dict,也称为字典,它是存储键值对的一种结构,字典中键和值用逗号分隔,键值对之间用逗号分隔,字典整体放在大括号中。键必须是唯一的,否则会被覆盖,但值不必。
mydict = {"name":"Peter", "address":"Test Road"} print(type(mydict)) print(mydict)
输出如下:
<class 'dict'> {'name': 'Peter', 'address': 'Test Road'}
上面的例子展示了,创建一个字段并输出里面的内容的过程。
3.5 集合类型
集合是用于存放数据项的一种容器,它有两个特点,无序、不允许重复。可以通过将数据项放到大括号中并且用逗号分隔来创建集合。集合分两种:set、frozenset。
#整数集合 myintset = {1, 3, 4} #混合类型的集合 myset = {1, "test", (1, 3, 4)} print(myintset) print(myset)
输入结果:
{1, 3, 4} <class 'set'> {1, 'test', (1, 3, 4)} <class 'set'>
frozenset是具有set特征的新类,一旦创建就不能更改其内的数据项:
fset = frozenset([1,2,3]) print(type(fset)) print(fset)
输出为:
<class 'frozenset'> frozenset({1, 2, 3})
3.6 布尔类型
布尔类型用于表示逻辑值:True、False,注意True、False是Python的关键字,首字母必须大写,在底层,True实际上是1,False是0,Python中其他类型的对象在布尔上下文中会被自动转换成布尔值:零、None、空序列(空字符串、空列表、空元组)、空字典等会被转换为 False,其他值默认为 True。使用内置函数 bool() 将任意值转换为布尔值,转换规则符合刚刚提到的真假判定。
简单示例:
a = True b = False print(a and b) print(a or b) print(not a) print(True + True) print(bool(0)) print(bool([1, 2, 3])) print(b)
输入结果:
False True False 2 False True False
3.7 二进制类型
Python中二进制类型主要有三种,bytes(字节串)、bytearray(字节数组)和memoryview(内存视图)。它们是用来处理非文本数据(图像、音频、视频文件等)时的重要数据类型。
3.7.1 bytes(字节串)
bytes表示字节的序列,是不可变类型,通过bytes()函数或在字符串前端加b前缀来定义。
b = b'hello' #直接用b''定义bytes print(b) print(b[1]) # b[1] = 90 #不能修改bytes,会报错
3.7.2 bytearray(字节数组)
bytearray表示可变的字节序列,可以修改数据项(元素),通过bytearray()函数创建字节数组。
ba = bytearray(b'hello') print(ba) ba[1] = 100 #修改第二个字节 print(ba) ba.append(33) #添加新的字节 print(ba)
上面程序的输出如下:
ytearray(b'hello') bytearray(b'hdllo') bytearray(b'hdllo!')
3.7.3 memoryview(内存视图)
memoryview提供对已有二进制数据的不同形式访问,不复制数据。
# 创建可变的bytearray对象 data = bytearray(b'hello world') # 创建memoryview对象,指向data内存 mv = memoryview(data) #输出第一个字节的整数值,104代表'h' print(mv[0]) # 修改memoryview中的数据,实际上修改的是底层bytearray mv[0] = 72 # 将'h'ASCII码104修改为'H'的ASCII码72 print(data) #输出修改后的bytearray内容:bytearray(b'Hello world')
上面程序的输出为:
104 bytearray(b'Hello world')
3.8 NoneType类型
NoneType是一个非常特殊且唯一的类型,它只有一个唯一的值——None。None通常用来表示无值或空值,常见于函数没有明确返回值时,或者变量在那时没有被赋值的情况。NoneType类型只有一个实例,即None,是Python中的单例对象,通常用于表示缺失值、未初始化值或特殊的空状态,与False、0、空字符串等都不同,它表示“什么都没有”的状态,判断变量是否为None时,推荐使用is运算符(例如variable is None),而不是==,因为None是单例,使用is判断更准确。
def find_item(items, target): for item in items: if item == target: return item # 未找到返回None return None result = find_item(['apple', 'banana'], 'orange') if result is None: print('未找到目标') else: print('找到目标项:', result)
4 总结
Python中的变量无需声明类型,类型随赋值动态确定。丰富的数据类型支持多样化的数据存储和操作,二进制类型适合处理非文本文件和数据流,NoneType表示缺失或无值状态。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/187797.html