1.源代码编码和标识符

Python3假定源代码使用UTF-8编码。另外,关于标识符中哪些字符是合法的规则也放宽了。特别是,标识符可以包含代码点为U+0080及以上的任意有效Unicode字符。例如:

π = 3.1415926

2.集合字面量

在{}中放入一组值就可以定义一个集合,例如:

days = {'Mon','Tue','Wed','Thu','Fri','Sat','Sun'}

同:

days = set(['Mon','Tue','Wed','Thu','Fri','Sat','Sun'])

3.集合和字典包含

语法{expr for x in s if condition}称为集合包含。它将一种操作应用给集合s的所有元素,然后返回一个集合。

语法{kexpr:vexpr for k,v in s if condition}称为字典包含。它将一种操作应用给(key,value)元组序列s中的所有键和值。然后返回一个字典。

4.扩展的可迭代项解包

在Python2中,使用如下语法将一个可迭代项解包到一些变量中:

items = [1,2,3,4]

a,b,c,d = items #将各个项解包到变量中

只有变量个数与要解包的项数完全相等,解包才能进行。

在Python3中,可以使用通配符变量仅仅解包一个序列中的某些项,而将其他值放到一个列表中,例如:

a,*rest = items #a = 1 ,rest = [2,3,4]

a,*rest,d = items #a = 1 ,rest = [2,3],d = 4

*rest,d = items #rest = [1,2,3],d = 4

使用这种语法时,只能出现一个带有*号的变量。

5.nonlocal变量

使用nonlocal声明后,内部函数可以修改外部函数中的变量,例如:

def countdown(n):

def decrement():

nonlocal n

n -= 1

while n > 0:

print('T-minus',n)

decrement()

Python2中,内部函数可以读取外部函数的变量,但不能修改它们,使用nonlocal声明后就能修改它们了。

6.函数注释

函数与方法在定义时都可以带有注释,其通常语法为:

def functionName(par1:exp1,par2:exp2,...,parN:expN)->rexp:

suite

每个冒号表达式部分(:expX)是一个可选的注释,箭头返回表达式部分(->rexp)也是。

如果存在注释,就会被添加到__annotations__字典中;如果不存在,那么此字典为空。该字典的键为参数名,值为相应的表达式。这种语法格式允许我们对所有、部分或不对任何参数进行注释,对返回值也是如此。同样的语法也使用于各种位置参数和关键字参数。

def foo(x:1,y:2) -> 3:

pass

>>>foo.__annotations__

{'y':2,'x':1,'return':3}

7.只能通过关键字引用的参数

函数可以指定只能通过关键字引用的参数,方法是在第一个带*号的参数后定义额外的参数,例如:

def foo(x,*args,strict = False):

statements

调用此函数时,只能以关键字的形式指定strict参数,例如:

a = foo(1,strict = True)

如果参数的数量不定,但又要使用只能通过关键字引用的参数,可以在参数列表中使用一个单独的*号,例如:

def foo(x,*,strict = False):

statements

8.省略号表达式

Ellipsis对象(...)可以用作表达式,从而可放在容器中或赋值给变量,例如:

>>>x = ... #赋值为省略号

>>>x

Ellipsis

>>>a = [1,2,...]

>>>a

[1,2,Ellipsis]

>>>... in a

True

>>>x is ...

True

9.链接异常

现在可以将异常链接在一起。从本质上讲,这是让当前异常携带与前面异常相关信息的一种途径。from限定符与raise语句在一起使用便可显示链接异常。例如:

try:

statements

except ValueError as e:

raise SyntaxError('Could not parse configuration') from e

引发SyntaxError异常时,就会生成像下面这样一条跟踪信息,同时显示两个异常:

Traceback (most recent call last):

File "", line 1, in

raise ValueError

ValueError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):

File "", line 1, in

raise SyntaxError('Could not parse configuration')

SyntaxError: Could not parse configuration

异常对象的__cause__属性被置为前一个异常,使用from限定符和raise语句可以设置该属性。

有趣的异常链接:在另一个异常处理器中引发异常,例如:

def error(msg):

print(m) #m未定义

try:

statements

except ValueError as e:

error('Could not parse configuration')

如果在Python2中执行这段代码,在error()中只有一个与NameError相关的异常。而在Python3中,前一个要处理的异常与结果链接在了一起:

Traceback (most recent call last):

File "", line 1, in

raise ValueError

ValueError

During handling of the above exception, another exeption occurred:

Traceback (most recent call last):

File "", line 1, in

print m

NameError: name 'm' is not defined

10.经过改进的super()函数

super()函数用于查找基类中的方法,在Python3中它可以不带任何参数运行,例如:

class C(A,B):

def bar(self):

return super().bar() #调用基类中的bar()方法

而在Python2中,必须使用super(C,self).bar()。

11.高级元类

在Python3中,元类可以在类主体执行之前完成一些额外的工作,方法是在元类中定义一个特殊的类方法__prepare__(cls,name,bases,**kwargs)。该方法的返回结果必须是一个字典,而类定义的主体执行时将填充这个字典。例如:

class MyMeta(type):

@classmethod

def __prepare__(cls,name,bases,**kwargs):

print('preparing',name,bases,kwargs)

return {}

def __new__(cls,name,bases,classdict):

print('creating',name,bases,classdict)

return type.__new__(cls,name,bases,classdict)

class Foo(metaclass=MyMeta):

print('About to define methods')

def __init__(self):

pass

def bar(self):

pass

print('Done defining methods')

运行以上代码后,在输出中会看到控制流的走向:

preparing Foo () {}

About to define methods

Done defining methods

'creating', 'Foo', (), {'bar': , '__module__': '__main__', '__init__': }

元类的__prepare__方法上的额外关键字参数是从class语句的基类列表中使用的关键字参数传递而来。例如语句class Foo(metaclass=MyMeta,spam=42,blah='Hello')将关键字参数spam和blah传递给MyMeta.__prepare__()方法。这种约定可以将任意配置信息传递给元类。

python3.4新特性_Python3中的新特性(1)——新的语言特性相关推荐

  1. html5是播放什么中新,关于html5中标签video播放的新解析-

    这篇文章主要介绍了关于html5中标签video播放的新解析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前端同学要使用 HTML5 播放器视频,必然会使用 video 标签,不过大 ...

  2. python3版本代码大全_python3中的

    出品 | FlyAI 编译 | 林椿眄 编辑 | Donna Python 已经成为机器学习及其他科学领域中的主流语言.它不但与多种深度学习框架兼容,而且还包含优秀的工具包和依赖库,方便我们对数据进行 ...

  3. python3字典详解_Python3中Dictionary(字典)操作详解

    在绝大部分的开发语言中与实际开发过程中,Dictionary扮演着举足轻重的角色.从我们的数据模型到服务器返回的参数到数据库的应用等等,Dictionary的身影无处不在.那么,在Python中,Di ...

  4. python3中有xrange吗_python3中的xrange函数为什么不能用

    python3中的xrange函数为什么不能用 发布时间:2020-09-21 11:29:51 来源:亿速云 阅读:53 作者:Leah python3中的xrange函数为什么不能用?很多新手对此 ...

  5. python3.7怎么换行_python3中怎么实现换行输出

    推荐手册:Python 基础入门教程 print默认输出是换行的,如果要实现不换行需要在变量末尾加上end="":x="a"y="b" # ...

  6. python3字典详解_python3中字典详解

    字典(dict) 1. 创建字典的几种方式 class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg) ...

  7. python3十进制转二进制_Python3中数字进制转换

    Python中数字进制默认为十进制,可通过内置函数转换为二进制.八进制.十六进制 十进制整数转其他进制 1. 十进制转二进制: 设 num1 为123,通过 type( ) 可以看到类型为 int 使 ...

  8. 《深入理解C++11:C++ 11新特性解析与应用》——1.3 C++11特性的分类

    1.3 C++11特性的分类 从设计目标上说,能够让各个特性协同工作是设计C++11/0x中最为关键的部分.委员会总希望通过特性协作取得整体大于个体的效果,但这也是语言设计过程中最困难的一点.因此相比 ...

  9. win7系统怎样创建新的连接服务器,win7怎么创建一个新的宽带连接|win7创建一个新的宽带连接方法...

    电脑安装上win7专业版系统后,一般都是采取拨号上网,直接点击宽带连接即可.但是有些用户说桌面没看到宽带连接图标,怎么办呢?我们可以创建一个新的宽带连接,那么该怎么操作呢?带着此疑问,我们一起来看下w ...

最新文章

  1. 栏目信息开源 免费 java CMS - FreeCMS1.3 标签 infoList
  2. DOS命令下Javac命令不能执行原因
  3. 如何查询SAP C4C创建日期大于某日的所有lead数据
  4. oracle数据库恢复参数文件位置,Oracle数据库的参数文件备份与恢复
  5. c语言程序中return的作用,单片机C语言程序中return dat 什么意思
  6. STL(一)——栈及其应用
  7. 点击页面的悬浮窗口实现随意拖动
  8. pytorch学习笔记(三十七):Adam
  9. .netFramework 升级NetCore 问题汇总及解决方案
  10. 操作系统对的IIS版本
  11. 期权、期货及其他衍生品 Chapter14 维纳过程与伊藤引理
  12. 求职招聘小程序 毕业设计毕业论文 开题报告和效果图参考(基于微信小程序毕业设计题目选题课题)
  13. 怎么用表格做出html网页,用表格制作网页
  14. java编程思想学习笔记——21多线程
  15. KNN算法优缺点总结,以及机器学习流程的总结
  16. 执行shellcode一直提示illegal instruction
  17. java单元测试异步不进去方法_java单元测试之如何实现异步接口的测试案例
  18. Dataset:White Wine Quality白葡萄酒品质数据集的简介、下载、使用方法之详细攻略
  19. Vscode编译调试C++程序
  20. 使用友盟社会化分享安卓android版SDK分享纯图片到微信

热门文章

  1. 【Java】while和do-while循环比较测试案例
  2. docker 删除映像_如何在Docker中删除映像和容器
  3. 如何使用Bootstrap Modal和jQuery AJAX创建登录功能
  4. 停在Z的危险:用苏斯博士的话,为什么孩子应该编码
  5. springMVC发送邮件
  6. mie散射理论方程_电磁散射工程应用基础
  7. Python学习笔记之常用模块总结,持续更新...
  8. Python编码风格指南
  9. 数据库查询:列出各个部门中工资高于本部门平均工资的员工信息,并按部门号排序。
  10. 实时数仓与离线数仓总结(一)