我是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”?
答案 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'])