1. 基本数据类型

一、整型

	在python3中只有int,包含了long;而python2中有long类型。python2中是没有布尔类型的,它用0表示False,用1表示True。到python3中,把True和False定义成关键字,但他们值还是1和0。可和数字相加。
 

1. 案例
    (1)将i转换为二进制,统计最小有效位数
    i = 128
    i.bit_length()
    结果:128 - 10000000 -> 8
    	 20  - 10100 -> 5
      
2. 内置type()函数可以查看数据类型
    (1)解包操作
    a, b, c, d = 10, 5.5, True, 4+3j
    >>> <class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
  
3. isinstance 判断数据类型
    a = 111
    isinstance(a, True)
    >>>True
    
4. isinstance 和 type()区别
    (1)type() 不会认为子类是一种父类类型
    (2)isinstance() 会认为子类是一种父类类型
   
5. isinstance类中使用
    >>> class A:
    ...     pass
    ...
    >>> class B(A):
    ...     pass
    ...
    >>> isinstance(A(), A)
    True
    >>> type(A()) == A
    True
    >>> isinstance(B(), A)
    True
    >>> type(B()) == A
    False

二、浮点型

1. 定义
    python提供了三种浮点值:内置的 float、complex;标准库得decimal.Decimal类型。float存放双精度浮点数,受精度限制,进行相等性比价不可靠。
    科学计数:10 用e代替   1.23e10    0.000012——>1.2e-5。 整数和浮点数在计算机存储方式不同,int永远是精确的

2. 案例
    
    (1)自定义精度,导入标准库
    from decimal import *
    getcontext()
    getcontext().prec = 50
    a = Decimal(2) / Decimal(3)
    print(a)
    结果:
    0.66666666666666666666666666666666666666666666666667

三、布尔型

1. 相关类型转换
    str  => int       int(str)        
    int  => str       str(int)        
    int  => bool      bool(int).  0是False 非0是True        
    bool => int       int(bool)   True是1, False是0        
    str  => bool      bool(str)  空字符串串是False,  不空是True        
    bool => str       str(bool)  把bool值转换成相应的"值"

2. 总结
    (1)想要转化成什么类型就用这个类型括起来    
    (2)True => 1 | False => 0    
    (3)可以当做False来用的数据: 0 "" [] {} () None

四、字符串

1. 字符串操作

1. 注意点
    字符串进行修改时候, upper/lower/replace 操作后都需要将修改后的值赋值给原始对象,才可以把原来的字符串进行修改;因为字符串是不可变数据类型

2. 相关操作

实例: my_string = 'hellP NiuX Join'
    
(1)大小写转换
    print(my_string)
    print(my_string.swapcase())
    结果:
    hellP NiuX Join
    HELLp nIUx jOIN

(2)首字母大写
    print(my_string.capitalize())
    结果:Hellp niux join

(3)居中空白填充
    print(my_string.center(20, '-'))
    结果:--hellP NiuX Join---

(4)全部字母大写
    print(my_string.upper())
    结果:HELLP NIUX JOIN

(5)全部字母小写
    print(my_string.lower())
    结果:hellp niux join

(6)判断是否全部是大写字母
    print(my_string.isupper())
    结果:False

(7)判断是否全部是小写字母
    print(my_string.islower())
    结果:False

(8)每个用(特殊字符或数字)隔开的单词首字母大写
    print(my_string.title())
    结果:Hellp Niux Join
    
(9)全部小写字母小写,与lower类似;但一些非英文字符也可变为小写
    print(my_string.casefold())
    结果:hellp niux join

(10)判断是以xxx结尾的
    print(my_string.endswith('Join'))
    结果:True

    还可以切片,判断从[]1-10)这段里是否以i结尾
    my_string.endswith('i', 1,10)
    
(11)判断是以xxx开头的
    print(my_string.startswith('fj'))
    结果:False
    my_string.startswith('i', 1,10)

(12)判断字符串中是否含有空白; 空白->空白符包含:空格、制表符(\t)、换行(\n)、回车(\r)等
    a. 如果字符串中只包含空格,则返回True,否则False
    b. 实例
        str = "     "
        str.isspace() - True
        str = "Run example" - False
    c. print (' \t\r\n'.isspace()) # True
       print ('\0'.isspace()) # False
       print (' a '.isspace()) # False
    d. 空字符串不算空白
       >>> print("".isspace())  False

(13)判断字符串中是否含有数字
    print(my_string.isdigit())
    结果:False

(14)判断字符串是否由字母组成;如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
    str = "runoob"
    print (str.isalpha())
    结果:True

    str = "Runoob example....wow!!!"
    print (str.isalpha())
    结果:False

    汉字也返回True
    >>> Str = '哈哈'
    >>> print(Str, Str.isalpha())
    >>> True

(15)如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
    str = "runoob2016" # 字符串没有空格
    print (str.isalnum())
    True

    str = "www.runoob.com"
    print (str.isalnum())
    False

(16)判断只包含十进制字符;这种方法只存在于Unicode对象中
    str = "runoob2016"
    print (str.isdecimal())
    False
    
    str = "23443434"
    print (str.isdecimal())
    True

(17)返回指定长度的字符串,原字符串右对齐,前面填充0
    s = '101'
    print(s.zfill(8))
    结果:00000101

(18)返回指定长度的字符串,原字符串右对齐,前面填充自定义字符
    s = '101'
    print(s.rjust(8,'+'))
    +++++101
(19)返回指定长度的字符串,原字符串左对齐,前面填充自定义字符
    s = '101'
    print(s.ljust(8,'+'))
    101+++++

2. 字符串切片

1. 切片
    my_str = "python?伟大的蟒蛇语言"
    my_str[0] -> 'p'
    my_str[100] -> IndexError: string index out of range
    my_str[-1] -> -1表示倒数第一个; 言
    my_str[-2] -> -2表示倒数第二个; 语

2. 语法(切片是左闭右开)
    str[ start : end : step]   # 从start开始截取. 截取到end位置. 但不包括end,step是步长(默认是1:从左往右;-1从右往左)
    my_str[0:3] ->不包含索引3的值    'pyt'
    my_str[4:]  ->表示从索引4-切到最后    'on?伟大的蟒蛇语言'
    my_str[-1:-5] -> 空字符串; 原因:这个步长还是 1 说明向有切,但是右边不存在-5
    my_str[-1:] -> 同上,步长为 1 只能获取索引 -1 的值 '言'
    my_str[-5:] -> 的蟒蛇语言
    my_str[:-1] -> 从第一个取到倒数第一个(不包含)  'python?伟大的蟒蛇语'
    my_str[:] -> 原样输出
    my_str[1:5:2] ->从第一个开始取, 取到第5个,每2个取1个;1:5=> ytho => yh     1, 1+2  'yh'
    my_str[:5:2] -> 从头开始到第五个. 每两个取一个 'pto'    
    my_str[-1:-5:-1] ->步长是-1. 这时就从右往左取值了; '言语蛇蟒'
    my_str[-5::2] -> '的蛇言'
    my_str[-5::-3] -> 从倒数第5个开始. 到第一个. 每3个取一个, '的?hp'

3. 反转字符串
    str_new = '12345'
    str_rev = str_new[::-1]
    结果: '54321'

3. 字符串关键

1. len()
    - 返回对象(字符、列表、元组等)长度或项目个数
    my_str = "python?伟大的蟒蛇语言"
    print(len(my_str))
    >>>14

2. find()    - 找不到返回 -1
    - 检测字符串中是否包含子字符串 str
    
    语法:str.find(str, beg=0, end=len(string))
        -str 指定检索的字符串
        -beg 开始索引,默认0
        -end 结束索引,默认字符串长度
    语法:str.rfind(str, beg=0, end=len(string))
        -用法与str.find一致,这个得到的是结束的(最大的)索引值
    
    (1) 案例
        my_str = "Great minds have purpose,others have wishes minds"
        print(my_str.find('minds'))
        结果: 6 (返回字符串中第一个被找到字符串的第一个元素索引)
        
        print(my_str.find('a', 5, 10)) # 从5-10元素开始查a; -1
        
        print(my_str.rfind('minds',1)) # 从索引1->末尾  显示最后一个字符串的第一个元素索引 46

3. index()    - 找不到报错
    - 检查字符串中是否包含子字符串 str
    
    语法:str.index(str, beg=0, end=len(string))
    - 找不到抛出异常:ValueError: substring not found
    my_str.index('english')

4. strip()   - 默认去除空白 \t \n \r 空格
    - 移除字符串头尾指定的字符(默认为空格)或字符序列;注意,该方法只能删除开头或是结尾的字符,不能删除中间部分的字符;strip() 处理的时候,如果不带参数,默认是清除两边的空白符

    (1)案例
    my_str = "   hello   "
    print(my_str.strip())    -> 'hello'

    my_str = "+++hel+++lo+++"
    print(my_str.strip('+'))    -> 'hel+++lo'

    addr = '123@163.com'
    addr1 = addr.strip('12') 
    解析:以上例子因为 1 在 123@163.com 的左边第一个,所以删除了继续判断,2 也存在,所以也删除。
    结果为:3@163.com

    addr = '123@163.com'
    addr1 = addr.strip('23') 
    解析:此时 2 不是第一个字符,所以无法继续
    结果为:123@163.com
    
    s2 = '*f*jei%'
    print(s2.strip('*%'))
    解析:从左侧检索* 在'*%'中删.中间跳过;右侧% 也在'*%'中删
    
    s2.lstrip('*')    # f*jei%
    s2.rstrip('%')    # *f*jei

5. count()    
    - 统计字符串中某个字符出现的次数
    
    语法:str.count(sub, start= 0,end=len(string))

    (1)案例
    my_str = 'www.runoob.com'
    print(my_str.count('o'))     -> 3
    
    my_str = 'www.runoob.com'
    print(my_str.count('run'))    -> 1; 它是以 'run'整体去查询

6. replace()
    -把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次
    
    语法:str.replace(old, new[, max])
    -返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次
    -old -- 将被替换的子字符串。
    -new -- 新字符串,用于替换old子字符串。
    -max -- 可选字符串, 替换不超过 max 次

    (1) 案例
    str = "www.w3cschool.cc"
    print ("菜鸟教程旧地址:", str)
    print ("菜鸟教程新地址:", str.replace("w3cschool.cc", "runoob.com"))
    str = "this is string example is ....wow!!!"
    print(str.replace("is", "was")) # 不加参数,全部替换
    print (str.replace("is", "was", 2)) # 替换前两个
    /结果:
    菜鸟教程旧地址: www.w3cschool.cc
    菜鸟教程新地址: www.runoob.com
    thwas was string example was ....wow!!!
    thwas was string example....wow!!!

    (2)去除字符串中的全部空白
    s.replace( ' ', '' )

7. split()     - 获得的是一个列表
    split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串;Python split() 方法通过指定分隔符对字符串进行分割并返回一个列表,默认分隔符为所有空字符,包括空格/换行/制表符

    语法:Str.split([sep=None][,count=S.count(sep)])
    -sep -- 可选参数,指定的分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
    -count -- 可选参数,分割次数,默认为分隔符在字符串中出现的总次数
    -返回分割后的字符串列表

    (1) 案例
    st0= '   song    huan     gong    '
    print(st0.split())    -> ['song', 'huan', 'gong']

    st0= 'ihelloiwordi' 
    解析:分隔符 i 在字符串中出现3次,ps:也就是i是刀切3次蛋糕,形成4个部分,左右没有字符以''表示
    print(st0.count('i'))    -> 3
    print(st0.split('i'))    -> ['', 'hello', 'word', '']

    s = '<a href="www.test.com">test</a>'
    s2 = s.split('"')[1] 
    解析:以"为分隔符取,形成的列表取出索引为1的值,就取出了'www.test.com'
    print(s2)    -> www.test.com

8. join()    - 拼接列表/元组可得到字符串
    join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
    
    语法:str.join(sequence)
    
    (1) 案例
    s1 = '-'
    lst = ['a','b']
    s_new = s1.join(lst)    ->a-b

    s1 = ''
    lst = ['a','b']
    s_new = s1.join(lst)    ->ab

4. 字符串格式化

1. format
    格式化输出,基本语法是通过 {} 和 : 来代替以前的 % ,format () 函数可以接受不限个参数,位置可以不按顺序
    (1)s ='我叫{},今年{},爱好{},再说一下我叫{}'.format('太白',36,'女','太白')
    (2)s ='我叫{0},今年{1},爱好{2},再说一下我叫{0}'.format('太白',36,'女') 
    (3)name = input("please input your name:")
       s ='我叫{name},今年{age},爱好{hobby},再说一下我叫{name}'.format(name = name,age = 36,hobby = '女')

2. %    - %s,匹配一切类型
    s = 'hello'
    x = 5
    "The length of %s is %d" % (s,x)
    
    s = "I'm%s,I am %d"%{'name' = 'libai', 'age' = 19}

3. f'hello'
    name = python
    str_new = f"hello {python}"

5. 字符串编码

	在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。
在Python3中,所有的字符串都是Unicode字符串。

1. bytes.decode()
    decode() 方法以指定的编码格式解码 bytes 对象.默认编码为 'utf-8'
    (1)语法
        bytes.decode(encoding="utf-8", errors="strict")
    (2)参数
        -encoding -- 要使用的编码,如"UTF-8"
        -errors -- 设置不同错误的处理方案。默认为 'strict',意为编码错误引起一个UnicodeError。
        其他可能的值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值。
    (3)案例
    str = "菜鸟教程";
    str_utf8 = str.encode("UTF-8")
    str_gbk = str.encode("GBK")
    print(str) -> 菜鸟教程
    print("UTF-8 编码:", str_utf8) 
    >>>UTF-8 编码: b'\xe8\x8f\x9c\xe9\xb8\x9f\xe6\x95\x99\xe7\xa8\x8b'
    print("GBK 编码:", str_gbk)
    >>>GBK 编码: b'\xb2\xcb\xc4\xf1\xbd\xcc\xb3\xcc'
    print("UTF-8 解码:", str_utf8.decode('UTF-8','strict')) 
    >>>UTF-8 解码: 菜鸟教程
    print("GBK 解码:", str_gbk.decode('GBK','strict')) 
    >>>GBK 解码: 菜鸟教程


2.str.encode()
    encode() 方法以指定的编码格式编码字符串。errors参数可以指定不同的错误处理方案
    (1)语法
        str.encode(encoding='UTF-8',errors='strict')
    (2)参数
        -encoding -- 要使用的编码,如: UTF-8
    (3)案例
    str = "菜鸟教程";
    str_utf8 = str.encode("UTF-8")
    str_gbk = str.encode("GBK")
    print(str) -> 菜鸟教程
    print("UTF-8 编码:", str_utf8)
    >>>UTF-8 编码: b'\xe8\x8f\x9c\xe9\xb8\x9f\xe6\x95\x99\xe7\xa8\x8b'
    print("GBK 编码:", str_gbk)
    >>>GBK 编码: b'\xb2\xcb\xc4\xf1\xbd\xcc\xb3\xcc'
    print("UTF-8 解码:", str_utf8.decode('UTF-8','strict'))
    >>>UTF-8 解码: 菜鸟教程
    print("GBK 解码:", str_gbk.decode('GBK','strict')) 
    >>>GBK 解码: 菜鸟教程

6. 字符串进制转换

1. 进制转换
    >>> num=10
    >>> print('十六进制:%#x' % num)    #使用%x将十进制num格式化为十六进制
    十六进制:0xa
    >>> print('二进制:', bin(num))      #使用bin将十进制num格式化为二进制
    二进制: 0b1010
    >>> print('八进制:%#o' % num)      #使用%o将十进制num格式化为八进制
    八进制:0o12
    
2. 上面使用格式化符号进行进制转换中,多加入了一个#号,目的是在转换结果头部显示当前进制类型,如不需要,可将#号去除
    >>> print('八进制:%o' % num)
    八进制:12
    >>> print('十六进制:%x' % num)
    十六进制:a
    
3. 字符串分割 - partition()
    s1 = "I'm a good sutdent." # 以'good'为分割符,返回头、分割符、尾三部分
     ("I'm a ", 'good', ' sutdent.')
        
4. 统计个数,返回字典类型
    from collections import Counter
    Var2 = "1987262819009787718192084951"
    print (Counter(Var2))
    Counter({'1': 5, '9': 5, '8': 5, '7': 4, '2': 3, '0': 3, '6': 1, '4': 1, '5': 1})
    
5. ip掩码换算
    b = '1'
    bs_len = len(b)
    while bs_len < 9:
        #global b
        b_b = b.ljust(8,'0')
        d = int(b_b,2)
        print('二进制 %s 相当于十进制 %s' %(b_b,d))
        b = b +"1"
        bs_len = len(b)
    二进制 10000000 相当于十进制 128
    ...
    
6. 字符串<->列表
    (1)字符串->列表
    var='菜鸟教程'
    list = []
    list = [i for i in var]
    
    (2)列表->字符串
    var1 = ' ,'.join(list)
    
    (3)字符串->元组
    tup = tuple(var)
posted @ 2019-08-10 13:53  qi.hu  阅读(336)  评论(0编辑  收藏  举报