当你将一个像list,array这样的集合传递给python中的另一个函数时,是否会复制它,或者它只是一个指针?
如果我将数据帧传递给函数并在函数内修改它,它是按值传递还是按引用传递?
我运行以下代码
a = pd.DataFrame({'a':[1,2], 'b':[3,4]})
def letgo(df):
df = df.drop('b',axis=1)
letgo(a)
Run Code Online (Sandbox Code Playgroud)
a函数调用后,值不会改变.这是否意味着它是传值?
我也试过以下
xx = np.array([[1,2], [3,4]])
def letgo2(x):
x[1,1] = 100
def letgo3(x):
x = np.array([[3,3],[3,3]])
Run Code Online (Sandbox Code Playgroud)
事实证明letgo2()确实发生了变化xx而letgo3()没有变化.为什么会这样?
我正在尝试将内部语言(ihl)交叉编译为Python.
ihl的一个特性是指针和引用,其行为与您对C或C++的期望相同.
例如,你可以这样做:
a = [1,2]; // a has an array
b = &a; // b points to a
*b = 2; // derefernce b to store 2 in a
print(a); // outputs 2
print(*b); // outputs 2
Run Code Online (Sandbox Code Playgroud)
有没有办法在Python中复制此功能.
我应该指出,我认为我困惑了一些人.我不想要Python中的指针.我只是想从Python专家那里得到一个感觉,我应该生成什么样的Python来模拟我上面展示的情况
我的Python不是最好的,但到目前为止,我的探索还没有产生任何有希望的东西:(
我应该指出,我们正在寻求从我们的ihl转向更常用的语言,因此如果有人可以提出可能更适合的另一种语言,我们就不会真正与Python绑定.
某些语言具有使用C#等参数返回值的功能.我们来看一个例子:
class OutClass
{
static void OutMethod(out int age)
{
age = 26;
}
static void Main()
{
int value;
OutMethod(out value);
// value is now 26
}
}
Run Code Online (Sandbox Code Playgroud)
那么在Python中有什么类似的东西来获取使用参数的值吗?
所以我有一些相当广泛的功能代码,主要数据类型是不可变的结构/类.通过制作成员变量和任何方法const,我一直在声明不变性的方式是"几乎不可变的".
struct RockSolid {
const float x;
const float y;
float MakeHarderConcrete() const { return x + y; }
}
Run Code Online (Sandbox Code Playgroud)
这实际上是C++中"我们应该这样做"的方式吗?或者,还有更好的方法?
c++ functional-programming const-correctness immutability c++11
可能重复:
Python:如何通过引用传递变量?
我的代码:
locs = [ [1], [2] ]
for loc in locs:
loc = []
print locs
# prints => [ [1], [2] ]
Run Code Online (Sandbox Code Playgroud)
为什么loc不参考元素locs?
Python:除非明确复制,否则所有内容都将作为引用传递[这不是真的吗?]
请解释.. python如何决定引用和复制?
更新:
怎么做 ?
def compute(ob):
if isinstance(ob,list): return process_list(ob)
if isinstance(ob,dict): return process_dict(ob)
for loc in locs:
loc = compute(loc) # What to change here to make loc a reference of actual locs iteration ?
Run Code Online (Sandbox Code Playgroud)
enumerate,没有它可能吗?我从url传递的值为:
user_data = {}
if (request.args.get('title')) :
user_data['title'] =request.args.get('title')
if(request.args.get('limit')) :
user_data['limit'] = request.args.get('limit')
Run Code Online (Sandbox Code Playgroud)
然后用它作为
if 'limit' in user_data :
limit = user_data['limit']
conditions['id'] = {'id':1}
int(limit)
print type(limit)
data = db.entry.find(conditions).limit(limit)
Run Code Online (Sandbox Code Playgroud)
它打印: <type 'unicode'>
但我不断收到type的limit是unicode,从查询产生一个错误!我正在将unicode转换为int,但为什么不转换?请帮忙!!!
我来自Java并学习Python.到目前为止,我发现非常酷,但很难适应,是没有必要声明类型.我知道每个变量都是一个指向对象的指针,但到目前为止我还无法理解如何设计我的代码.
例如,我正在编写一个接受2D NumPy数组的函数.然后在函数体中我调用了这个数组的不同方法(这是arrayNumpy中的一个对象).但是在将来假设我想使用这个函数,到那时我可能已经完全忘记了我应该作为一个类型传递给函数的东西.人们通常做什么?他们只是为此写文档吗?因为如果是这种情况,那么这涉及更多的打字,并且会引发关于不声明类型的想法的问题.
还假设我想在将来传递类似于数组的对象.通常在Java中,可以实现一个接口,然后让两个类来实现这些方法.然后在函数参数中,我将变量定义为接口类型.如何在Python中解决此问题或者可以使用哪些方法来实现相同的想法?
def some_function():
some_dict = {'random': 'values'}
a = some_dict['random']
return a
Run Code Online (Sandbox Code Playgroud)
什么是some_dict在内存中创建的字典?(第一次调用函数?)
字典何时被some_dict销毁/取消分配?(当函数返回时?)
如果是这样,这是否意味着每次调用函数时都会创建字典对象?
在学习/处理python时我应该担心这些事吗?
我在哪里可以了解某种语言的详细信息?我尝试查看文档但找不到我要找的东西.
提前感谢您,如果您能回答上述所有4个问题,我们将不胜感激!
这些变量赋值按我的预期工作:
>>> a = 3
>>> b = a
>>> print(a, b)
(3, 3)
>>> b=4
>>> print(a, b)
(3, 4)
Run Code Online (Sandbox Code Playgroud)
但是,这些分配的行为有所不同:
>>> class number():
... def __init__(self, name, number):
... self.name = name
... self.number = number
...
>>> c = number("one", 1)
>>> d = c
>>> print(c.number, d.number)
(1, 1)
>>> d.number = 2
>>> print(c.number, d.number)
(2, 2)
Run Code Online (Sandbox Code Playgroud)
与示例不同,为什么是c相同的?如何在类示例中执行类似的操作?也就是说,复制对象,然后更改它的一部分(这不会影响我借用属性的对象)?d(a, b)(a, b)(c, d)
python ×9
python-2.7 ×2
c++ ×1
c++11 ×1
casting ×1
immutability ×1
object ×1
pandas ×1
pointers ×1
python-3.x ×1
reference ×1
unicode ×1
variables ×1