zoukankan      html  css  js  c++  java
  • [TimLinux] Python 类型与运算

    1. 内建(built-in)数据类型种类

    • 数字类型:int(), float()
    • 顺序(sequence):
      • 字符串:str()
      • 元祖:tuple()
      • 列表:list()
    • 字典:dict()
    • 集合:set()
    • 文件:open()
    • 布尔:True, False
    • 空对象:None

    2. 各类型示例详解

    2.1. 数字类型:

    数字直接量示例

    >>> 123 + 222  # 整数加
    345
    
    >>> 1.5 * 4  # 浮点数乘
    6.0
    
    >>> 2 ** 100  # 2的100次幂
    1267650600228229401496703205376
    
    >>> str(2**100)  # 转换为字符串
    
    >>> 3.1415 * 2 #  (Python < 2.7 和 3.1),调用类的__repr__函数
    6.28300000000004 
    
    >>> print(3.1415 * 2)  # 调用了类的__str__函数
    6.283
    
    >>> import math  # 引入外部模块, math数学模块
    >>> math.pi
    3.141592653589793
    >>> math.sqrt(85)
    9.219544457292887
    
    >>> import random  # 引入随机数模块
    >>> random.random()  # 生产随机数, 小于1的正数
    0.6489341324245831
    >>> random.randint(1, 10) # 生产1~10之间的整数,含1,10
    5
    >>> random.choice([1,3,4,8]) # 1,3,4,8中随机选择一个数
    4
    View Code

    第三方开源数字类型有:矩阵、向量、扩展精度数等。

    字符串转换为数字示例

    >>> help(int)
    class int(object)
      int(x=0) -> integer
      int(x, base=10) --> integer (默认转换为10进制整数)
    
    >>> int("12a")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: '12a'
    
    >>> int("a12")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: 'a12'
    
    >>> int("abc")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: 'abc'
    
    以上示例说明,含有非数字的字符串无法调用int()函数进行转换,使用过程中需要进行异常捕捉。
    
    >>> int('12')
    12
    
    >>> int('12', 2)  # 字符串中的2在二进制模式内是越界的
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 2: '12'
    
    >>> int('1010', 2)
    10
    
    >>> int('0777')
    777
    >>> int('0777', 8)
    511
    >>> int('0x1212')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: '0x1212'
    >>> int('0x1212', 16)
    4626
    >>> int('0xFF', 16)
    255
    >>> int('0xFG', 16)  # 字符G在十六进制中越界
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: '0xFG'
    
    >>> help(float)
    class float(object)
      float(x) -> floating point number # 只接收一个参数,只能包含点和数字
    >>> float('0.1x')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: could not covert string to float: '0.1x')
    
    >>> float('0.1')
    0.1
    >>> float('.1')
    0.1
    
    >>> float('0.1.2')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: could not covert string to float: '0.1.2')
    View Code

    2.2. 顺序(sequence):

            ”顺序“顾名思义,有先后、有序,其中包含的类型有:字符串、列表、元祖,Python中没有数组的提法,在Python里面需要忘记数组,如果难以做到,记得元祖和列表都可以认为是数组的一种,元祖和列表间又存在区别,稍后会提到这一点。sequence有以下几方面的特点:

    • 可以切片获取新的sequence
    • 可以下标访问
    • 可len()函数获取长度

    2.2.1. 字符串:

    特点:

    • 直接量定义:mystr = "this is my string"
    • 工厂函数定义:mystr = str("this is my string")
    • 可切片:mystr[0:3] (不含3), mystr[3:-2] (不含-2), 索引0, -1可以省略,mystr[0:3] === mystr[:3], mystr[3:-1] === mystr[3:], mystr[0:-1] (取全部值) === mystr[:]
    • 可下标访问:mystr[0], mystr[1], mystr[-1], mystr[-2]
    • 不可变值(immutable):mystr[0] = 'a' 会抛出TypeError错误

    2.2.2. 列表:

    特点:

    • 直接量定义:mylist = [1, 3, 5, "this is a string"]
    • 工厂函数定义:mylist = list([1, 3, 5, "this is a string"]); mylist = list( (1, 3, 5, "this is a string") ); mylist = list("this is a list")
    • 可切片:mylist[0:3] (不含3), mylist[3:-2] (不含-2), 索引0, -1可以省略,mylist[0:3] === mylist[:3], mylist[3:-1] === mylist[3:], mylist[0:-1] (取全部值) === mylist[:]
    • 可下标访问:mylist[0], mylist[1], mylist[-1], mylist[-2]
    • 可变值(mutable): mylist[1] = 'newstring'

    2.2.3. 元祖:

    特点:

    • 直接量定义:mytuple = (1,3,5, "this is a string"); mytuple = 1, 3, 5, "this is a string"; 
    • 工厂函数定义:mytuple = tuple([1,3,5, "this is a string"]); mytuple = tuple( (1,3,5, "this is a string") ); mytuple = tuple("this is a tuple")
    • 可切片:mytuple[0:3] (不含3), mytuple[3:-2] (不含-2), 索引0, -1可以省略,mytuple[0:3] === mytuple[:3], mytuple[3:-1] === mytuple[3:], mytuple[0:-1] (取全部值) === mytuple[:]
    • 不可变值(immutable): mytuple[0] = "new one"   # 抛出TypeError错误

     2.2.4. 示例

    字符串示例

    >>> S = 'Spam'
    >>> len(S)
    4
    
    下标访问
    >>> S[0]
    'S'
    >>> S[1]
    'p'
    >>> S[100]  # 越界抛出 IndexError 错误
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: string index out of range
    
    >>> S[-1]
    'm'
    >>> S[len(S) - 1]
    'm'
    >>> S[-2]
    'a'
    
    切片操作
    >>> S[1:3]
    'pa'
    >>> S[1:]
    'pam'
    >>> S
    'Spam'
    >>> S[0:3]  # 切片不包含最后的值
    'Spa'
    >>> S[:3]  # 开头的0可以省略
    "Spa'
    >>> S[:-1]
    'Spa'
    >>> S[:]  # 末尾的-1也可以省略
    'Spam'
    >>> S[::2]  # 第三个值为步长
    'Sa'
    
    字符串拼接
    >>> S + 'xyz'
    'Spamxyz'
    >>> S * 8  # 重复8次
    'SpamSpamSpamSpamSpamSpamSpamSpam'
    
    
    不可修改值
    >>> S[0] = 'z'  # 抛出 TypeError 错误
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'str' object does not support item assignment
    View Code

    字符串相关函数介绍示例:

    >>> my_string = "this is a string"
    >>> my_string.capitalize()  # 首字母大写
    This is a string
    
    >>> my_string.center(50, "=")  # 中对齐,总长度50,填充=
    =======this is a string=======
    >>> my_string.ljust(50, "=")  # 左对齐,总长度50,填充=
    this is a string
    >>> my_string.rjust(50, "=")  # 右对齐,总长度50,填充=
    ==============this is a string
    
    # 默认my_string为UTF-8, UTF-8是UNICODE的子集
    #        str--------> unicode(utf-8) ---------------->str
    # "".decode("GBK") --> unicode(utf-8) --> u"".encode("GBK")
    >>> my_string.encode("GBK")
    b'this is a string'  # 因为是因为字符,所以显示出了字节类型的具体值
    >>> my_string = "中文"  # 因为"中文"两个字是UTF-8编码的,所以只能执行encode方法
    >>> my_string.encode("GBK")
    b'xd6xd0xcexc4'  # 只显示出了二进制值
    
    >>> my_string = "this is a string"
    >>> my_string.endswith('ing')
    True
    >>> my_string.endswith('abc')
    False
    >>> my_string.startswith('this')
    True
    
    >>> my_string = "this is a	string"
    >>> my_string.expandtabs(tabsize=5)  # 	替换为5个空格
    this is a     string
    >>> my_string.find('i')  # 从左往右,查找第一个i的索引值,找不到返回值为-1
    2
    >>> my_string.rfind('i')  # 从右往左,查找第一个i的索引值,找不到返回值为-1
    13
    >>> "My name is {}, age is {}, sex is {}".format('Tim', 28, 'man')
    "My name is Tim, age is 28, sex is man
    
    # format_map 参数为字典(后面会介绍字典)
    >>> "My name is {name}, age is {age}, sex is {sex}".format_map({'name': 'Tim', 'age': 28, 'sex': 'man'})
    "My name is Tim, age is 28, sex is man
    
    >>> my_string.index(" is")  # 获取index值,找不到抛出ValueError异常
    4
    >>> my_string.rindex(" is")  # 从右往左获取index值,找不到抛出ValueError异常
    4
    >>> my_string.isalnum() # 只包含字母,数字,因为有空格所以False
    False
    
    >>> my_string.isdecimal() # 只包含数字时为True
    False
    
    >>> my_string.isalpha() # 只包含字母时为True
    False
    
    >>> my_srting.islower() # 是纯小写
    True
    >>> my_srting.isupper() # 是纯大写
    False
    >>> ','.join(my_string) # 每个迭代项目之间插入',',返回字符串
    t,h,i,s, ,i,s, ,a, ,s,t,r,i,n,g
    
    >>> my_string.replace('i', 'x', 2) # i->x, 最大替换2次
    thxs xs a string
    
    >>> my_string.partition('is')  # 返回三个元素的元祖:head, sep, tail
    ('th', 'is', ' is a string')
    >>> my_string.partition('is')  # 找不到sep时
    ('this is a string', '', '')
    
    >>> my_string.partition('is')  # 返回三个元素的元祖:head, sep, tail
    ('th', 'is', ' is a string')
    >>> my_string.rpartition('is')  # 优先从右往左查找
    ('this ', 'is', ' a string')
    >>> my_string.split('is') # 使用'is'对字符串进行切割,得到列表,切割后的内容中不在包含有'is’
    ['th', ' ', ' a string']
    >>> my_string.split('is', 1) # 切一次
    ['th', ' is a string']
    >>> my_string.split('xis') # 不存在
    ['this is a string']
    
    >>> my_string.rsplit('is', 1) # 从右往左开始切
    ['this ', ' a string']
    
    
    >>> "tzt this is a string ttt".strip('tz') # 开头、结尾含有't', 'z'的字符
    ' this is a string '
    
    
    >>> my_string.swapcase() # 交换大小写
    THIS IS A STRING
    
    >>> my_string.zfill(20) # 左侧填0
    0000this is a string
    View Code
  • 相关阅读:
    排序算法的实现(冒泡,选择,插入 O(N*N)--理解方法实现
    HTTPS工作原理和TCP握手机制
    HTTP协议学习
    IP头,TCP头,UDP头,MAC帧头定义
    单链表的实现
    数字图像处理------中值滤波
    对于矩阵的理解-- by 孟岩老师
    java编码问题总结
    jsp数据库连接大全和数据库操作封装到Javabean
    构建一个高可扩展性javabean和jsp连接数据库操作
  • 原文地址:https://www.cnblogs.com/timlinux/p/9059521.html
Copyright © 2011-2022 走看看