• python2与python3的区别


    1、字符编码(主要)
        py2:  unicode(内部是unicode编码)     ->压缩(utf8)       str=bytes(根据压缩方式,可以是utf8,gbk等) 
              name = u'小明'                                    name = '小明'
    
              
        py3:  str(内部是unicode编码)         ->压缩(utf8)       bytes(根据压缩方式,可以是utf8,gbk等) 
              name = "小明"                                     name = b'小明'
    
    
    2、解释器编码(默认)
    py2: ascii
    py3: utf-8 
    
    示例
    # _*_ coding:utf8 _*_  --> 声明让解释器使用utf8的格式去解析字符
    
    ####### py2解释器默认ascii编码 ######
    # 因为上面声明了# _*_ coding:utf8 _*_,因此这里的中文解释器会使用utf-8的格式去解析
    # 若没有声明# _*_ coding:utf8 _*_,则解释器默认使用ascii去解析,ascii不能解析中文
    name = '小明'  # 这里没有添加 u ,此时已经进行了编码
    
    name2 = u'小明'  # 字符前加u,表明用现在是字符内部编码unicode,此时还没进行编码
    name3 = u'小明'.encode('utf-8')  # 自己声明使用什么格式去解析字符
    print name, type(name)  # 小明 <type 'str'>:使用utf8解析后的字符
    print name2, type(name2)  # 小明 <type 'unicode'>:字符内部编码unicode
    print name3, type(name3)  # 小明 <type 'str'>:使用utf8解析后的字符
    
    
    ####### py3解释器默认是 utf8编码 ######
    
    name = '狗明'  # 未声明使用什么编码,则使用默认的utf-8去编码,此时还没进行编码
    name2 = b'ming'  # 这里不能写中文,使用 b 声明的字符默认是用ascii去解析,ascii不能解析中文
    name3 = '狗明'.encode('utf-8')  # 主动声明使用utf-8编码
    print(name, type(name))  # 狗明 <class 'str'>:python3使用默认的utf-8编码解析后的字符
    print(name2, type(name2))  # b'ming' <class 'bytes'>:使用ascii解析后的字符
    print(name3, type(name3))  # b'xe7x8bx97xe6x98x8e' <class 'bytes'>:使用utf8解析后的字符
    编码示例
    3、range和xrange
    python2:
        range(3) ---> [0,1,2] 列表
        xrange(3) ---> 迭代器
    
    pytohn3:
        range(3) ---> range(0,3) range类型,是可迭代对象,跟迭代器类似
    
    4、经典类和新式类
    继承了object的类就是新式类
    在py3中所有的类都是新式类
    在py2中既有新式类又有经典类
    
    5、yield from(py2中无)
    def test():
        yield 666
        yield 999
    
    def func():
        yield 1
        yield from test()
        yield 2
        yield 3
    
    gen = func()
    for line in gen:
        print(line)  # 1 666 999 2 3
    
    6、input
    python2中input输入的是什么类型,它就是什么类型
    python3中input输入的无论是什么类型,它都是字符串类型
    python2中与python3的input一样功能的是raw_input()
    
    7、print
    py2: print '小明'
    py3: print('小明')
    
    
    8、包
    python2中,不是包不能相互导入模块
    python3中不是包也可以导入
    
    
    9、python3的新特性之类型注解
    Python是一门动态语言,变量以及函数的参数是不区分类型。比如我们要实现一个数字相加的函数:
    def my_add(x, y):
      return x + y
    但是这样的坏处是,别人不知道你要做的是数字相加的函数,别人输入字符串,一样是可以得到字符串的拼接的
    
    于是 Python 3 提供了一个新的特性:
    类型注解:
    def my_add(x:int, y:int) -> int:
      return x + y
    
    语法:
    参数:类型  指定函数的参数类型
    -> 类型   指定函数的返回值类型。
    
    
    注意:Python 解释器并不会因为这些注解而提供额外的校验,
    也就是说,这些类型注解加不加,对你的代码来说没有任何影响,我一样可以输入字符串的。
    
    只是这么做的好处是:
    1.让别人看得更明白
    2.当你输入str和float 类型的参数时,虽然一样不会报错可以得出结果,但是IDE工具会有高亮提示
    
    
    10、f-string
    1、介绍
    f-string(formatted string literals):格式化字符串常量,是Python3.6新引入的一种字符串格式化方法,使格式化字符串的操作更加简便。
    
    
    2、语法
    f'xxx' 或 F'xxx'  且以大括号 {} 标明被替换的字段,{}里面可以是字符串或者表达式
    
    
    3、简单替换字符串:{'字符串'}
    name = '小白'
    msg = f'我叫{name},今年{18}岁,性别{"男"}'
    print(msg)  # 我叫小白,今年18岁,性别男
    注意:若f使用的是单引号,那么里面的{}若是字符串则应该用双引号,反之一样
    
    
    4、计算表达式:{表达式}
    ret = f"1 add 2 is {1+2}"
    print(ret)  # 1 add 2 is 3
    
    
    5、lambda表达式:{(lambda表达式) (参数)}
    注意:
    lambda表达式的 : 会被f-string误认为是表达式与格式描述符之间的分隔符,
    为避免歧义,需要将lambda表达式置于括号 () 内:
    
    func = f"my_add result:{(lambda x,y:x+y) (1,2)}"
    print(func)  # my_add result:3
    
    若不加括号则报错:
    func = f"my_add result:{lambda x,y:x+y (1,2)}"
    print(func)
    
    
      File "<fstring>", line 1
        (lambda x,y)
                   ^
    SyntaxError: unexpected EOF while parsing
  • 相关阅读:
    拒绝采样
    概率函数P(x)、概率分布函数F(x)、概率密度函数f(x)
    Dynamic Filter Networks
    ECC ~ Edge-Conditioned Filter in CNN on Graphs
    Graph-GCN
    Graph-to-ID task
    non-local denoising methods
    Graph-GraphSage
    CNN作为denoiser的优势总结
    论文解读《Deep Plug-and-Play Super-Resolution for Arbitrary Blur Kernel》
  • 原文地址:https://www.cnblogs.com/Zzbj/p/9412115.html
Copyright © 2020-2023  润新知