函数可以不使用“ return”语句返回吗?

时间:2019-06-18 09:04:14

标签: python-3.x function

没有return语句的函数内部的任何更改都应该无法访问对吗?(如果我错了,请纠正我),但是这段代码给出的输出没有return语句

def my_fun(a):
    a[0] = 'new value:'     
    a[1] = a[1] + 1      

x = ['old value:', 99]
my_fun(x)
print (x[0], x[1])

我只是运行了这段代码,就把     新值:100 我正在使用python 3.6。还能在其他任何编程语言中使用吗?

2 个答案:

答案 0 :(得分:1)

您将 mutable 参数a(或x)传递给函数list。然后您修改列表内容。这当然会更改您的列表x


如果您想保护x不被修改,可以将其定义为元组

x = ("old value:", 99)

现在调用my_fun(x)将导致TypeError(因为分配将失败)。

在函数外部的变量在函数外部不可见。

答案 1 :(得分:0)

在Python中,参数是通过引用传递的,这意味着对它们的任何修改都将在调用后保留。但是,重新分配对象会更改引用的目标,并且无法保留任何后续修改。 考虑以下示例:

def foo(bar):
    bar[0] = 2  # modification
    bar = []    # reassigment

x = [1]
print(x)
foo(x)
print(x)

这将输出:

[1]
[2]

一些对象,例如元组或整数,是不可变的,这意味着它们不能被修改,并且在尝试时会引发异常。必须重新分配它们才能对其进行修改。

这是特定于Python的。 Java以表面上类似的方式运行,但是实现方式却大不相同:对象通过引用传递并进行修改,而简单数据类型(intdoublechar等) )被复制,并且修改不会保留。 C和C ++永远不会修改对象,保留对象修改的唯一方法是将对象上的指针传递给函数。