断言是什么意思?它是如何使用的?
当前回答
其他人已经为您提供了文档链接。
您可以在交互式shell中尝试以下操作:
>>> assert 5 > 2
>>> assert 2 > 5
Traceback (most recent call last):
File "<string>", line 1, in <fragment>
builtins.AssertionError:
第一个语句什么都不做,而第二个语句引发异常。这是第一个提示:断言用于检查在代码的给定位置(通常是函数的开始(前置条件)和结束(后置条件)中应该为真条件。
断言实际上与契约编程高度相关,这是一种非常有用的工程实践:
http://en.wikipedia.org/wiki/Design_by_contract。
其他回答
assert语句有两种形式。
简单形式assert <expression>相当于
if __debug__:
if not <expression>: raise AssertionError
扩展形式assert <expression1>, <expression2>等价于
if __debug__:
if not <expression1>: raise AssertionError(<expression2>)
def getUser(self, id, Email):
user_key = id and id or Email
assert user_key
可用于确保在函数调用中传递参数。
断言是什么意思?它是如何使用的?
这里有很好的答案,但不是问题的第二部分。尽管有多年的实践经验,但我直到最近才明白断言的目的。
其他人已经解释了如何使用assert,所以我非常简短。下面是它的用法:
assert condition, "error message"
不要使用圆括号,assert是关键字,不是函数。
assert (condition, "error message") # wrong: this never fails!
这里给出了如何使用assert的一个很好的解释:http://wiki.c2.com/?WhatAreAssertions assert的目的是在代码中声明不变量。不变式是一种永远不应该违反的条件,除非代码中存在错误。把它们看作是可执行的文档。这与面向对象编程如何封装来自外部世界的代码密切相关。
简单地说:对于其他开发人员,您应该在代码中像使用注释一样使用断言。但它比注释要好,“注释”实际上是在调试模式下检查的!如果删除断言后,您的程序不能正常工作,那么您使用错误。事实上,如果你打开优化(Python -O), Python将忽略所有的断言。所以不要依赖他们。特别是,不要使用断言来验证用户输入。而是引发异常。
这里有一个很好的例子来把它们联系在一起。让我们假设您希望在代码中有一个特殊的数字类,它表示称为PositiveInt的正整数。你为什么想要那个?有许多函数使用正整数作为参数。通过在代码中使用PositiveInt,您不必在每个函数中反复检查输入是否有效。它由PositiveInt保证。粗略的实现如下所示
class PositiveInt(int):
# int is immutable, so we have to override new and not init
def __new__(cls, value):
if value <= 0:
raise ValueError(f"{value} is not positive")
assert value > 0, "value must be positive"
return super(PositiveInt, cls).__new__(cls, value)
如你所见,我用了两个if…:提高……用于输入验证和函数末尾的断言。这似乎是多余的,但仅在这个微不足道的示例中!假设函数稍微长一些,也更复杂一些,因此您是否正确地验证了输入并不明显。末尾的断言确保检测到验证代码中的错误。它还使另一个程序员更清楚地了解验证代码的意图,而不是简单的注释。
总之:像使用注释一样使用assert。到处使用!它很便宜,如果它成为用户的性能问题,你可以在发行版中使用python -O关闭它。
Python assert基本上是一种调试辅助工具,用于测试代码内部自检的条件。 当代码进入不可能的边缘情况时,Assert使调试变得非常容易。断言检查那些不可能的情况。
假设有一个函数计算商品折扣后的价格:
def calculate_discount(price, discount):
discounted_price = price - [discount*price]
assert 0 <= discounted_price <= price
return discounted_price
这里,discounted_price永远不能小于0并且大于实际价格。因此,如果上述条件被违反,assert将引发断言错误,这有助于开发人员识别发生了不可能的事情。
希望能有所帮助。
如果你想知道python中保留函数的确切功能,输入help(enter_keyword)
如果您正在输入保留关键字,请确保将其输入为字符串。
推荐文章
- 得到熊猫栏目的总数
- 从pandas DataFrame中删除名称包含特定字符串的列
- Mock vs MagicMock
- 如何阅读一个。xlsx文件使用熊猫库在iPython?
- 如何访问熊猫组由数据帧按键
- Pandas和NumPy+SciPy在Python中的区别是什么?
- 将列表转换为集合会改变元素的顺序
- 如何在matplotlib更新一个情节
- TypeError: ` NoneType `对象在Python中不可迭代
- 'throw'和'throw new Exception()'的区别
- 如何在Vim注释掉一个Python代码块
- python标准库中的装饰符(特别是@deprecated)
- 如何从外部访问本地Django web服务器
- 删除字符串的最后3个字符
- 在python中执行no-op的标准方法是什么?