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)
有什么我可以通过实际参考传递变量吗?
假设我们有一个C函数,它接受一组一个或多个输入数组,处理它们,并将其输出写入一组输出数组.签名如下(count表示要处理的数组元素的数量):
void compute (int count, float** input, float** output)
Run Code Online (Sandbox Code Playgroud)
我想通过ctypes从Python调用此函数,并使用它将转换应用于一组NumPy数组.对于定义为的单输入/单输出功能
void compute (int count, float* input, float* output)
Run Code Online (Sandbox Code Playgroud)
以下作品:
import ctypes
import numpy
from numpy.ctypeslib import ndpointer
lib = ctypes.cdll.LoadLibrary('./block.so')
fun = lib.compute
fun.restype = None
fun.argtypes = [ctypes.c_int,
ndpointer(ctypes.c_float),
ndpointer(ctypes.c_float)]
data = numpy.ones(1000).astype(numpy.float32)
output = numpy.zeros(1000).astype(numpy.float32)
fun(1000, data, output)
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何为多个输入(和/或输出)创建相应的指针数组.有任何想法吗?
编辑:所以人们一直想知道如何compute知道有多少数组指针(count指每个数组的元素数).事实上,这是硬编码的; 给定的compute确切知道预期的输入和输出数量.调用者的工作是验证input并output指向正确数量的输入和输出.这是一个compute采用2个输入并写入1个输出数组的示例:
virtual void compute (int count, float** input, float** output) { …Run Code Online (Sandbox Code Playgroud) 有没有办法复制变量,这样当变量'a'的值发生变化时,它会将自身复制到变量'b'?
例
a='hello'
b=a #.copy() or a function that will make a copy
a='bye'
# Is there a way to make
# 'b' equal 'a' without
# doing 'b=a'
print a
print b
Run Code Online (Sandbox Code Playgroud)
我在使用Tkinter库时遇到问题,我有一个已存储在列表中的checkbutton,我正在尝试获取它所拥有的变量.
但是需要大约5行代码才能到达变量.
在 python 中,一切都是通过引用来工作的:
>>> a = 1
>>> d = {'a':a}
>>> d['a']
1
>>> a = 2
>>> d['a']
1
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西
>>> a = 1
>>> d = {'a':magical pointer to a}
>>> d['a']
1
>>> a = 2
>>> d['a']
2
Run Code Online (Sandbox Code Playgroud)
你会用什么来代替指向 a 的神奇指针,以便 python 输出我想要的。
我很欣赏通用的解决方案(不仅适用于上述带有自变量的字典示例,还适用于其他集合和类/实例变量)
我是一名物理专业的学生,主要是用Python和Matlab编程,现在进入C语言以提高我的模拟性能.
简单的问题:Python中有指针吗?Matlab中有指针吗?如果是的话,我可以使用与C中类似的"轻松"吗?
我知道在Python和Matlab的高级别背后,有很多指针在起作用.问题是:我可以在Python或Matlab中明确地执行类似C代码的操作:
int *p;
int someValue = 1;
p = &someValue;
doSomethingForMe = callSomeFunction(p);
Run Code Online (Sandbox Code Playgroud)
我知道无论如何都可能没有意义(对于大多数应用程序).我只是想学习.
我正在尝试编写一个执行此操作的代码:
the_list = ['some list', 0, 1, 2]
def change(l):
x = ['some other list', 3, 4, 5]
l = x
change(the_list)
print(the_list) # ['some other list', 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
我的问题基本上与大多数人必须处理的问题相反.我正在尝试将列表的每个元素分配x到change作为参数传递给函数的列表中l,以便更改对外部作用域可见.
我没有使用return语句,因为使用函数参数进行操作会使我编写的代码更加清晰.这对我来说更有意义.
什么是最pythonic的方式来做到这一点?