python中的Simentenulsy按值传递和按引用传递?

2024-09-28 22:10:13 发布

您现在位置:Python中文网/ 问答频道 /正文

前提:

假设我有一个变量x和两个函数f(x)g(x) 这样,当f(x)能够更改x的值时(可能它希望跟踪f(x)被调用的次数),并且g(x)不希望以任何代价更改x的值

现在,如果我选择x作为整数,我可以完成g(x),如果x是一个列表,我可以完成f(x)

问题:

但是如果我想在同一个程序中完成这两个任务呢

那我该怎么办

如果这是不可能的,那么这不会严重妨碍python wrt其他语言

注意:

基本上,我的问题是通过寻找Python中没有指针的缺点,如C++语言中的其他语言,通过选择{{CD12>}而不是^ {CD1>},可以很容易地实现上述任务。p>

Tags: 函数程序语言列表整数次数缺点指针
3条回答

如果只需更改传递给f的变量的值,只需返回新值即可:

def f(x):
    return x + 1

x = 30
x = f(x)
# x is now 31

如果已经有另一个值需要从f返回,则可以返回一个元组并将返回值解包到多个变量:

def f(x):
    return 46, x + 1

x = 30
y, x = f(x)
# x is now 31
在C++中,使用指针来补偿的事实是,从函数返回多个值比较困难。在Python中,虽然我们在技术上仍然返回一个值,但创建元组并将其解包要容易得多

您可以创建自己的类:

`class some_class():
   self._value = 0   
   self._access_counter = 0

 def update_value(self):
  <your code here>

 def get_value_by_ref(self):
  self._access_counter += 1
  return self._value

`

<>如果我的问题是正确的,那么Python的工作方式与C++有点不同。看看这个关于整数在Python中是不可变的这一事实的问题: Passing an integer by reference in Python

相关问题 更多 >