0

对于你们中的大多数人来说,这可能是常识,但我发现很难掌握这一点。如果您创建一个函数,例如

def one():
    x=1
    y=2
    z=3
    h=33
    j=454
    l=353
    m=898

然后假设我有另一个函数 def two():,我想将 def one() 中的变量用于 def two,并且我还在 def two() 中创建了两个新变量。我将如何去做。

然后,假设我有第三个函数 def three(),我将如何将 def 1 和 def 2 中的变量用于 def 3?我使用的方法效率非常低,而且可能做的比需要的多。我所做的是在 def 2 中,将 def 1 中的所有变量添加到 def 2 的参数中,然后我还在函数 2 的 def 中调用函数 1。我知道 SO 上有很多线程,我看过通过他们中的许多人,他们并不简单。他们使用我不熟悉的非常具体和高级的代码,因此无法理解。我的例子非常简单明了,我相信如果回答它会帮助很多新手。谢谢!

编辑:我不想要一种最终使用我不熟悉的高级代码的“简单”方式。我想要一种简单易懂的“高效”方法。

4

5 回答 5

3

我认为最好的解决方案是为您的代码(类、方法和继承)采用 OO 范式。

使用简单的函数,您可以在使用全局变量和局部范围之间进行选择。

于 2012-11-01T07:10:00.743 回答
2

数据作为参数传入函数,从函数传出作为返回值。函数的理想情况是您无需访问函数范围之外的变量。

如果你有很多数字,也许你应该将它们声明为一个列表(更易于管理),然后将它们作为参数传递到函数中,作为转换结果传递到函数之外,作为返回值?

于 2012-11-01T07:12:16.703 回答
1

可以使用global关键字来创建和修改全局变量,如下所示:

In [1]: def one():
   ...:     global a
   ...:     a = 1
   ...: 

In [2]: one()

In [3]: a
Out[3]: 1

但是,拥有这么多(甚至可能是任何)全局变量并不是一个好的做法。您可以声明一个全局list并将所有这些值保留在其中,这样会更干净;尽管您应该尽力坚持使用 Andrew 的回答中概述的函数参数和返回值。

于 2012-11-01T07:14:26.297 回答
0

在完全不清楚您要做什么的情况下,这是一种简单的方法:

class One(object):
    x=1
    y=2
    z=3
    h=33
    j=454
    l=353
    m=898


class Two(One):
    n=42
    o=1337

print Two.x, Two.n  # 1, 42
于 2012-11-01T08:05:39.873 回答
0

如果我了解您需要什么,那么我认为 python 带给您的最简单方法是下一个->

class Helper:pass 

# use name space
def one(a):  
    a.x=1
    a.y=2
    a.z=3
    a.h=33
    a.j=454
    a.l=353
    a.m=898

def two(a):
    a.y=7

a=Helper()

one(a)
print(a.x,a.y)
two(a)
print(a.x,a.y)

#-------------------------------------------------------------------
# I think you have solution and dont need to read next lines :)
# next lines are just bonus ;)
#-------------------------------------------------------------------

# you could use more independent "namespaces"
b=Helper()
one(b)
print(b.y)
print(a.y)  # "namespace a" is unchanged

# if you like to see which attributes are defined you could use funciton dir
# (under python3 it is a little more complicated)
print(dir(a))
print(dir(b))

# please dont do next lines at home!!! :P:P:P (__builtins__ is special you could get unwanted results!) 
one(__builtins__)

print(x) # 
于 2012-11-01T08:41:40.050 回答