如何在Python中的函数中修改局部变量?

时间:2019-09-12 14:57:12

标签: python

我想在导入的函数中更改参数的值而不将其作为输入。例如:

# in def_function.py
def test(x):
    parameter1 = 50 # default value
    return parameter1*x

# in main.py
from def_function import test
print(test(1)) # It should give me 50
parameter1 = 10 # changing the value of parameter1 in test function
print(test(1)) # It should give me 10

2 个答案:

答案 0 :(得分:7)

函数内部的

parameter1位于其自己的scope中。它与函数定义之外的parameter1不同。

要执行您要执行的操作,请在函数定义中添加keyword argument,并为参数提供默认值:

# in def_function.py
def test(x, parameter1=50):
    return parameter1*x

# in main.py
from def_function import test
print(test(1)) # It gives 50
print(test(1, parameter1=10)) # It gives 10 (as a keyword arg)
print(test(1, 10)) # It gives 10 (as a positional arg)

如果可以帮助,请不要使用全局变量。

答案 1 :(得分:1)

另一种选择是使用 nonlocal 关键字。你可以在你的代码中这样做:

def main():
    def test(x):
        nonlocal parameter1
        return parameter1*x

    parameter1 = 50 # default value
    print(test(1)) # It should give me 50
    parameter1 = 10 # changing the value of parameter1 in test function
    print(test(1)) # It should give me 10
    
main()

在此处阅读更多信息: https://www.w3schools.com/python/ref_keyword_nonlocal.asp