当前位置: 首页 > 面试题库 >

Python中的带条件语句

漆雕令秋
2023-03-14
问题内容

有没有一种方法可以用with语句开始代码块,但是有条件地?

就像是:

if needs_with():
    with get_stuff() as gs:

# do nearly the same large block of stuff,
# involving gs or not, depending on needs_with()

为了明确起见,一种情况将在with语句中包含一个块,而另一种可能性将是相同的块,但未包含(即,好像没有缩进)

当然,最初的实验会产生压痕错误。


问题答案:

如果要避免重复代码,并使用3.7(contextlib.nullcontext引入时)甚至3.3(引入时)之前的Python版本contextlib.ExitStack,则可以执行以下操作:

class dummy_context_mgr():
    def __enter__(self):
        return None
    def __exit__(self, exc_type, exc_value, traceback):
        return False

要么:

import contextlib

@contextlib.contextmanager
def dummy_context_mgr():
    yield None

然后将其用作:

with get_stuff() if needs_with() else dummy_context_mgr() as gs:
   # do stuff involving gs or not

您也可以根据get_stuff()返回不同的值needs_with()

(有关在以后的版本中可以做什么的信息,请参阅Mike的答案

从Python 3.7开始,您可以使用contextlib.nullcontext

from contextlib import nullcontext

if needs_with():
    cm = get_stuff()
else:
    cm = nullcontext()

with cm as gs:
    # Do stuff

contextlib.nullcontext几乎只是一个无操作上下文管理器。如果您依赖在as:之后存在的内容,则可以为其传递一个将产生的参数:

>>> with nullcontext(5) as value:
...     print(value)
...
5

否则它将返回None:

>>> with nullcontext() as value:
...     print(value)
...
None

超级整洁,请在此处查看文档:https : //docs.python.org/3/library/contextlib.html#contextlib.nullcontext



 类似资料:
  • 主要内容:if else 如何判断表达式是否成立前面我们看到的代码都是顺序执行的,也就是先执行第1条语句,然后是第2条、第3条……一直到最后一条语句,这称为 顺序结构。 但是对于很多情况,顺序结构的代码是远远不够的,比如一个程序限制了只能成年人使用,儿童因为年龄不够,没有权限使用。这时候程序就需要做出判断,看用户是否是成年人,并给出提示。 在 Python 中,可以使用 if else 语句对条件进行判断,然后根据不同的结果执行不同的代码,这称

  • 程序并非是一成不变的向下执行,有的时候也要根据条件的不同选择不一样的代码,这个时候便用到了分支结构。那么到底如何让程序根据条件的不同选择不一样的代码呢?我们一起来看下: 1. 分支选择结构 1.1 功能与语法 程序可以根据条件执行不同的分支,程序结构如下图所示: 图:条件选择结构 在图中,对条件进行判断: 如果条件为真,执行“条件为真的分支” 如果条件为假,执行“条件为假的分支” Python 提

  • 问题内容: 我试图获得一个if语句从多个条件中触发,而不用不同的触发器多次重写该语句。例如: 您如何将这些内容浓缩成一个陈述? 我试过使用“或”,并且无论输入是否符合任何条件,它都会导致任何raw_input触发语句。 问题答案: 你想做的是 如果您有很多可能性,请选择另一个选项: 由于您使用的是2.7,因此您也可以这样编写(在2.7或3+版本中有效,但在2.6或以下版本中无效): 这使元素成为您

  • 本文向大家介绍浅谈Python的条件判断语句if/else语句,包括了浅谈Python的条件判断语句if/else语句的使用技巧和注意事项,需要的朋友参考一下 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。 比如,输入用户的年龄,根据年龄打印不同的内容。。。 Python程序中,能让计算机自己作出判断的语句就是if语句: 例: 根据python的缩进规则,如果if语句的条件判断为Tr

  • 我试图让if语句从多个条件触发,而不使用不同的触发器多次重写该语句。例如。: 你会如何把这些浓缩成一个陈述? 我尝试过使用'or',它导致任何原始输入触发语句,而不管输入是否匹配任一条件。

  • 问题内容: 在javascript中,当使用带有多个条件的if语句进行测试时,javascript是否会全部测试它们,或者如果已经为false,则在测试所有条件之前会保全吗? 例如: javascript将测试所有这三个条件,还是在看到b不等于1并因此为false之后,将退出该语句? 我从性能的角度出发。例如,如果我正在测试3个复杂的jQuery选择器,那么我不希望jQuery遍历DOM 3次(如