如何在python中自动插入函数中的所有变量?

时间:2016-03-03 17:51:01

标签: python

我是python的新手,我有一个问题: 如果我有很多变量,我怎么能在一个函数中添加所有变量而不用逐个声明“global”每个变量?

map = [0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0]

例如,如何在没有“全球你好,世界,如何,你,你”的情况下在函数中插入“hello,world,how,are,you”?

3 个答案:

答案 0 :(得分:0)

只有在为值分配时,才需要使用global。没有它你可以打印它们。如果你想使用参数,你可以这样做:

def print_hello_world(hello, world, how, are, you):
    print(hello, world, how, are, you)

h1 = "hello"
w = "world"
h2 = "how"
a = "are"
y = "you"
print_hello_world(h1, w, h2, a, y)

我使用了不同的变量名来证明它是正在使用的参数。您也可以使用相同的变量名称。它没有什么区别。

答案 1 :(得分:0)

你应该研究一下Python scoping rules

在您的特定示例中,您不必将这些变量声明为全局变量,因为python将首先查找本地范围,无法找到变量,然后它将搜索封闭范围并找到变量那里并使用它们。

如果您决定在函数中分配任何这些名称,那么您将遇到问题:

>>> x = 42
>>> def wont_work():
...     x = x + 1
...
>>> wont_work()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in wont_work
UnboundLocalError: local variable 'x' referenced before assignment

在这种情况下,您 需要声明global x

您还可以将变量定义为函数参数。您可以将它们放在函数定义的括号内:

def print_hello_world(hello, world, how, are, you):
    print(hello, world, how, are, you)

您必须更改调用该函数的方式。假设您正在使用已定义的代码,则可以通过以下两种方式之一来完成此操作。第一个很典型:

print_hello_world(hello, world, how, are you)

第二个使用keyword argument unpacking

print_hello_world(**globals())

但这有点粗略。你也可以用稍微不同的方式使用*args和参数解包:

def print_hello_world(*args):
    print(*args)

print_hello_world(hello, world, how, are, you, 'today', 'you', 'can', 'add', 'many things here')

答案 2 :(得分:-1)

使用参数。

msg = subprocess.call([ '/Users/admirmonteiro/tmp/tmp.praat','/Users/admirmonteiro/bin/Praat'])