对于大多数人来说,这可能是常识,但我发现非常非常难以掌握这一点。如果您创建一个功能,如
def one():
x=1
y=2
z=3
h=33
j=454
l=353
m=898
然后假设我有另一个函数,def two():,我想将def one()中的变量用于def 2,我还在def two()中创建了两个新变量。我该怎么做呢。
然后,假设我有第三个函数def three(),我如何使用def 1中的变量和def 2中的def 2?我使用的方法非常低效,可能比需要的更多。我所做的是在def 2中,将def中的所有变量添加到def 2的参数中,然后我还在函数2的def中调用函数。我知道在SO上有很多线程,我看了通过他们中的许多人,他们不仅仅是这样。他们使用我不熟悉的非常具体和高级的代码,因此不理解。我的例子非常直接和简单,我相信如果回答它会帮助很多新人。谢谢!
编辑:我不想要一种“简单”的方式,最终使用我不熟悉的高级代码。我想要一种易于理解的“高效”方法。
答案 0 :(得分:3)
我认为最好的解决方案是为您的代码(类,方法和继承)采用OO范例。
使用简单函数,您可以选择使用全局变量和本地范围。
答案 1 :(得分:2)
数据作为参数传递给函数,而作为返回值传递给函数。函数的理想情况是当您不需要访问函数范围之外的变量时。
如果你有很多数字,或许你应该将它们声明为一个列表(更容易管理),然后将它们作为参数和函数传递给函数,作为转换结果,作为返回值?
答案 2 :(得分:1)
您可以使用global
关键字来创建和修改全局变量,如下所示:
In [1]: def one():
...: global a
...: a = 1
...:
In [2]: one()
In [3]: a
Out[3]: 1
然而,拥有那么多(或甚至任何)全局变量并不是一个好习惯。您可以声明一个全局list
并将所有这些值保留在其中,这样会更清晰;虽然您应该尽量坚持使用函数参数并返回值,如Andrew的回答中所述。
答案 3 :(得分: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
答案 4 :(得分: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) #