zoukankan      html  css  js  c++  java
  • 《Python学习之路 -- Python基础之数据类型》

      计算机是处理数值运算和逻辑运算的高级电子设备,因此,计算机程序理所当然会处理各种各样的数据,不同的数据需要定义不同的数据类型。而在Python中,能够直接处理的数据类型有以下几种:

    ①整型(int)

      Python可以处理任意大小的整数,当然也包括负整数。在程序中的表示方法和数学上的写法基本一致,例如:1,200,-8080等等。整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数池,避免为整数频繁申请和销毁内存空间。Python对小整数的定义是 [-5,257) 这些整数对象是提前建立好的,不会被垃圾回收,也就是说,在一个Python程序中,所有位于这个范围的整数使用的都是同一个对象,例如:

    由上图可见,5000不在整数池范围内,所以使用的两个对象,而数值5则都是同一个对象。(注:id()方法用于返回变量的内存地址)

    ②浮点型(float)

       浮点数也就是小数,之所以成为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23 * 109 就是1.23e9,或者12.3e8,浮点数也可以用数学的写法,比如:1.23 ,3.14 , -9.07等等。但是对于很大或者很小的浮点数,就必须使用科学计数法表示。注意:整数和浮点数在计算机内部的储存方式是不同的,整数运算永远是精确的(包括除法),而浮点数的运算则有可能会有四舍五入的误差。

    ③字符类型(str)

      字符串是以单引号或双引号括起来的任意文本,比如'abc' , "xyz"等,请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。与JS一样,在Python中可以使用表示转义字符,但是在Python中,如果字符串中包含有歧义的转义字符,但是又不需要转义的时候可以使用r''来表达:

    print('hello	world')  # 输出: hello world
    print(r'hello	world') # 输出: hello	world

    所以,如果字符串里面含有转义字符但是又不期望转义的,只需要在字符串前加上 r 即可实现。

    另外,字符串有很多操作的方法,详见《Python学习之路 -- 字符串的方法》 

     

    ④布尔类型(bool)

      与其他编程语言一样,Python也只有两种:True和False,注意首字母大写(在某些编程语言为小写,比如JavaScript),而且在Python中也同样提供了布尔值的或与非运算:

    与运算:使用 and 关键字

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

    或运算:使用 or 关键字

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

    非运算:使用 not 关键字

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

    与JavaScript相似的是,在或与运算中,如果运算的两者不是布尔类型,则结果也不会返回一个布尔值,而是返回对应的值(上面标红部分)

    ⑤空值(None)

      空值是Python里一个特殊的值,用None表示(相当于JavaScript中的null)。

    ⑥列表(list) (相当于JavaScript中的数组)

      列表是Python中内置的一种数据类型list,是一种有序的集合,就像JavaScript中的数组一样,都使用方括号 [  ] 来表示,里面存放的被称为元素,一个列表可以存储多个元素(定义一个列表不需要像Java一样定义它的长度,Python中的列表也没有长度限制),也可以随时添加或删除元素;也可以通过下标索引的方式来读取或修改元素。

    # 定义一个列表储存人的名字
    names = ['Jack','Jonas','Tom','Bob']
    # 通过下标索引(从0开始的自然数)读取列表中的元素
    print(names[0])  # 输出 Jack
    # 通过下标索引修改第三个元素Tom为Jerry
    names[2] = 'Jerry'
    # 打印整个列表
    print(names)  # 输出 ['Jack', 'Jonas', 'Jerry', 'Bob']

    除了通过索引的方式操作元素以外,列表还提供了很多操作元素的方法,详见《Python学习之路 -- 列表的方法》。 

    ⑦元组(tuple)

       元组也是Python内置的一种数据类型,访问元组内的元素与列表也一致,但是与列表不同的是,元组一旦初始化就不能修改,列表使用方括号 [   ] 来表示,而元组使用小括号 (   )  来表示,使用元组需要注意以下事项:

    1、元组一旦初始化,则不能修改,但是如果元组内的元素是可变类型(比如说列表),则可以对元组内的可变类型的数据进行修改:

    # 创建一个元组,里面包含了一个列表和两个数字
    num_tuple = ([1,2,3],5,6)
    # 修改列表(append()方法是列表的内置方法,用于向列表的末尾添加元素)
    num_tuple[0].append(4)   
    # 打印元组观察  
    print(num_tuple)  # 输出:([1,2,3,4],5,6)

     2、当元组只储存一个元素时,该元素后必须加上逗号,用于告知解释器该变量储存的数据类型是元组而不是一个小括号

    # 如果只有一个元素时,不加逗号
    num_tuple = (1)
    # 打印结果,type()方法用于检查变量的类型
    print(num_tuple,type(num_tuple))  # 输出 1 类型为int
    # 加上逗号才是一个元组,这就是逗号的魅力
    num_tuple = (1,)
    print(num_tuple,type(num_tuple))  # 输出 (1,) 类型为tuple

     3、元组内的元素一旦声明则不能修改,但是可以通过del关键字将保存该元组的引用变量删除

    4、元组的两个内置方法:count 和index

    tuple.count(value)

    该方法用于统计value值在元组中出现的次数,结果返回这个次数。

    tuple.index(value,start=None,stop=None)

    该方法用于检索元组中是否含有value值,若存在,则返回首次出现的下标索引;不存在则会报错。

    num_tuple = (1,2,3,4)
    # 统计2在元组内出现的次数
    num = num_tuple.count(2)
    # 检索3在元组内的索引
    num_index = num_tuple.index(3)
    print(num,num_index)  # 输出: 1   2

    ⑧字典(dict)

       同样的,字典也是一种内置数据类型,使用键-值(key-value)的方式存储数据,字典以大括号{   }的形式来表示,一个字典可以存储多个键值对,键与值之间使用冒号:来分隔,而键值对与键值对之间使用逗号来分隔。字典具有极快的查找速度,通过dict['key]的方式来访问对应的value值,但是通过这种方式找不到对应的value则会报错,如果使用字典的内置方法dict.get('key')方法来访问,如果找不到则不会报错,而是返回None

    # 创建一个字典表示一个人的信息
    person = {'name':'jonas','age':18,'gender':'male','address':'China'}
    # 访问字典的某个value
    print(person['name'])  # 输出 jonas
    print(person['salary'])  #该属性不存在,程序报错

    除了这种操作以外,字典还有很多方法,详见《Python学习之路 -- 字典的方法》

    ⑨集合(set)

      集合也是Python的一种数据类型,集合使用大括号{   }来表示,可以将集合理解为削弱版的字典,因为集合只保存key,没有value,而且保存的key必须是不可变类型,也不能出现重复,如果出现重复的数据,解释器则会直接将重复的过滤掉。

    # 创建一个集合
    num_set = {1,2,3,3}
    # 若出现重复的数据,则会直接过滤重复的部分
    print(num_set)  # 输出{1,2,3}
    # 向集合中添加元素
    num_set.add(4)
    print(num_set)  # 输出{1, 2, 3, 4}
    # 删除集合中的元素,如果删除集合中没有的元素,则会报错
    num_set.remove(2)
    print(num_set)  # 输出{1, 3, 4}
    # 删除指定元素,如果删除的元素不存也不会报错
    num_set.discard(5)
    print(num_set)  # 输出 {1, 3, 4}
    # 随机删除集合中的元素
    num_set.pop()
    print(num_set)  # 输出不确定(因为随机删除)

    除了以上的几个方法,集合还有四种逻辑运算:

    1、交集(等价于高中数学里面讲的交集,取两个集合的公共部分)

    name_set = {'jonas','tom','jerry','ben'}
    name_set2 = {'jonas','ben'}
    # 以下两种方法都可以求两个集合的交集,输出{'ben', 'jonas'}
    print(name_set & name_set2)
    print(name_set.intersection(name_set2))

    2、并集(将两个集合的所有元素合并在一起,但去掉重复的部分)

    name_set = {'jonas','tom','jerry','ben'}
    name_set2 = {'jonas','ben'}
    # 以下两种方法等价,输出{'tom', 'jerry', 'jonas', 'ben'}
    print(name_set | name_set2)
    print(name_set.union(name_set2))

    3、差集(举例:A集合与B集合的差集就是A集合有而B集合没有的元素)

    name_set = {'jonas','tom','jerry','ben'}
    name_set2 = {'jonas','ben'}
    # 以下两种方式等价,输出{'jerry', 'tom'}
    print(name_set - name_set2)
    print(name_set.difference(name_set2))

    4、交叉补集(举例:先取A,B两个集合的并集,然后减去他们两个的交集,剩下的就是交叉补集)

    name_set = {'jonas','tom','jerry','ben'}
    name_set2 = {'jonas','ben','jack'}
    # 以下两种方式等价,输出{'jack', 'tom', 'jerry'}
    print(name_set ^ name_set2)
    print(name_set.symmetric_difference(name_set2))
  • 相关阅读:
    你云我云•兄弟夜谈会 第三季 企业IT架构
    你云我云•兄弟夜谈会 第二季 5G
    C++ 中的不定参数与格式化字符串 # ## vsprintf
    Python多进程池 multiprocessing Pool
    protobuf语法指南
    linux 监控工具netdata
    C++并发编程 条件变量 condition_variable,线程安全队列示例
    C++ 并发编程,std::unique_lock与std::lock_guard区别示例
    linux设置预留端口号,防止监听端口被占用 ip_local_reserved_ports
    goto语句引起的crosses initialization of XXX
  • 原文地址:https://www.cnblogs.com/jonas-von/p/8920660.html
Copyright © 2011-2022 走看看