如何在Python中的函数之间共享值?

时间:2018-02-11 07:00:21

标签: python global-variables

我有以下两个功能:

a = 20
b = 45

def function1():
    coin = np.random.randint(0, 100)
    a2= a+coin
    return  a2


def function2():
    b2= b+coin
    return  b2

但是,我的问题如下:我想在coin内使用随机选择的“function 1”值(在function 2中确定)。

这里的条件是随机选择必须始终在函数1中完成。将coin值传递给function 2而不必在内部调用function 1的最有效方法是什么? function 2

注意function 1只应返回一个a2变量。

3 个答案:

答案 0 :(得分:4)

编辑后

虽然您可以使用全局变量,但我建议您使用类:

class Functions:

    def __init__(self, a, b):
        self.a = a
        self.b = b
        self.coin = 0

    def function1(self):
        self.coin = np.random.randint(0, 100)
        a2 = self.a + self.coin
        return a2

    def function2(self):
        b2 = self.b + self.coin
        return b2

f = Functions(a=20, b=45)
f.function1()
f.function2()

两个功能紧密耦合。因此,一个班级似乎更适合持有它们。理想情况下,功能应该是独立的。另一方面,一个类的方法预计会相互依赖。

旧答案

我建议您为函数使用参数。这使他们独立:

def function1(a):
    coin = np.random.randint(0, 100)
    a2 = a+coin
    return a2, coin

def function2(coin):
    b2 = b+coin
    return  b2

a = 20
b = 45

a2, coin = function1(a)
print(function2(coin))

这一行:

return a2, coin

“返回两个结果”。实际上,它构建了一个中间元组。 这一行:

a2, coin = function1(a)

再次将此元组解包为变量。

答案 1 :(得分:2)

"最容易"方法是让硬币成为全球变量。我认为这可能是需要对代码进行较少更改的解决方案:

a = 20
b = 45
coin = 0       # good practice to always initialize vars

def function1():
    global coin         # will create and use "coin" from the global scope
    coin = np.random.randint(0, 100)
    return a+coin

def function2():
    b2 = b+coin
    return  b2

function1()

function2()

答案 2 :(得分:0)

确定只有一个结果在function1()中,没有一个类,你可以复古找到硬币吗?

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from random import randrange

a = 20
b = 45

def function1():
    coin = randrange(0, 100)
    a2 = a + coin
    return a2


def function2(coin):
    b2 = b + coin
    return b2

coin = function1() - a

f2 = function2(coin)

print("coin: {}".format(coin))
print("f2: {}".format(f2))