python - 如何在不使用“全局”的情况下更改 Python 函数中的变量
问题描述
我在 Python 中定义了一些全局参数(也应该可以从其他文件访问),我想在定义它们的类中更改它们。我经常读到这样做的一种方法是在函数内部定义变量时使用“全局”。但是,我也经常读到应该避免使用“全局”,因为它不是很好的风格。现在我的问题是我还有什么其他机会来改变我的变量?当只是将它们作为参数传递给函数时(这也是一个建议),它们的值保持不变。
所以这是我的代码:
from random import random
numberOfBuildings = 10
numberOfVehicles = 10
useMonteCarloMethodForScenarioCreation = True
def monteCarloScenarioGeneration(numberOfBuildings, numberOfVehicles):
numberOfBuildings_MonteCarlo = int( numberOfBuildings *random() *2 + 1)
numberOfVehicles_MonteCarlo = int(numberOfVehicles *random() *2 + 1)
if useMonteCarloMethodForScenarioCreation ==True:
numberOfBuildings = numberOfBuildings_MonteCarlo
numberOfVehicles = numberOfVehicles_MonteCarlo
monteCarloScenarioGeneration(numberOfBuildings, numberOfVehicles)
print('numberOfBuildings: ', numberOfBuildings)
print('numberOfVehicles: ', numberOfVehicles)
调用函数 monteCarloScenarioGeneration 时,全局变量 numberOfBuildings 和 numberOfVehicles 的值不会改变。它们保持与初始化后相同的值 (10)。如何在不使用关键字 global 的情况下更改全局变量?我会很感激任何评论。
解决方案
return
如果我没看错的话,你应该可以用来改变函数之外的变量。
作为函数的最后一行,把
return numberOfBuildings, numberOfVehicles
然后在调用函数时
numberOfBuildings, numberOfVehicles = monteCarloScenarioGeneration(numberOfBuildings, numberOfVehicles)
推荐阅读
- python - 如何在 aws lambda 中执行 selenium?
- mongodb - 如何计算数组中已识别项目的平均值?
- jenkins - Jenkins SCM 轮询因系统崩溃而错过 - 如何尽快轮询?
- reactjs - 我收到一条警告消息,说“不要直接改变状态”。
- node.js - npx create-react-app my-app 安装包后卡住
- c# - 如何在返回 Task 的 Asp.Net Core Web API 操作中引发异常
? - docker - 反正有没有使用 github / gitlab 下载 docker 镜像?
- react-native - React Native 中的后台作业
- angular - Angular PWA SwUpdate Snackbar
- python - 导出到 Excel 文件时如何保留数据框数据类型?