Python定义函数参数传递

时间:2012-11-01 07:08:03

标签: python function parameters definition

对于大多数人来说,这可能是常识,但我发现非常非常难以掌握这一点。如果您创建一个功能,如

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上有很多线程,我看了通过他们中的许多人,他们不仅仅是这样。他们使用我不熟悉的非常具体和高级的代码,因此不理解。我的例子非常直接和简单,我相信如果回答它会帮助很多新人。谢谢!

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

5 个答案:

答案 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) # 
相关问题