如何通过嵌套函数修改变量并保留修改结果
如何通过嵌套函数修改变量并保留修改结果
嘿,我来帮你搞定这个问题!先梳理下你现有代码里的小问题,再给你展示嵌套函数修改外部变量并保留结果的正确姿势~
先说说你现有代码里的问题
你的代码目前还不是嵌套函数的结构(是两个独立函数),而且存在几个语法/用法问题:
print test = test.replace("__1__", word)是语法错误,不能在print语句里直接赋值,得先完成赋值再打印- 如果你用的是Python3,没有
raw_input(),要换成input();Python2里没问题,但建议统一用Python3的写法 - 代码末尾的
test_function_2(tes...没写完,推测你是想调用test_function_2(test_function_1()) - 你用了
global操作全局变量,但嵌套函数场景下,我们更常用nonlocal来操作外部函数的变量(而非全局)
嵌套函数修改变量的三种常用方法
1. 使用 nonlocal 关键字(针对外部函数的变量)
如果变量定义在外部函数里,嵌套函数要修改它,就用nonlocal声明,修改后外部函数的变量会同步更新,结果能保留下来。
示例代码:
test_variable = "Hello __1__ !!, I'm good, How about you!!" def outer_function(): # 外部函数的变量,也可以直接用全局变量,但封装在函数内更合理 current_var = test_variable def inner_function(): # 声明要修改的是外部函数的变量 nonlocal current_var word = input("Hi, Enter your word\n") # 修改变量 current_var = current_var.replace("__1__", word) return current_var # 调用嵌套的内部函数 inner_function() # 返回修改后的变量 return current_var # 调用外部函数,得到修改后的结果 updated_var = outer_function() print("修改后的结果:", updated_var) # 全局变量test_variable未被修改,我们操作的是外部函数里的副本 print("原始全局变量:", test_variable)
2. 使用 global 关键字(针对全局变量)
如果你就是想修改全局的test_variable,可以在嵌套函数里用global声明,修改后全局变量的值会永久改变。
示例代码:
test_variable = "Hello __1__ !!, I'm good, How about you!!" def outer_function(): def inner_function(): # 声明要修改的是全局变量 global test_variable word = input("Hi, Enter your word\n") test_variable = test_variable.replace("__1__", word) return test_variable inner_function() # 调用外部函数 outer_function() # 全局变量已经被修改 print("修改后的全局变量:", test_variable)
3. 使用可变对象(比如列表)
列表是可变类型,嵌套函数里修改列表元素不需要nonlocal或global,修改会直接作用在原对象上。
示例代码:
# 把变量放在列表里(可变对象) test_variable = ["Hello __1__ !!, I'm good, How about you!!"] def outer_function(): def inner_function(): word = input("Hi, Enter your word\n") # 修改列表的第一个元素 test_variable[0] = test_variable[0].replace("__1__", word) inner_function() outer_function() print("修改后的结果:", test_variable[0])
基于你原代码的嵌套函数修正版
如果你想把原来的代码改成嵌套结构,修正后的代码如下:
test_variable = "Hello __1__ !!, I'm good, How about you!!" def test_function(): # 外部函数获取全局变量 hello = test_variable # 嵌套的内部函数,负责修改变量 def inner_function(test): word = input("Hi, Enter your word\n") # 先赋值再打印 updated_test = test.replace("__1__", word) print("修改后的内容:", updated_test) return updated_test # 调用内部函数并保存结果 modified_var = inner_function(hello) return modified_var # 运行函数并查看结果 result = test_function() print("最终结果:", result)
运行这段代码后,你输入的单词会替换掉__1__,修改后的结果也会被保留下来~
内容的提问来源于stack exchange,提问作者Fahad Al Mutairy
相关产品推荐
相关产品推荐

