【问题标题】:Returning values from functions in Python [closed]从 Python 中的函数返回值 [关闭]
【发布时间】:2019-08-18 22:58:42
【问题描述】:

我在 Python 中有一个函数,在同一个函数中我有多个 if 语句。可以说我想从我的函数中返回一个值。我创建了一个局部变量并在 if 语句中更改它。问题是我需要在函数中定义它,这样它才能在每个 if 语句中工作,但与 C 不同,我不能使用 int a, b, c; 而是我必须给它们一个值。问题是,如果没有一个 if 语句为真,则该值将被识别。

一个明确的解决方案是将全局值作为函数的参数,但我不想这样做,因为我不需要它们的值,我只想更改它。

velocity = 5
distance = 6

def calc(distance):
    # i would need to say velocity = 5 here
    distance + velocity # this does nothing but uses velocity so code cant run 
    if distance < 7 :   # without defining velocity first (in first comment)
        velocity = 6
    elif distance < 10:
        velocity = 7
    return velocity

【问题讨论】:

  • 如果没有一个 if 语句为真,预期的结果是什么?返回None?
  • 这还不清楚。定义与局部变量同名的全局变量的动机是什么?如果函数需要一些关于velocity当前值的信息,只需将其作为函数的参数即可。
  • @TomasFarias 第一条评论中的值。代码实际上是按照我第一次编写的方式运行的,所以我现在对其进行了编辑,对此感到抱歉
  • 在 C 中,在函数体中声明 int a,b,c; 是未定义的行为,而不是给 a 一个值,然后有类似 return a; 的东西。您似乎在问如何在 Python 中复制未定义的行为。听起来充其量是XY problem
  • 为什么不使用速度作为参数?如果你真的不希望它成为函数的参数,那么构建一个以velocity 作为成员变量并以calc 作为方法的对象。

标签: python function


【解决方案1】:

如果你真的不希望velocity成为函数的参数,那么构建一个将velocity作为成员变量并以calc作为方法的对象。

【讨论】:

    【解决方案2】:

    在编写 Python 函数时,最好努力遵循以下设计原则,这些原则来自函数式编程。

    1. 函数的输出应取决于其输入。这意味着影响结果的所有内容都应该是函数的参数。这通常很容易做到,并使函数自记录。当你写def foo(x, y, z)时,很明显结果取决于x、y和z。

    2. 一个函数最好应该只返回它的输出。所以它不应该使用global 来修改其范围之外的变量,也不应该修改可变参数。 (这在实践中并不总能实现,但努力争取是好的。)

    主要优点是这些功能可以在应用程序的其余部分之外进行测试和调试,使这些任务更加更容易。

    在这种情况下,

    def calc(distance)
    

    应该是:

    def calc(distance, velocity)
    

    【讨论】:

      猜你喜欢
      • 2013-12-18
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2021-07-17
      相关资源
      最近更新 更多