【问题标题】:Python - Does Python support pointer or not?Python - Python 是否支持指针?
【发布时间】:2014-04-10 02:36:53
【问题描述】:

知道python支持指针!但最近我注意到一些关于 OpenCV-python 的事情!以下行将在给定图像上以指定的中心和半径绘制一个圆,

cv2.circle(image, (x, y), r, (0, 0, 00), thickness=3)

根据cv2.circle 文档,返回值为None。所以所有的变化都发生在给定的图像上。但是我们知道python不支持指针!所以,如果有可能这样做,怎么做!?有没有人可以帮忙或者提供链接!

【问题讨论】:

  • 您是否担心 img 被操纵?
  • 不,我想知道是否有可能在其他应用程序中使用此工具的指针!
  • 你肯定想读这个[从 C++ 角度看 Python 变量名的语义](rg03.wordpress.com/2007/04/21/…)

标签: python opencv


【解决方案1】:

好吧,python 没有指针,但是对象通过引用传递给函数(在java 中也是如此,另一种没有指针的语言)。这种机制非常类似于在 C 中按值传递指针。

变量image 只是对对象的引用,而不是对象本身。当您将image 传递给函数cv2.circle 时,实际上是按值 传递了引用。它是函数中引用的本地副本,但它们本质上指向内存中的同一个对象。这就是imagecv2.circle 中被修改的方式。

推荐阅读:What's the difference between passing by reference vs. passing by value?

How do I pass a variable by reference?(谢谢@Wooble!)

【讨论】:

  • Python 不使用按引用传递。至少不是以通常理解该术语的方式。 (stackoverflow.com/questions/986006/… 有很多好的答案)
  • @Wooble 按引用传递肯定是按值传递的一个例子 :) 这是一个很好的资源!
  • @0606002 按值传递引用与“按引用传递”不同。通过引用传递将需要重新分配被调用函数中的参数,从而导致调用者也重新分配。这是 C++ 用于通过引用传递的语义,而不是 python 所做的。
【解决方案2】:

我建议你阅读维基百科上的evaluation strategy 文章。

Python 做call by sharing(这是说的同义词:通过值传递对对象的引用)

我认为我无法比那些文章更好地解释它。

【讨论】:

    【解决方案3】:

    Python 不允许您在编写代码时访问指针。你不能声明一个指针,但它当然在内部使用了指针。

    语言没有指针,但实现使用指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-27
      • 2014-08-16
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多