标签: pass-by-reference

python pandas dataframe,是值传递还是传递引用

如果我将数据帧传递给函数并在函数内修改它,它是按值传递还是按引用传递?

我运行以下代码

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()确实发生了变化xxletgo3()没有变化.为什么会这样?

python pass-by-reference pass-by-value pandas

58
推荐指数
4
解决办法
4万
查看次数

在R中实现标准软件设计模式(专注于MVC)

目前,我正在阅读很多关于软件工程,软件设计,设计模式等的内容.来自完全不同的背景,这对我来说都是新的迷人的东西,所以如果我没有使用正确的技术术语,请耐心等待我描述某些方面;-)

我最终在大部分时间都使用了引用类(R中的OOP方法),因为面向对象似乎是我正在做的很多东西的正确选择.

现在,我想知道是否有人在R中实现MVC(模型视图控制器;也称为MVP:模型视图展示器)模式方面有一些好的建议或经验,最好使用参考类.

我也对其他"标准"设计模式(如观察者,黑板等)的信息非常感兴趣,但我不想让这个问题过于宽泛.我想最酷的事情是看到一些最小的示例代码,但任何指针,"架构",图表或任何其他想法也将非常感谢!

对于那些对类似内容感兴趣的人,我真的可以推荐以下书籍:

  1. 务实的程序员
  2. 设计模式

更新2012-03-12

我最终想出了一个我对MVC的解释的一个小例子(可能不完全正确;-)).

包依赖性

require("digest")
Run Code Online (Sandbox Code Playgroud)

类定义观察者

setRefClass(
    "Observer",
    fields=list(
        .X="environment"
    ),
    methods=list(
        notify=function(uid, ...) {
            message(paste("Notifying subscribers of model uid: ", uid, sep=""))
            temp <- get(uid, .self$.X)
            if (length(temp$subscribers)) {
                # Call method updateView() for each subscriber reference
                sapply(temp$subscribers, function(x) {
                    x$updateView()        
                })
            }    
            return(TRUE)
        }
    )
)
Run Code Online (Sandbox Code Playgroud)

类定义模型

setRefClass(
    "Model",
    fields=list(
        .X="data.frame",
        state="character",
        uid="character",
        observer="Observer"
    ),
    methods=list(
        initialize=function(...) {
            # Make sure all …
Run Code Online (Sandbox Code Playgroud)

design-patterns r pass-by-reference reference-class

56
推荐指数
1
解决办法
2768
查看次数

"var"和"out"参数之间有什么区别?

声明的参数与var声明的参数之间的区别是什么out?编译器如何区别对待它们(例如,通过生成不同的代码,或通过更改它发出的诊断)?或者,不同的修饰符是否只允许程序员记录参数的预期用途?做了什么样的影响类型的参数对此事?

delphi parameters pass-by-reference

56
推荐指数
2
解决办法
2万
查看次数

如何通过引用正确传递Integer类?

我希望有人可以为我澄清这里发生的事情.我在整数类中挖了一下但因为整数覆盖+运算符我无法弄清楚出了什么问题.我的问题在于这一行:

Integer i = 0;
i = i + 1;  // ? I think that this is somehow creating a new object!
Run Code Online (Sandbox Code Playgroud)

这是我的推理:我知道java是通过值传递(或通过引用值传递),所以我认为在下面的示例中,每次都应该递增整数对象.

public class PassByReference {

    public static Integer inc(Integer i) {
        i = i+1;    // I think that this must be **sneakally** creating a new integer...  
        System.out.println("Inc: "+i);
        return i;
    }

    public static void main(String[] args) {
        Integer integer = new Integer(0);
        for (int i =0; i<10; i++){
            inc(integer);
            System.out.println("main: "+integer);
        } …
Run Code Online (Sandbox Code Playgroud)

java integer pass-by-reference

55
推荐指数
6
解决办法
9万
查看次数

在C++中用&和*声明的函数参数之间的区别

我输入以下示例:

#include <iostream>
double f(double* x, double* y)
{
    std::cout << "val x: " << *x << "\n";
    std::cout << "val y: " << *y << "\n";
    return *x * *y;
}
double f2(double &x, double &y)
{
    std::cout << "val x: " << x << "\n";
    std::cout << "val y: " << y << "\n";
    return x * y;
}
int main()
{
    double a, b;
    a = 2;
    b = 3; 
    std::cout << f(&a, &b) << "\n";
    std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ pointers function pass-by-reference

55
推荐指数
4
解决办法
5万
查看次数

为对象分配其他内容时,为什么不通过引用传递此对象?

我知道在JS中,对象是通过引用传递的,例如:

function test(obj) {
    obj.name = 'new name';
}

var my_obj = { name: 'foo' };
test(my_obj);
alert(my_obj.name); // new name
Run Code Online (Sandbox Code Playgroud)

但为什么下面没有工作:

function test(obj) {
    obj = {};
}

var my_obj = { name: 'foo' };
test(my_obj);
alert(my_obj.name); // foo
Run Code Online (Sandbox Code Playgroud)

我已经将对象设置为{}(空)但它仍然说foo.

任何人都可以解释这背后的逻辑吗?

javascript pass-by-reference

52
推荐指数
4
解决办法
2万
查看次数

Swift是否有像"ref"关键字那样强制参数通过引用传递?

在Swift中,结构和值类型默认按值传递,就像在C#中一样.但是C#还有一个非常有用的ref关键字,它强制参数通过引用传递,这样可以在函数内部更改同一个实例,然后从调用者的范围访问.有没有办法在Swift中实现相同的结果?

pass-by-reference swift

52
推荐指数
1
解决办法
2万
查看次数

通过引用或通过值传递?

在学习新的编程语言时,您可能遇到的一个可能的障碍是,默认情况下,该语言是按值传递还是按引用传递.

所以这是我对你们所有人的问题,用你最喜欢的语言,它是如何实际完成的?什么是可能的陷阱

当然,你最喜欢的语言可以是你曾经玩过的任何东西:流行的,模糊的,深奥的,新的,旧的 ......

language-agnostic oop parameters pass-by-reference pass-by-value

51
推荐指数
7
解决办法
2万
查看次数

呼叫时间传递参考已被删除

可能重复:
不推荐使用Call-time pass-by-reference

虽然可能会在互联网上的某个地方记录,但我无法找到解决问题的方法.自PHP 5.4更新以来,已删除了pass-by-references.

现在我对这段代码有一个问题,我希望有人可以看到我正在尝试用它做什么,这样他们就可以帮助我找到一个解决方案来克服我的传递引用问题.

以下是有问题的代码:

public function trigger_hooks( $command, &$client, $input ) {
    if( isset( $this->hooks[$command] ) ) {
        foreach( $this->hooks[$command] as $func ) {
            PS3socket::debug( 'Triggering Hook \'' . $func . '\' for \'' . $command . '\'' );
            $continue = call_user_func( $func, &$this, &$client, $input );
            if( $continue === FALSE ) {
                break;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.

php class function public pass-by-reference

51
推荐指数
1
解决办法
11万
查看次数

C++视图类型:通过const&或值传递?

这最近出现在代码审查讨论中,但没有令人满意的结论.有问题的类型是C++ string_view TS的类似物.它们是指针和长度周围的简单非拥有包装器,装饰有一些自定义函数:

#include <cstddef>

class foo_view {
public:
    foo_view(const char* data, std::size_t len)
        : _data(data)
        , _len(len) {
    }

    // member functions related to viewing the 'foo' pointed to by '_data'.

private:
    const char* _data;
    std::size_t _len;
};
Run Code Online (Sandbox Code Playgroud)

出现的问题是,是否有一种方法可以通过值或const引用来传递这些视图类型(包括即将发生的string_view和array_view类型).

支持传递值的参数等于"减少输入","如果视图具有有意义的突变,则可以改变本地副本",并且"可能效率不低".

支持pass-by-const-reference的参数相当于"通过const&'传递对象更加惯用,而'可能效率不低'.

是否有任何额外的考虑因素可以通过一种或另一种方式最终通过值或const引用传递惯用视图类型.

对于这个问题,可以安全地假设C++ 11或C++ 14语义,以及足够现代的工具链和目标体系结构等.

c++ parameter-passing pass-by-reference pass-by-value c++11

51
推荐指数
5
解决办法
6021
查看次数