[英]Python function, overwrite original variable
我有这个功能:
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中:
def icaocode(code):
...
return code # new value
致电时:
x = icaocode(x)
顺便说一句,如果参数是可变的 (如列表),则可以覆盖它而无需返回新值。 如果它是不可变的(例如字符串,整数),则不能。
例如
def f(some_list):
some_list.append("something")
在这种情况下
my_list = []
f(my_list)
my_list
将是["something"]
您不能覆盖参数的值。 也就是说,您不能将其更改为引用另一个对象。 但是,您可以更改对象。 Python中有一个关于传值和传引用语义的旧线程,您可能会发现有启发性: https : //stackoverflow.com/a/986145/399047
例如,您可以将元素追加到作为参数传递的列表中。 如下代码:
def func(a_list):
a_list.append("some value")
l = [1,2,3]
print l
func(l)
print l
会给:
[1,2,3]
[1,2,3,"some value"]
相反,不能修改字符串。 如下代码:
def func2(a_str):
a_str += "suffix"
s = "test"
print s
func2(s)
print s
会给:
"test"
"test"
除非您有充分的理由,否则我的建议是避免更改您的输入参数,而是返回修改后的对象。 副作用可能会使代码混乱。
如果在所有这些操作的最后,您确实想修改输入参数,则一种方法是将代码参数包装在另一个对象中。 例如
def icaocode(code_list):
input_code = code_list[0]
[...]
# do something to input_code, assign result to
# output_code
[...]
code_list[0] = output_code
然后,您将致电:
code_list = [code]
icaocode(code_list)
就是说,这段代码对我来说很丑陋,闻起来很糟,我不建议这样做。
您可以,但这是开展业务的可怕方式。 而是返回该值,请记住,如果您愿意,可以返回多个值。 但是,这是通过参数返回值的一种方法。 但是不要使用它。
>>> def a(b):
... b[0] = 'hi'
....
>>> c = ['nono']
>>> a(c)
>>> print(c)
['hi']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.