python编程--不可变数据类型

论坛 期权论坛 期权     
Binary笔记   2019-6-30 05:53   2017   0
    什么是不可变数据类型?
    数据类型是指一种数据的组织形式,也就是我们所说的类或者说对象。我们已经知道在Python里“一切皆为对象,没有赋值只有引用”,数据类型的不可变,是指我们不能改变对象的值,如果我们想改变它只能创建一个新的对象然后引用这个新对象。举个例子,int(整数)是不可变的数据类型,我们进行如下操作
  1. a = 1          #创建一个 int 对象 a
复制代码
  1. print(id(a))   #打印 a 的地址
复制代码
  1. a += 1         #改变 a 的值
复制代码
  1. print(id(a))   #打印 a 的地址
复制代码
我们会发现两次的地址变化了,这就是不可变数据类型的特点(注:整数类型只有-5---256会这样)
    Python内置的不可变数据类型有哪些?
    不可变数据类型有三类:数值、字符串以及元组。

数值。数值类型主要有三类
  • int。整数类型,它的创建方式如下
  1. a = 1      
复制代码
  1. a = int(1)     #创建一个 int 类的对象,值为 1
复制代码
  1. a = int('12')  #将字符串类型转换为整数类型
复制代码
  1. a = int(3.14)  #将浮点类型用截断的方式转换为整数类型
复制代码
我们输入如下代码查看它的属性及方法
  1. dir(a)
复制代码
得到的部分结果如下图


    我们这里关注它的常用操作
  1. a = 123
复制代码
  1. a.bit_length()    #返回a的二进制表示的长度
复制代码
  1. a.conjugate()     #返回a的共轭数
复制代码
  1. a.real            #返回a的实部
复制代码
  1. a.imag            #返回a的虚部
复制代码
  1. a.numerator       #返回a的分子
复制代码
  1. a.denominator     #返回a的分母
复制代码
  • float。浮点数类型,它的创建方式如下
  1. a = 3.14
复制代码
  1. a = float(3.14)
复制代码
查看它的属性及方法如下


    除去与整数一样的那些常用操作外,还有如下操作
  1. a = 3.14
复制代码
  1. a.as_integer_ratio()  #返回一个整数对,第一个整数除以第二个整数等于这个浮点数
复制代码
  1. a.hex()               #返回它的十六进制表示
复制代码
  1. a.is_integer()        #判断它是否为整数
复制代码
  • complex。复数类型,创建方式如下
  1. a = complex(1, 2)
复制代码
  1. a = (1 + 2j)
复制代码
   常用操作的功能主要有求共轭、实部、虚部值,操作与int和float一样
  • bool。这是一个比较特殊的数据类型,创建方式如下
  1. a = True
复制代码
  1. b = bool(False)
复制代码
  1. c = None
复制代码
   由于它把除0、0.0、None、False、空的容器比如[]、{}、()、set()、range(0)以外的值都当作真,所以其基本操作除数值的一些基本操作以外主要是位级运算
  1. x | y   #或
复制代码
  1. x ^ y   #异或
复制代码
  1. x & y   #与
复制代码
  1. x > n  #右移
复制代码
  1. ~x      #位取反
复制代码

   
string。字符串类型,创建方式如下
  1. a = "hello"
复制代码
  1. a = str("hello")
复制代码
  1. a = str(3.14)    #将数值型转换为字符串
复制代码
   我们查看它的属性和方法结果如图

部分功能介绍如下
  1. n = "abcdee"
复制代码
  1. n[0:3]
复制代码
  1. n[:-1]         #字符串切片
复制代码
  1. n[::-1]        #字符串反转
复制代码
  1. #*****Regula Function******#
复制代码
  1. n.capitalize()#返回首字母大写的字符串  output : "Acdee"
复制代码
  1. n.casefold()#返回小写字母 output : "abcdee"  注:lower() 只对 ASCII 也就是'A-Z'有效
复制代码
  1. n.center(10,'*')#返回一个以字符串为中心,两边填充至指定宽度的字符串 output : '**abcdee**'
复制代码
  1. n.count('ab')#返回指定字符或字符串在字符串中出现的次数 output : 1
复制代码
  1. n.encode(encoding='UTF-8',errors='strict')#返回编码后的字符串
复制代码
  1. n.endswith('e')#判断是否以指定元素结尾   ouput : True
复制代码
  1. n.expandtabs(tabsize = 1)#指定转换字符串中的 tab 符号('\t')转为空格的字符数
复制代码
  1. n.find('e')#返回第一次出现该元素的位置  outpu : 4  未找到时返回-1
复制代码
  1. n.format()
复制代码
  1.    #"{}:计算机{}的CPU 占用率为{}%。".format("2016-12-31","PYTHON",10)
复制代码
  1.    #Out: '2016-12-31:计算机PYTHON的CPU 占用率为10%。'
复制代码
  1. n.format_map(mapping)
复制代码
  1. n.index(str,beg=0,end=len(string))#同find函数,区别是元素不在字符串指定范围内时会抛出异常
复制代码
  1. n.isalnum()#如果字符串中的所有字符都是字母数字且至少有一个字符,则返回true
复制代码
  1. n.isalpha()#如果字符串至少有一个字符并且所有字符都是字母则返回True
复制代码
  1. n.isdecimal()#如果字符串中的所有字符都是十进制字符,并且至少有一个字符,则返回true。
复制代码
  1. n.isdigit()#如果字符串中的所有字符都是数字并且至少有一个字符,则返回true
复制代码
  1. n.isidentifier()#如果字符串是符合语言定义的有效标识符,则返回true.
复制代码
  1. n.islower()#如果字符串中的所有cased字符都是小写字母,并且至少有一个cased字符,则返回true
复制代码
  1. n.isnumeric()#如果字符串中的所有字符都是数字字符,并且至少有一个字符,则返回true
复制代码
  1. n.isprintable()#如果字符串中的所有字符都可打印或字符串为空,则返回true
复制代码
  1. n.isspace()#如果字符串中只有空格字符,并且至少有一个字符,则返回true
复制代码
  1. n.istitle()#如果字符串是一个标题字符串,并且至少有一个字符,则返回true
复制代码
  1. n.isupper()#如果字符串中的所有cased字符都是大写且至少有一个cased字符,则返回true
复制代码
  1. '_'.join(n)#返回一个字符串,它是iterable中字符串的串联。输出为a_b_c_d_e_e
复制代码
  1. n.ljust(width[, fillchar])#左对齐后面填充
复制代码
  1. n.lower()#返回字符串的一个副本,并将所有字符转换为小写字母。
复制代码
  1. n.lstrip([chars])#返回删除前导字符的字符串的副本  一般默认删除空格
复制代码
  1. n.maketrans(x[, y[, z]])#这个静态方法返回一个可用于str.translate()的转换表
复制代码
  1. n.partition(str)#在sep的第一个出现处拆分字符串,并返回包含分隔符之前的部分,分隔符本身和分隔符之后的部分的三元组。
复制代码
  1. n.replace(old, new[, count])#返回所有出现的子字符串old替换为new的字符串的副本。如果给出可选参数count,则只会替换count`次数
复制代码
  1. n.rfind(sub[, start[, end]])#返回找到substring sub的字符串中的最高索引
复制代码
  1. n.rindex()#和rfind()一样,但是在找不到子字符串sub时引发ValueError
复制代码
  1. n.rjust(width[, fillchar])#返回字符串右对齐的长度为width的字符串
复制代码
  1. n.rpartition(str)#在sep的最后出现处拆分字符串,并返回包含分隔符之前的部分,分隔符本身和分隔符之后的部分的三元组
复制代码
  1. n.rsplit(sep=None, maxsplit=-1)#返回字符串中的单词列表,使用sep作为分隔符字符串。如果给出maxsplit,最多分割maxsplit次,此方法从最右边开始分割。
复制代码
  1. n.rstrip([chars])#返回删除了尾随字符的字符串的副本。chars参数是一个字符串,指定要删除的字符集
复制代码
  1. n.split(sep=None, maxsplit=-1)#返回字符串中的单词列表,使用sep作为分隔符字符串。如果给出maxsplit,最多分割maxsplit次
复制代码
  1. n.splitlines([keepends])#返回字符串中lines的列表,在lines边界处突破
复制代码
  1. n.startswith(prefix[, start[, end]])#如果字符串以prefix开头,则返回True,否则返回False
复制代码
  1. n.strip([chars])#返回删除前导字符和尾随字符的字符串副本。默认空格
复制代码
  1. n.swapcase()#返回大写字符转换为小写字符串的副本,反之亦然。
复制代码
  1. n.title()#返回字符串的字幕版本,其中字以大写字符开头,其余字符为小写字母。
复制代码
  1. n.translate(table)#通过给定的转换表返回每个字符已映射的字符串的副本
复制代码
  1. n.upper()#返回字符串的所有字符转换为大写的副本
复制代码
  1. n.zfill(width)#返回一个左边填充了ASCII0数字的字符串的副本,以产生一个长度为width的字符串。
复制代码
   注:字符串是不可变数据类型,所以不能用索引s[2] = 's'去改变其中的值,可以用分片的方法s[:2] + 's' + s[3:]
   
tuple。元组是一个元素集合,它的创建方式如下
  1. a = (1,)
复制代码
  1. a = (1, 'a')
复制代码
  1. #将可迭代类型转换为元组
复制代码
  1. a = tuple("hello")    #将字符串类型转换为元组
复制代码
  1. a = tuple([1,2,3])    #将列表类型转换为元组
复制代码
  1. a = tuple({1,2,3})    #将集合类型转换为元组
复制代码
  1. a = tuple({1:2})      #将字典类型的键转换为元组
复制代码
   元组的主要操作是计数和索引,不允许修改值但是可以组合
  1. a = (1, 'b', "hello")
复制代码
  1. a.count(1)    #返回 a 中 1 的个数
复制代码
  1. a.index('b')  #返回 a 中 'b' 第一次出现的索引
复制代码
  1. a[:2]         #返回 a 中的前两个元素
复制代码
  1. b = (2, 'b')
复制代码
  1. c = a + b     #合并元组 a 和 b
复制代码
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP