如何根据类或组将变量分配给函数?

时间:2018-06-12 20:17:15

标签: python

我想做的是这样的事情:

if (color = "red"):
    a = 1
    b = 2
    c = 3
    break

if (color = "blue"):
    a = 5
    b = 6
    c = 7
    break

color = "blue"
z = a + b + c


print("The answer is = " + str(z))

我有几个类想要赋值变量,然后根据我定义的类来拉取这些值。这可能吗?

5 个答案:

答案 0 :(得分:1)

假设您将 class 表示为而不是编程定义,则可以使用字典表示可变数量的变量。

在这种情况下,您可以使用嵌套字典并访问O(1)复杂度的值。

getFactory()

或者,更简单地说,您可以通过d = {'red': {'a': 1, 'b': 2, 'c': 3}, 'blue': {'a': 5, 'b': 6, 'c': 7}} color = 'blue' d_color = d[color] z = d_color['a'] + d_color['b'] + d_color['c'] print("The answer is = " + str(z)) # The answer is = 18 sum对字典中的所有值求和:

dict.values

答案 1 :(得分:1)

我认为简单的解决方案是使用字典,为每种颜色分组值:

program main
    use global
    implicit none

    type(myVar_) :: ans

    Ni = 10
    Nj = 20

    if (allocated(ans%P)) deallocate(ans%P)
    allocate(ans%P(1:Ni, 1:Nj))

    call foo(ans)

    print *, P
end program main

module global
    integer, parameter :: dp=kind(0.d0)

    integer :: Ni, Nj

    type myVar_
        real(dp), allocatable :: P(:,:)
    end type myVar_

end module global

subroutine foo(myVar)
    use global
    implicit none

    type(myVar_) :: myVar

    call foo2(myVar%P)

end subroutine

subroutine foo2(P)
    use global
    implicit none

    real(dp), intent(inout) :: P(:,:)

    ! do calculations for P
end subroutine foo2

如果值的数量与下一个颜色不同:

classes = {'red':[1,2,3], 'blue':[5,6,7]} #etc...
color='red'
a,b,c = classes[color]
z = a + b + c
print('The answer is', z)

答案 2 :(得分:1)

我猜你要问的是如何将所有if语句(可能是你的真实代码有两个以上?)放到一个函数中,然后调用那个函数? (而那个“类”你并不是用Python / OO术语来表达它,而只是......某些价值观?)

如果是这样的话:

# Define a function that takes color as a parameter
def colorvals(color):
    # Indent your existing if statements to make them part of the function.
    # You also need to fix the = SyntaxError; use == for comparison
    if (color == "red"):
        a = 1
        b = 2
        c = 3
        break

    if (color == "blue"):
        a = 5
        b = 6
        c = 7
        break

    # At the end, return the values to the caller.
    return a, b, c

color = "blue"
# Now you can call that function and use the results.
a, b, c = colorvals(color)
z = a + b + c

有一些方法可以改善这一点:

  • 每个if中的parens都没有意义。
  • break s什么都不做。
  • a, b, c = 1, 2, 3 ...或只是return 1, 2, 3
  • 可能更清楚
  • 对于第一个条件之后的每个条件,您可能需要elif而不是if
  • 你可能想要一些错误处理,所以如果你打电话给colorvals('not a color'),你会得到一个比UnboundLocalError更有意义的例外。
  • 您应该考虑使用dict而不是if语句链。

但是我对现有代码做了最小的改动,做了我猜你想做的事。

答案 3 :(得分:0)

一种方法是让一个函数返回你的三个值,并用函数

设置a,b,c
def set_colour(colour_string):

    if colour_string == "red":
        return 1,2,3

    if colour_string == "blue":
        return 5,6,7

    Print("Invalid colour string")
    return None

a,b,c = set_colour("red")

z = a + b + c
print(str(z))

a,b,c = set_colour("blue")

z = a + b + c
print(str(z))

希望这有帮助

答案 4 :(得分:0)

如果你试图像@abarnert所提到的那样,你将这些条件语句放在一个函数中并用你想要的任何颜色调用它。

def color_sum(color):
    if color == "red":
        a = 1
        b = 2
        c = 3
    else:
        a = 5
        b = 6
        c = 7
    z = a + b + c
    print("The answer is = " + str(z))

color_sum("blue")