我有这个功能:
def icaocode(code):
c.execute("SELECT ICAO, LAT, LON FROM airports WHERE ICAO = ?", (code,))
result = c.fetchone()
if result is None:
print("No airport found with ICAO code", code)
sys.exit()
else:
print("Found", code)
[...]
假设我用
icaocode(x)
如何使函数用结果覆盖x?
在函数def中:
打电话时:
另外,如果参数是可变的(如列表),则可以覆盖它而不返回新值。如果它是不可变的(如字符串、整数),则不能
例如
在这种情况下
my_list
将是["something"]
不能覆盖参数的值。也就是说,不能将其更改为引用其他对象。但是,您可以更改对象。Python中有一个关于pass-by-value和pass-by-reference语义的旧线程,您可能会发现它很有启发性:https://stackoverflow.com/a/986145/399047
例如,可以将元素追加到作为参数传入的列表中。以下代码:
会给出:
相反,不能修改字符串。以下代码:
会给出:
我的建议是,除非您有充分的理由,否则避免更改输入参数,而是返回修改后的对象。副作用会导致代码混乱。
如果在所有这些操作结束时您真的想修改输入参数,那么一种技术就是将代码参数包装到另一个对象中。e、 g
然后你会打电话给:
也就是说,这个代码对我来说很难看,闻起来很难闻,我不推荐它。
你可以,但这是一个可怕的经营方式。而是返回值,记住如果愿意,可以返回多个值。但是,这里有一种通过参数返回值的方法。但不要用它。
相关问题 更多 >
编程相关推荐