繁体   English   中英

我可以使用 python return function 只返回值到具体的 function

[英]Can I use python return function to only return the value to the specific function

如果我有这个

def fun1:
    a = 2
    b = 3
    return a
    return b     #problem is here
def fun2:
    c = fun1()
print(fun1())

我想将 a return a为默认返回,而 fun1 将 a 返回给所有其他函数,但return b仅适用于返回 fun2 而无其他地方

您可以做的是为 function 创建一个可选参数,该参数决定返回什么值。

def fun1(arg=0):
    a = 2
    if arg != 0:
        a = 3
    return a
def fun2():
    c = fun1(1)
print(fun1())
fun2()

在这里,如果您在没有任何 arguments 的情况下调用 fun1(),它将返回 2。但如果您给它任何 integer 参数 [例如:fun1(2) 或 fun1(1)],它将返回 3。

每当执行return a - 它退出 function fun1

所以这行return b永远不会被执行。

您可以执行以下操作:

def fun1(return_b=False):
    a = 2
    b = 3
    if return_b:
        return b
    else:
        return a

def fun2:
    c = fun1(return_b=True)

在此处阅读有关默认参数值的更多信息。

如果你想返回ab ,你可以返回它们的一个元组: return a, b

一个 function 一次只能返回一个 output。 这意味着如果您在问题中有多个return语句,则只会执行第一个语句,并且不会执行该语句之后编写的任何行。

在您的示例中,您在return b之前输入return a return a ,这意味着 function 只会返回 a 的值,而不会执行return b行。

从您对自己问题的评论中,我可以看到您想先打印,然后希望c a值为 3。为此,您可以这样做-

def fun1():
    a = 2
    b = 3
    print(a)
    return b

def fun2():
    c = fun1()

fun1()

你只需要两个不同的功能。

每个人都只调用fun1() ,但只有fun2()调用fun1a()

def fun1():
    a = 2
    b = 3
    return a

def fun1a():
    a = 2
    b = 3
    return b 

def fun2():
    c = fun1a()
    return c
print(fun1())
print(fun2())

这里只是回答你的奇思妙想:首先通过inspect.currentframe获取当前帧,然后通过当前帧和inspect.getframeinfo获取上一层调用的帧。 返回值中会记录function名称,通过比较function名称可以返回不同的值。

import inspect


def fun1():
    a = 2
    b = 3
    curr_frame = inspect.currentframe()
    back_frameinfo = inspect.getframeinfo(curr_frame.f_back)
    return b if back_frameinfo.function == 'fun2' else a


def fun2():
    return fun1()


print(fun1(), fun2())    # 2 3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM