Python文档似乎不清楚参数是通过引用还是值传递,以下代码生成未更改的值'Original'
class PassByReference:
def __init__(self):
self.variable = 'Original'
self.change(self.variable)
print(self.variable)
def change(self, var):
var = 'Changed'
Run Code Online (Sandbox Code Playgroud)
有什么我可以通过实际参考传递变量吗?
如何在Python中通过引用传递整数?
我想修改我传递给函数的变量的值.我已经读过Python中的所有内容都是按值传递的,但必须有一个简单的技巧.例如,在Java中,你可以通过引用类型的Integer,Long等等.
在某些语言中,您可以使用特殊的保留字(如ref或val)通过引用或值传递参数.当您将参数传递给Python函数时,它永远不会在离开函数时改变参数的值.唯一的方法是使用全局保留字(或者我当前理解它).
例1:
k = 2
def foo (n):
n = n * n #clarity regarding comment below
square = n
return square
j = foo(k)
print j
print k
Run Code Online (Sandbox Code Playgroud)
会表现出来
>>4
>>2
Run Code Online (Sandbox Code Playgroud)
显示k是不变的
在此示例中,变量n永远不会更改
例2:
n = 0
def foo():
global n
n = n * n
return n
Run Code Online (Sandbox Code Playgroud)
在此示例中,变量n已更改
在Python中是否有任何方法可以调用函数并告诉Python 参数是值还是引用参数而不是使用全局?
其次,在A级剑桥考试,他们现在说一个函数返回一个单一而过程返回值超过一个值.在80年代,我被教导了一个函数有一个返回语句,而程序没有.为什么现在不正确?
假设我有list参数的功能,并且在我的体内我想通过将数组的元素复制到列表来修改传递的列表:
def function1 (list_arg):
a = function2() #function2 returns an array of numbers
list_arg = list(a)
list1 = [0] * 5
function1(list1)
list1
[0,0,0,0,0]
Run Code Online (Sandbox Code Playgroud)
这样做时,它不起作用.执行后function1(list1),list1保持不变.那么,如何使用与数组相同的元素(数字)function1返回? list1a
这里是ListNote类的定义LeetCode:
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
Run Code Online (Sandbox Code Playgroud)
对于代码:
result = ListNode(0)
#result = 0 -> None
result_tail = result
#result_tail = 0 -> None
result_tail.next = ListNode(1)
#result_tail = 0 -> 1 -> None
#result = 0 -> 1 -> None
result_tail = result_tail.next
#result_tail = 1 -> None
#result = 0 -> 1 -> None
result_tail.next = ListNode(2)
#result_tail = 1 -> 2 -> None
#result = 0 -> 1 …Run Code Online (Sandbox Code Playgroud) 可能重复:
了解Python的传递函数参数的逐个调用样式
我最近遇到过这个:
x = [1,2,3]
def change_1(x):
x = x.remove(x[0])
return x
Run Code Online (Sandbox Code Playgroud)
结果如下:
>>> change_1(x)
>>> x
[2, 3]
Run Code Online (Sandbox Code Playgroud)
我发现这种行为令人惊讶,因为我认为函数内部的任何内容都不会对外部变量产生影响.此外,我构建了一个示例,基本上做同样的事情,但没有使用remove:
x = [1,2,3]
def change_2(x):
x = x[1:]
return x
Run Code Online (Sandbox Code Playgroud)
结果如下:
>>> change_2(x)
[2, 3] # Also the output prints out here not sure why this is
>>> x
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我得到了我期望的结果,该函数不会改变x.
所以它必须是remove具有特定效果的东西.这里发生了什么?