将函数调用链返回的值赋给变量

2024-06-26 14:15:45 发布

您现在位置:Python中文网/ 问答频道 /正文

如果函数返回的值不是None变量,我想给它赋一些值,或者赋不同的值,或者另一个不同的值。。。 我只想调用函数一次。你知道吗

我目前使用tryexcept TypeError,但只适用于两个选项,而且不是很干净。你知道吗

try:
    value = someFunction()["content"]
except KeyError:
    value = someOtherFunction()["content"]

Tags: 函数nonevalue选项content调用函数trykeyerror
3条回答

由于返回的值是dict类型,因此可以使用dict.get在一行中实现与以下相同的行为:

value = someFunction().get("content", someOtherFunction()["content"])

但是如果您只处理问题中提到的两个值,那么这将是适用的。为了处理多个函数链,您可以创建一个函数列表,并在返回的dict对象中检查“key”,如下所示:

my_functions = [func1, func2, func3]

for func in my_functions:
    returned_val = func()
    if 'content' in returned_val:  # checks for 'content' key in returned `dict`
        value = returned_val['content']
        break

这需要一个外部库,但您可以使用^{}

from iteration_utilities import first

# The logic that you want to execute for each function (it's the same for each function, right?)
def doesnt_error(func):
    try:
        return func()['content']
    except (KeyError, TypeError):
        return False

# some sample functions
func1 = lambda: None
func2 = lambda: {}
func3 = lambda: {'content': 'what?'}

# A tuple containing all functions that should be tested.
functions = (func1, func2, func3)

# Get the first result of the predicate function 
# the `retpred`-argument ensures the function is only called once.
value = first(functions, pred=doesnt_error, retpred=True)

1这是我写的第三方库:^{}

你喜欢这个工作吗?你知道吗

def try_run(func_list, field, default_value):
  for f in func_list:
    try:
      value = f()[field]
      return value
    except (TypeError, KeyError):
      pass
  return default_value

try_run([someFunction, someOtherFunction], 'content', 'no content')

Sample Code

相关问题 更多 >