【问题标题】:Use return value of a function使用函数的返回值
【发布时间】:2013-10-15 22:10:52
【问题描述】:

我最近开始编程,我是从 python 开始的。我的问题是:如何在另一个函数中使用函数的结果?

def eklid(p, a, b,):
    x = [1, 0]
    y = [0, 1]
    r = [a, b]
    q = [0]
    n = 0
    while r[n+1] != 0:
        q.append(r[n] // r[n+1])
        r.append(r[n] % r[n+1])
        x.append(x[n] - x[n+1] * q[n+1])
        y.append(y[n] - y[n+1] * q[n+1])

        if p == 0:
            print(r[n], "=", r[n+1], "*", q[n+1], "+", r[n+2])
        elif p == 1:    # extended print
            print(r[n+2], "\t", x[n+2], "\t", y[n+2], "\t", r[n+2], "=", a, "*", x[n+2], "+", b, "*", y[n+2])
        elif p == -1:
            k =1
        else:
            print("wrong input")
        n += 1
    return x, y, r, q, n,

我有这个函数eklid(),我想在这个函数中使用xr

def cong_solv(x, r, b,):
    result = x/r
    int_result = int(result)
    return int_result

我该怎么做?

【问题讨论】:

    标签: python function return return-value


    【解决方案1】:

    在python中,当你返回多个变量时,它返回一个元组。 您可以通过其索引 (returned_value[0], returned_value[1]) 检索值,或者像 Mike Driscoll 所说的那样解包元组 (a, b, c, d = eklid(h, i, k))。

    由于我得到了两个反对票,我将给你更好的(我希望)解释: 每次返回多个值时,它都会返回一个tuple

    def my_function():
       a = 10
       b = 20
       return a, b
    
    print type(my_function()) # <type 'tuple'>
    

    但如果你只返回一个值:

    def my_function():
        a = 10
        return a
    
    print type(my_function()) # <type 'int'>
    

    所以如果你想使用你的价值,你可以:

    像这样解压元组值

    a, b = my_function()
    

    通过这种方式,您可以按照在 my_function 中返回的顺序获取返回值。

    重写你的代码,你可以这样做:

    a, b, c = eklid(10, 20, 30) # it will return a tuple
    

    并调用您的其他函数:

    cong_solv(a, b, 20)
    

    老实说,我会返回dict。使用 dict 你可以是明确的,因为你的值有键名。

    在您的 eklid 返回函数中:

    return d # d = {"what_x_means": x,
             #      "what_y_means": y,
             #      "what_r_means": r,
             #      "what_q_means": q, 
             #      "what_n_means": n}
    

    并检索其密钥:

    d["what_x_means"]
    d["what_r_means"]
    

    【讨论】:

    • 有什么理由拒绝投票吗?我是第一个说它返回一个元组的人。 OP不知道这样的事情。我认为这是他的问题的目标。
    • 将您的答案与获得支持的答案进行比较,并注意差异。第一个回答并不意味着你的回答是最好的。顺便说一句,考虑到 OP 的知识水平,在不解释其含义的情况下向 OP 引入一个新术语可能并不理想。您的部分答案只是重复了另一个人在他们的答案中所说的话,这并不是特别有用。
    【解决方案2】:

    类似于How do you return multiple values in Python?

    1. 作为元组 (x,y,r....) 或数组返回,并分别分配给元组/数组。
    2. 或将它们分配给类变量并访问它们

    【讨论】:

      【解决方案3】:

      一种方法是从 cong_solv() 函数内部调用 eklid() 函数。像这样的东西应该可以工作:

      def cong_solv(x, r, b):
         p = "foo"
         b = "bar"
         x, y, r, q, n = eklid(p, a, b)
      
         result = x/r 
         int_result = int(result) 
         return int_result
      

      【讨论】:

        【解决方案4】:
        # Here, a=x, b=y, c=r, d=q, e=n
        a, b, c, d, e = eklid(h, i, k)
        
        # Assuming based on your function definitions you want the
        # same value as the third argument
        final_result = cong_solv(a, c, k)
        

        您从eklid 获取返回值并将它们保存到变量中。然后使用这些变量调用下一个函数。

        当然,在实际代码中,您应该比我在本示例中所做的更好地命名变量。我故意没有将变量称为与函数内部相同的名称,以证明您不必这样做。

        【讨论】:

          猜你喜欢
          • 2016-05-16
          • 2015-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-24
          • 2014-01-22
          • 1970-01-01
          相关资源
          最近更新 更多