@程序员:Python 3.8正式发布,重要新功能都在这里
新功能手册:https://docs.python.org/3.8/whatsnew/3.8.html
- 使用赋值表达式简化一些代码结构
- 在你自己的函数中强制执行仅位置参数
- 指定更精确的类型提示
- 使用f字符串进行更简单的调试
>>> walrus = False
>>> print(walrus)
False
>>> print(walrus := True)
True
inputs = list()
current = input("Write something: ")
while current != "quit": inputs.append(current) current = input("Write something: ")
inputs = list()
while True: current = input("Write something: ") if current == "quit": break inputs.append(current)
inputs = list()
while (current := input("Write something: ")) != "quit": inputs.append(current)
PEP572中描述了复制表达式的所有细节,大家可以深入阅读。https://www.python.org/dev/peps/pep-0572/ https://www.python.org/dev/peps/pep-0572/#examples
>>> float("3.8")
3.8 >>> help(float)
class float(object) | float(x=0, /) | | Convert a string or number to a floating point number, if possible. [...]
PEP 457 -- Notation For Positional-Only Parametershttps://www.python.org/dev/peps/pep-0457/
>>> float(x="3.8")
Traceback (most recent call last): File "<stdin>", line 1, in <module>
TypeError: float() takes no keyword arguments
>>> def incr(x):
... return x + 1
...
>>> incr(3.8)
4.8 >>> incr(x=3.8)
4.8
>>> def incr(x, /):
... return x + 1
...
>>> incr(3.8)
4.8 >>> incr(x=3.8)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
TypeError: incr() got some positional-only arguments passed as keyword arguments: 'x'
>>> def greet(name, /, greeting="Hello"):
... return f"{greeting}, {name}"
...
>>> greet("Łukasz")
'Hello, Łukasz' >>> greet("Łukasz", greeting="Awesome job")
'Awesome job, Łukasz' >>> greet(name="Łukasz", greeting="Awesome job")
Traceback (most recent call last): File "<stdin>", line 1, in <module>
TypeError: greet() got some positional-only arguments passed as keyword arguments: 'name'
>>> def to_fahrenheit(*, celsius):
... return 32 + celsius * 9 / 5
...
>>> to_fahrenheit(40)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
TypeError: to_fahrenheit() takes 0 positional arguments but 1 was given >>> to_fahrenheit(celsius=40)
104.0
>>> def headline(text, /, border="♦", *, width=50):
... return f" {text} ".center(width, border)
...
>>> headline("Positional-only Arguments")
'♦♦♦♦♦♦♦♦♦♦♦ Positional-only Arguments ♦♦♦♦♦♦♦♦♦♦♦♦' >>> headline(text="This doesn't work!")
Traceback (most recent call last): File "<stdin>", line 1, in <module>
TypeError: headline() got some positional-only arguments passed as keyword arguments: 'text'
>>> headline("Python 3.8", "=")
'=================== Python 3.8 ===================' >>> headline("Real Python", border=":")
':::::::::::::::::: Real Python :::::::::::::::::::'
>>>
>>> headline("Python", "?", width=38)
'??????????????? Python ???????????????'
>>> headline("Python", "?", 38)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
TypeError: headline() takes from 1 to 2 positional arguments but 3 were given
- 文字类型
- 打字字典
- 最终对象
- 协定
def double(number: float) -> float: return 2 * number
>>> double(3.14)
6.28 >>> double("I'm not a float")
"I'm not a floatI'm not a float"
PEP 484https://www.python.org/dev/peps/pep-0484/
# draw_line.py def draw_line(direction: str) -> None: if direction == "horizontal": ... # Draw horizontal line elif direction == "vertical": ... # Draw vertical line else: raise ValueError(f"invalid direction {direction!r}") draw_line("up")
$ mypy draw_line.py
draw_line.py:15: error: Argument 1 to "draw_line" has incompatible type "Literal['up']"; expected "Union[Literal['horizontal'], Literal['vertical']]"
Found 1 error in 1 file (checked 1 source file)
# calculator.py
from typing import Union ARABIC_TO_ROMAN = [(1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), (90, "XC"), (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I")] def _convert_to_roman_numeral(number: int) -> str: """Convert number to a roman numeral string""" result = list() for arabic, roman in ARABIC_TO_ROMAN: count, number = divmod(number, arabic) result.append(roman * count) return "".join(result) def add(num_1: int, num_2: int, to_roman: bool = True) -> Union[str, int]: """Add two numbers""" result = num_1 + num_2 if to_roman: return _convert_to_roman_numeral(result) else: return result
# calculator.py from typing import Literal, overload, Union ARABIC_TO_ROMAN = [(1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), (90, "XC"), (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I")] def _convert_to_roman_numeral(number: int) -> str: """Convert number to a roman numeral string""" result = list() for arabic, roman in ARABIC_TO_ROMAN: count, number = divmod(number, arabic) result.append(roman * count) return "".join(result) @overload
def add(num_1: int, num_2: int, to_roman: Literal[True]) -> str: ...
@overload
def add(num_1: int, num_2: int, to_roman: Literal[False]) -> int: ... def add(num_1: int, num_2: int, to_roman: bool = True) -> Union[str, int]: """Add two numbers""" result = num_1 + num_2 if to_roman: return _convert_to_roman_numeral(result) else: return result
from typing import Final ID: Final = 1 ... ID += 1
from typing import final @final
class Base: ... class Sub(Base): ..
from typing import TypedDict class PythonVersion(TypedDict): version: str release_year: int py38 = PythonVersion(version="3.8", release_year=2019
当我看到一只鸟走路像鸭子,游泳像鸭子,像鸭子一样嘎嘎叫时,我把它称为鸭子。
from typing import Protocol class Named(Protocol): name: str def greet(obj: Named) -> None: print(f"Hi {obj.name}"
>>>
>>> style = "formatted"
>>> f"This is a {style} string"
'This is a formatted string'
官方文档https://docs.python.org/3/library/string.html#format-specification-mini-language
>>> import math
>>> r = 3.8 >>> f"Diameter {(diam := 2 * r)} gives circumference {math.pi * diam:.2f}"
'Diameter 7.6 gives circumference 23.88'
>>> python = 3.8
>>> f"{python=}"
'python=3.8'
>>> python = 3.7
>>> f"python={python}"
'python=3.7'
>>> f"{name.upper()[::-1] = }"
"name.upper()[::-1] = 'CIRE'"
- Barry Warsaw
- Brett Cannon
- Carol Willing
- Guido van Rossum
- Nick Coghlan
PyCon 2019上的Python指导委员会。从左至右:Barry Warsaw,Brett Cannon,Carol Willing,Guido van Rossum和Nick Coghlan(图片来源:Geir Arne Hjelle)
importlib.metadata
>>> from importlib import metadata
>>> metadata.version("pip")
'19.2.3' >>> pip_metadata = metadata.metadata("pip")
>>> list(pip_metadata)
['Metadata-Version', 'Name', 'Version', 'Summary', 'Home-page', 'Author', 'Author-email', 'License', 'Keywords', 'Platform', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Requires-Python'] >>> pip_metadata["Home-page"]
'https://pip.pypa.io/' >>> pip_metadata["Requires-Python"]
'>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' >>> len(metadata.files("pip"))
668
>>> [p for p in metadata.files("realpython-reader") if p.suffix == ".py"]
[PackagePath('reader/__init__.py'), PackagePath('reader/__main__.py'), PackagePath('reader/feed.py'), PackagePath('reader/viewer.py')] >>> init_path = _[0] # Underscore access last returned value in the REPL
>>> print(init_path.read_text())
"""Real Python feed reader Import the `feed` module to work with the Real Python feed: >>> from reader import feed >>> feed.get_titles() ['Logging in Python', 'The Best Python Books', ...] See https://github.com/realpython/reader/ for more information
""" # Version of realpython-reader package
__version__ = "1.0.0" ...
>>> metadata.requires("realpython-reader")
['feedparser', 'html2text', 'importlib-resources', 'typing']
try: from importlib import metadata
except ImportError: import importlib_metadata as metadata ...
- 新增和改进的数学和统计功能
>>> import math
>>> math.prod((2, 8, 7, 7))
784 >>> 2 * 8 * 7 * 7
784
- statistics.fmean()计算浮点数的平均值。
- statistics.geometric_mean()计算浮点数的几何平均值。
- statistics.multimode()查找序列中最频繁出现的值。
- statistics.quantiles()计算用于将数据等概率分为n个连续区间的切点。
>>> import statistics
>>> data = [9, 3, 2, 1, 1, 2, 7, 9]
>>> statistics.fmean(data)
4.25 >>> statistics.geometric_mean(data)
3.013668912157617 >>> statistics.multimode(data)
[9, 2, 1] >>> statistics.quantiles(data, n=4)
[1.25, 2.5, 8.5]
>>> import random
>>> import statistics
>>> from timeit import timeit >>> # Create 10,000 random numbers
>>> data = [random.random() for _ in range(10_000)] >>> # Measure the time it takes to run mean() and fmean()
>>> t_mean = [timeit("statistics.mean(data)", number=100, globals=globals())
... for _ in range(30)]
>>> t_fmean = [timeit("statistics.fmean(data)", number=100, globals=globals())
... for _ in range(30)] >>> # Create NormalDist objects based on the sampled timings
>>> n_mean = statistics.NormalDist.from_samples(t_mean)
>>> n_fmean = statistics.NormalDist.from_samples(t_fmean) >>> # Look at sample mean and standard deviation
>>> n_mean.mean, n_mean.stdev
(0.825690647733245, 0.07788573997674526) >>> n_fmean.mean, n_fmean.stdev
(0.010488564966666065, 0.0008572332785645231) >>> # Calculate the lower 1 percentile of mean
>>> n_mean.quantiles(n=100)[0]
0.64450132212
- 新增危险语法警告功能
>>> # Python 3.7
>>> version = "3.7"
>>> version is "3.7"
False >>> # Python 3.8
>>> version = "3.8"
>>> version is "3.8"
<stdin>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
False >>> version == "3.8"
True
>>> [
... (1, 3)
... (2, 4)
... ]
<stdin>:2: SyntaxWarning: 'tuple' object is not callable; perhaps you missed a comma?
Traceback (most recent call last): File "<stdin>", line 2, in <module>
TypeError: 'tuple' object is not callable
优化
>>>
>>> import collections
>>> from timeit import timeit
>>> Person = collections.namedtuple("Person", "name twitter")
>>> raymond = Person("Raymond", "@raymondh") >>> # Python 3.7
>>> timeit("raymond.twitter", globals=globals())
0.05876131607996285 >>> # Python 3.8
>>> timeit("raymond.twitter", globals=globals())
0.0377705999400132
>>> import sys >>> # Python 3.7
>>> sys.getsizeof(list(range(20191014)))
181719232 >>> # Python 3.8
>>> sys.getsizeof(list(range(20191014)))
161528168
https://docs.python.org/3.8/whatsnew/3.8.html#porting-to-python-3-8
https://www.python.org/downloads/release/python-380/
https://realpython.com/python38-new-features/ https://docs.python.org/3.8/whatsnew/3.8.html
◆
精彩推荐
◆

推荐阅读
网红“AI大佬”被爆论文剽窃,Jeff Dean都看不下去了
AI大佬“互怼”:Bengio和Gary Marcus隔空对谈深度学习发展现状
有了这套模板,再不担心刷不动LeetCode了
Google图嵌入工业界最新大招,高效解决训练大规模深度图卷积神经网络问题
太鸡冻了!我用Python偷偷查到暗恋女生的名字
苹果 5G 芯片“难产”
【角度刁钻】如果把线程当作一个人来对待,秒懂
C 语言这么厉害,它自身是用什么语言写的?
一文了解超级账本DLT、库、开发工具有哪些, Hyperledger家族成员你认识几个?

你点的每个“在看”,我都认真当成了AI
相关文章:
TensorRT Samples: MNIST(serialize TensorRT model)
关于TensorRT的介绍可以参考: http://blog.csdn.net/fengbingchun/article/details/78469551 这里实现在构建阶段将TensorRT model序列化存到本地文件,然后在部署阶段直接load TensorRT model序列化的文件进行推理,mnist_infer.cpp文件内容…

【mysql错误】用as别名 做where条件,报未知的列 1054 - Unknown column 'name111' in 'field list'...
需求:SELECT a AS b WHRER b1; //这样使用会报错,说b不存在。 因为mysql底层跑SQL语句时:where 后的筛选条件在先, as B的别名在后。所以机器看到where 后的别名是不认的,所以会报说B不存在。 这个b只是字段a查询结…

C++2年经验
网络 sql 基础算法 最多到图和树 常用的几种设计模式,5以内即可转载于:https://www.cnblogs.com/liujin2012/p/3766106.html
在Caffe中调用TensorRT提供的MNIST model
在TensorRT 2.1.2中提供了MNIST的model,这里拿来用Caffe的代码调用实现,原始的mnist_mean.binaryproto文件调整为了纯二进制文件mnist_tensorrt_mean.binary,测试结果与使用TensorRT调用(http://blog.csdn.net/fengbingchun/article/details/…

142页ICML会议强化学习笔记整理,值得细读
作者 | David Abel编辑 | DeepRL来源 | 深度强化学习实验室(ID: Deep-RL)ICML 是 International Conference on Machine Learning的缩写,即国际机器学习大会。ICML如今已发展为由国际机器学习学会(IMLS)主办的年度机器…

CF1148F - Foo Fighters
CF1148F - Foo Fighters 题意:你有n个物品,每个都有val和mask。 你要选择一个数s,如果一个物品的mask & s含有奇数个1,就把val变成-val。 求一个s使得val总和变号。 解:分步来做。发现那个奇数个1可以变成&#x…

html传參中?和amp;
<a href"MealServlet?typefindbyid&mid<%m1.getMealId()%> 在这句传參中?之后的代表要传递的參数当中有两个參数第一个为type第二个为mid假设是一个參数就不用加&假设是多个參数须要加上&来传递

实战:手把手教你实现用语音智能控制电脑 | 附完整代码
作者 | 叶圣出品 | AI科技大本营(ID:rgznai100)导语:本篇文章将基于百度API实现对电脑的语音智能控制,不需要任何硬件上的支持,仅仅依靠一台电脑即可以实现。作者经过测试,效果不错,同时可以依据…

C++/C++11中左值、左值引用、右值、右值引用的使用
C的表达式要不然是右值(rvalue),要不然就是左值(lvalue)。这两个名词是从C语言继承过来的,原本是为了帮助记忆:左值可以位于赋值语句的左侧,右值则不能。 在C语言中,二者的区别就没那么简单了。一个左值表达式的求值结…

Could not create the view: An unexpected exception was thrown. Myeclipse空间报错
转载于:https://blog.51cto.com/82654993/1424339

Banknote Dataset(钞票数据集)介绍
Banknote Dataset(钞票数据集):这是从纸币鉴别过程中的图像里提取的数据,用来预测钞票的真伪的数据集。该数据集中含有1372个样本,每个样本由5个数值型变量构成,4个输入变量和1个输出变量。小波变换工具用于从图像中提取特征。这是…

快速适应性很重要,但不是元学习的全部目标
作者 | Khurram Javed, Hengshuai Yao, Martha White译者 | Monanfei出品 | AI科技大本营(ID:rgznai100)实践证明,基于梯度的元学习在学习模型初始化、表示形式和更新规则方面非常有效,该模型允许从少量样本中进行快速适应。这些方…

面试题-自旋锁,以及jvm对synchronized的优化
背景 想要弄清楚这些问题,需要弄清楚其他的很多问题。 比如,对象,而对象本身又可以延伸出很多其他的问题。 我们平时不过只是在使用对象而已,怎么使用?就是new 对象。这只是语法层面的使用,相当于会了一门编…

DNS解析故障
在实际应用过程中可能会遇到DNS解析错误的问题,就是说当我们访问一个域名时无法完成将其解析到IP地址的工作,而直接输入网站IP却可以正常访问,这就是因为DNS解析出现故障造成的。这个现象发生的机率比较大,所以本文将从零起步教给…

cinder存储服务
一、cinder 介绍: 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 1、通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据࿰…
Ubuntu 14.04 64位机上配置Android Studio操作步骤
Android Studio是一个为Android平台开发程序的集成开发环境。2013年5月16日在Google I/O上发布,可供开发者免费使用。Android Studio基于JetBrains IntelliJ IDEA,为Android开发特殊定制,并在Windows、OS X和Linux平台上均可运行。1. 从 htt…

大规模1.4亿中文知识图谱数据,我把它开源了
作者 | Just出品 | AI科技大本营(ID:rgznai100)人工智能从感知阶段逐步进入认知智能的过程中,知识图谱技术将为机器提供认知思维能力和关联分析能力,可以应用于机器人问答系统、内容推荐等系统中。不过要降低知识图谱技术应用的门…

使用CSS 3创建不规则图形
2019独角兽企业重金招聘Python工程师标准>>> 前言 CSS 创建复杂图形的技术即将会被广泛支持,并且应用到实际项目中。本篇文章的目的是为大家开启它的冰山一角。我希望这篇文章能让你对不规则图形有一个初步的了解。 现在,我们已经可以使用CSS…

谷歌丰田联合成果ALBERT了解一下:新轻量版BERT,参数小18倍,性能依旧SOTA
作者 | Less Wright编译 | ronghuaiyang来源 | AI公园(ID:AI_Paradise)【导读】这是来自Google和Toyota的新NLP模型,超越Bert,参数小了18倍。你以前的NLP模型参数效率低下,而且有些过时。祝你有美好的一天。谷歌Resear…

C++中extern C的使用
C程序有时需要调用其它语言编写的函数,最常见的是调用C语言编写的函数。像所有其它名字一样,其它语言中的函数名字也必须在C中进行声明,并且该声明必须指定返回类型和形参列表。对于其它语言编写的函数来说,编译器检查…

Linux之tmpwatch命令
1、tmpwatch命令功能简介[rootvms002 /]# whatis tmpwatch tmpwatch (8) - removes files which havent been accessed for a period of... #删除一段时间内未被访问的文件tmpwatch删除最近一段时间内没有被访问的文件,时间以小时为单位,节省磁盘空间。…

你不得不知道的Visual Studio 2012(1)- 每日必用功能
2019独角兽企业重金招聘Python工程师标准>>> Visual Studio 2012已经正式发布,有很多花哨的新特性,也有很多方便使用者的新功能,当然也有负面声音。对于我们程序员,最关心的还是如何快速掌握VS2012,用于平时…

C++11中std::unique_lock的使用
std::unique_lock为锁管理模板类,是对通用mutex的封装。std::unique_lock对象以独占所有权的方式(unique owership)管理mutex对象的上锁和解锁操作,即在unique_lock对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而unique…

为何Google将几十亿行源代码放在一个仓库?| CSDN博文精选
作者 | Rachel Potvin,Josh Levenberg译者 | 张建军编辑 | apddd【AI科技大本营导读】与大多数开发者的想象不同,Google只有一个代码仓库——全公司使用不同语言编写的超过10亿文件,近百TB源代码都存放在自行开发的版本管理系统Piper中&#…

小小hanoi
为什么80%的码农都做不了架构师?>>> View Code #include " iostream " using namespace std; int k 0 ; void hanoi( int m , char a , char b, char c){ if (m 1 ) { k ; printf( " %c->%c " ,a , c); return…

Unity3D心得分享
本篇文章的内容以各种tips为主,不间断更新 2019/05/10 最近更新: 使用Instantiate初始化参数去实例对象 Unity DEMO学习 Unity3D Adam Demo的学习与研究 Unity3D The Blacksmith Demo部分内容学习 Viking Village维京村落demo中的地面积水效果 Viking V…

django搭建示例-ubantu环境
python3安装--------------------------------------------------------------------------- 最新的django依赖python3,同时ubantu系统默认自带python2与python3,这里单独安装一套python3,并且不影响原来的python环境 django demo使用sqlite3,…

C++11中std::lock_guard的使用
互斥类的最重要成员函数是lock()和unlock()。在进入临界区时,执行lock()加锁操作,如果这时已经被其它线程锁住,则当前线程在此排队等待。退出临界区时,执行unlock()解锁操作。更好的办法是采用”资源分配时初始化”(RAII)方法来加…

OpenAI机械手单手轻松解魔方,背靠强化学习+新技术ADR
编译 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】10月15日,人工智能研究机构OpenAI发布了一条机械手单手解魔方的视频。这个自学式的类人机器人手臂名为 Dactyl,不仅可以单手解魔方,甚至能在外加各种干扰&#x…

AMD and CMD are dead之js模块化黑魔法
缘由 在2013-03-06 13:58的时候,曾甩下一片文章叫:《为什么不使用requirejs和seajs》,并放下豪言说发布一款完美的模块化库,再后来就把那篇文章删了,再然后就没有然后。该用seajs还用seajs,甚至我码的SCJ都…