Python对象类型及相关操作

Python对象类型

Python使用对象模型来存储数据,其中的任何一个数据都是一个对象,对象的类型决定该数据的存储方式。Python有一系列内建的对象类型,开发人员也可以根据需求创建自定义的对象类型。
Python常用的内建对象类型有:数字(Number)、字符串(String)、列表(List)、元组(Tuple)、字典(Dictionary),称为基本对象类型。

对象操作函数

type(object) 返回对象类型

a='string'
type(a)
<class 'str'>
b=2
type(b)
<class 'int'>

dir(object) 返回对象的属性和方法列表

a=1
dir(a)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

help(object) 返回对象的帮助信息

id(object) 返回对象的id值,改值在对象生命周期中是唯一的

isinstance(object,classinfo) 如果对象是classinfo中的一个事例,则返回true,否则,返回false

a = 1
b = 2
c = isinstance(a, (int, ))
>>> true

注:Python程序中的变量不需要实现定义类型,它根据变量赋值的对象确定类型。变量赋值后,就具有相应类的属性和方法,在变量后面加点号(.)可以访问相应类的属性和方法。

1、数字类型

整型(int)、长整型(long)、浮点型(float)、复数型(complex)

其中,int、long、float与C语言中的表示规则相近,长整型后加l或L结尾,0x表示16进制,0o表示八进制,但浮点数相当于C语言中的双精度型,复数由“实部+虚部”组成,以一个j或J结束。

常用的算术运算符:

在这里插入图片描述

数字运算相关的内置函数:

在这里插入图片描述

math模块中的常用函数:

在这里插入图片描述

2、字符串

字符串是有序的字符集合,用于存储、表示基于文本的信息。

1.字符编码

encode 对字符串进行编码
decode 对字符串进行解码

a = '中'
a.encode(encoding='utf-8')
a.decode(encoding='utf-8')

在编码和解码的过程中,可以定义编码或解码采用的codec(编码解释器,类似查找表)。Python内置了很多codec,例如:ascii(英文字符编码)、gbk(简体汉字编码)、big5(繁体汉字编码)、utf_8(通用字符编码)

2.字符串表示

三种表示方式:
单引号
双引号
三引号
其中,三引号方式表示的字符串可以跨行。

3.转义字符串

在这里插入图片描述

4.字符串变量

Python利用%操作符来声明变量插入到的地方,%操作符后接一个类型转换符,定义插入变量的类型,例如:%s表示字符串,%d表示整数,%f表示浮点数等。字符串后面再加一个%操作符,后接对应变量值。
如:

print('The area of %s is %f sq km.' % ('shanghai', 6340))
输出结果为:The area of shanghai is 6340.000000 sq km.

%操作符和转换符之间可以定义长度及小数位,例如8.2表示长度为8,小数点后面2位。数字前加“-”,表示做对齐,不加则表示右对齐。
如:

print('The area of %s is %-8.2f sq km.' % ('shanghai', 6340))
输出结果为:The area of shanghai is 6340.00  sq km.

此外Python3.6后,新增格式化字符串,格式化字符串以“f”或“F”为前缀。
如:

city = "shanghai"
area = 6340
print(f'The area of {city} is {area} sq km.')
输出结果为:The area of shanghai is 6340 sq km.
5.字符串对象的主要方法

在这里插入图片描述

3、列表和元组

两者都是用于存储不同类型数据的容器,可以包含数字、字符串、列表等基本类型元素,也可以包含其他对象,如栅格数据。
列表和元组形式上的区别是列表用一对方括号表示,元组用一对圆括号表示。列表和元组功能上的区别在于列表是可变的,而元组是不可变的。

1.列表和元组的创建

列表创建方式:

# list_name = [element1, element2, element3, ...]
# 例:
L = ['abc', ['def', 'ghi']]

元组创建方式:

# tuple_name = (element1, element2, element3, ...)
#例:
T = (1, 'abc', ('def',))

注意:如果元组只有一个元素,该元素后面必须加逗号,如(1,),否则返回的只是元素的值而不是元组。

2.列表和元组的操作

列表和元组同字符串一样,具有序列类型数据的一些共性操作。
此外,因为列表是可变的序列类型,因此可以通过操作改变列表的值。
以下为改变列表值的主要操作:

s = ["a", "b", "c", "d", "e"]  # 定义一个列表
s[1] = "x"  # 将列表中索引为1的原始替换成x
s[0:2] = ["x", "y"]  # 将列表中索引号从0到1(2-1)的元素用列表["x", "y"]代替
s[0:6:2] = ["x", "y", "z"]  # 将列表中索引号从0到5(6-1)、步长为2 的元素用["x", "y", "z"]代替
del s[0:5:2]  # 删除列表中索引号0到4、步长为2的元素
s.append(["f"])  # 追加新元素
s.extend(["e", "f"])  # 连接一个新的列表
s.insert(1,"z")  # 在索引号为1的位置插入一个元素"z"
s.pop(1)  # 去除索引号为1的元素
s.remove("d")  # 去除值为"b"的元素

s = [3, 1, 4, 2]  # 定义一个列表
s.sort(key=None, reverse=True)  # ker定义元素的转换函数(提取比较键),reverse表示是否从大到小进行排序

4、字典

字典中的所有元素包含在一个花括号内,每个元素是一个键-值对,键和值之间用冒号连接。在字典中键是唯一的,且是不可变的类型,如数字、字符串或元组,与之相关联的值则没有限制,可以是数字、字符串、元组、列表、字典或其他python对象。

1.字典的创建
# d_name = {key1:value1,key2:value2,...}
# 例:
d = {1:123,2:"abcd","c":[123,456]}
d[2] = "ABC"  # 若键2存在则修改其对应的值,若不存在则添加一条新的映射
2.字典的方法

字典的主要方法如下:

# d_name = {key1:value1,key2:value2,...}
# 例:
s = {1: 1234}
d = {1: 123, 2: "abcd", "c": [123, 456]}
d.clear()  # 清空字典内容,返回None
a = d.copy()  # 复制字典d,并创建新的字典对象a
d.get(1)  # 返回键1所关联的值,若键1不存在则返回None
d.pop(1)  # 删除键1对应的元素,若键1不存在则抛出KeyError异常
d.keys()  # 返回字典所有键
d.values()  # 返回字典所有值
d.items()  # 返回字典的所有键和值
d.update(s)  # 用另一个字典的内容对当前字典进行更新

5、序列对象的操作

序列对象(字符串、列表、元组)是元素的有序集合。Python中提供一些序列操作符包括成员关系操作符、连接和重复操作符、索引和切片操作符。

1.成员关系操作符

成员关系操作符包括in和not in,用来判断一个元素是否包含在一个序列中。
常见的操作如下:

#  语法:element [not] in sequence
s = 'a' in 'abc'  # s的返回值为true
p = "b" in ["abc", "def"]  # p的返回值为False
v = 1 in {1: "abc", 2: "def"}  # 判断一个元素是否是字典的一个键,v返回值为True
["a", "b", "c", "c"].count("b")  # 统计序列中元素值为"b"的个数
2.连接和重复操作符

相关操作如下:

# 连接操作符语法:sequence1 + sequence2
a = "Hello"+" "+"world"  # a的返回值为Hello world
# 重复操作符语法:sequence1 * copies_int
b = "a" * 3  # b的返回值为aaa
3.索引和切片操作符

索引操作符相关用法说明如下:

# 索引操作符用于返回序列中的一个元素,语法:sequence[index]
c = "ABCDEFG"  # 定义一个字符串变量作为操作实例
q = c[2]  # (正索引值从左到右,最左位置对应的索引值为0)索引为2对应字符"C",q的值为C
t = c[-2]  # (负索引值从右到左,最右位置对应的索引值为-1)索引为-2对应的字符为"F",t的值为F
w = c.index("B")  # 序列的index(value)方法用于返回序列中元素值为value的元素索引号,w的值为1

切片操作符用法说明如下:

# 切片操作符用于返回序列中的多个元素,语法:sequence[starting_index:ending_index:step]
# 操作后得到的是从起始索引(默认0)到结束索引(默认n-1)之间的、步长为step(默认1)
a = "Hello World"
a0 = a[0:6:2]  # 返回值为Hlo
a1 = a[:5]  # 返回值为Hello
a2 = a[6:]  # 返回值为World
a3 = a[0:4]  # 返回值为Hell
a4 = a[::2]  # 返回值为HloWrd
a5 = a[::]  # 返回值为Hello World

对象使用中需注意的问题:

复制语句是复制对象的引用,而不是产生新的对象,也称浅复制。如创建一个变量并赋值给a,变量a又赋给变量b,变量a和变量b对应的是同一个对象(两个变量的id一致)。

a = [1, 2, 3, 4]
b = a
b[0] = 5
print(a)  # 返回值为[5, 2, 3, 4]

在这种多个变量引用同一个对象的情况下,改变一个变量的值会同时改变其他变量的值。因此,如果希望变量的值保持不变,应该使用不变对象(如使用元组而不是列表),这样可以使某些操作更加安全。
对可变对象,如要产生对象的备份,可使用copy方法进行深复制,深复制产生新的对象。

a = [1, 2, 3, 4]
b = a.copy()
b[0] = 5
print(a)  # 返回值为[1, 2, 3, 4]

本文图片大都源于网络,内容参考科学出版社《地理数据处理与分析》一书

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值