python - 如何正确地将变量传递给方法?(Python)
问题描述
我正在尝试清理我的代码,但我是 python 新手,所以我很确定我的语法是错误的。我编写了一个简单的控制器来使变量message_lx_setPoint
接近设定点的值message_lx_setPoint
。我正在使用机器人操作系统,因此脚本正在被循环。事实上,它工作正常,值message_lx_current
接近 setPoint 的值。以下是我为此编写的代码:
#defs
increment = 0.1
#setPoint values
message_lx_setPoint = 5.0 #value set by some controller(?)
message_ly_setPoint = 5.0
#current values
message_lx_current = 0.0 #value set by some sensor(?)
message_ly_current = 0.0
def approach_lx_setPoint():
global message_lx_current, message_lx_setPoint, increment
if message_lx_current < message_lx_setPoint:
print("current is less than set point")
message_lx_current += increment
elif message_lx_current == message_lx_setPoint:
print("current is equal to set point")
message_lx_current = 0.0
elif message_lx_current > message_lx_setPoint:
print("current is greater than set point")
message_lx_current -= increment
return message_lx_current
def approach_ly_setPoint():
global message_ly_current, message_ly_setPoint, increment
if message_ly_current < message_ly_setPoint:
print("current is less than set point")
message_ly_current += increment
elif message_ly_current == message_ly_setPoint:
print("current is equal to set point")
message_ly_current = 0.0
elif message_ly_current > message_ly_setPoint:
print("current is greater than set point")
message_ly_current -= increment
return message_ly_current
def main():
approach_lx_setPoint()
approach_ly_setPoint()
print(message_lx_current)
print(message_ly_current)
我必须对6 个不同的变量执行此操作,所以我的代码开始变得臃肿;我必须总共制作 6 种方法来控制所有 6 个变量。我想让它只做一个方法,我传递要控制的变量和变量作为设定点,然后从那里执行。我在想这样的事情:
#same variables as before
def approachSetPoint(current, target):
global increment
if current < target:
print("current is less than set point")
current += increment
elif current == target:
print("current is equal to set point")
current = 0.0
elif current > target:
print("current is greater than set point")
current -= increment
return current
def main():
approachSetPoint(message_lx_current, message_lx_setPoint)
approachSetPoint(message_ly_current, message_ly_setPoint)
print(message_lx_current)
print(message_ly_current)
我希望这样做的结果是,我将只有一个方法SetPoint def,而不是为每个要控制的变量设置一个approachSetPoint
def,我所要做的就是用适当的变量在main中调用它,它会做这件事。
我试过这个,我没有得到任何错误或任何东西,但是,这些值没有被更新(?)。我假设我只是没有正确地将我作为参数传递的变量链接到在方法中修改的变量。知道如何处理我描述的行为吗?提前致谢!
解决方案
您需要在运行之间将结果存储在函数之外:
message_lx_current = y_current = 0.0
message_lx_setpoint = message_ly_setpoint = 5.0
def approach_setpoint(current, setpoint, increment=0.1):
if current < setpoint:
print("current is less than set point")
current += increment
elif current == setpoint:
print("current is equal to set point")
current = 0.0
elif current > setpoint:
print("current is greater than set point")
current -= increment
return current
def main():
message_lx_current = approach_setpoint(message_lx_current, message_lx_setpoint)
message_ly_current = approach_setpoint(message_ly_current, message_ly_setpoint)
print(message_lx_current)
print(message_ly_current)
推荐阅读
- azure - 为什么我的 Service Fabric 间应用程序服务 RPC 需要 2 分钟?
- javascript - 如何使用 jhipster 和 Angular 在选项中显示图片?
- java - Apache POI:更改运行图片文本
- sql - UPDATE,然后在更新后返回整个表
- r - R从数据框中选择所有行,其中值在一列中重复但在另一列中具有特定值
- javascript - 如何从 2 个字段中获取总分钟数
- python - 优化迭代检查连续值之间的最大差异
- html - Bootstrap:手风琴顶部的下拉菜单
- php - 如何访问或存储表单值以在另一个函数中使用
- php - 检查是否存在 PHP