在某些语言中,您可以使用特殊的保留字(如ref或val)通过引用或值传递参数.当您将参数传递给Python函数时,它永远不会在离开函数时改变参数的值.唯一的方法是使用全局保留字(或者我当前理解它).
例1:
k = 2
def foo (n):
n = n * n #clarity regarding comment below
square = n
return square
j = foo(k)
print j
print k
Run Code Online (Sandbox Code Playgroud)
会表现出来
>>4
>>2
Run Code Online (Sandbox Code Playgroud)
显示k是不变的
在此示例中,变量n永远不会更改
例2:
n = 0
def foo():
global n
n = n * n
return n
Run Code Online (Sandbox Code Playgroud)
在此示例中,变量n已更改
在Python中是否有任何方法可以调用函数并告诉Python 参数是值还是引用参数而不是使用全局?
其次,在A级剑桥考试,他们现在说一个函数返回一个单一而过程返回值超过一个值.在80年代,我被教导了一个函数有一个返回语句,而程序没有.为什么现在不正确?
在我的WPF项目中,我有一个ListBox来显示List<string>集合中的项目.我想让这些项目的文本可编辑,所以我将每个项目包装在带有TextBox的ItemTemplate中(可能不是最好的方法,但我是WPF的新手).我只是将TextBoxes的Text属性绑定到每个项的值时遇到了麻烦.我最后偶然发现了一个使用单个点或句点作为其Path属性({Binding Path=.})的示例:
<ListBox ItemsSource="{Binding ElementName=recipesListbox,Path=SelectedItem.Steps}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=.}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
但是我不明白为什么单纯使用{Binding}不起作用.
根据微软的说法,它提出了" 双向绑定需要Path或XPath "的例外情况:
[...]句点(.)路径可用于绑定到当前源.例如,Text ="{Binding}"等同于Text ="{Binding Path =.}"
有人可以阐明这种模棱两可的行为吗?
编辑:此外,它似乎{Binding Path=.}不一定提供双向绑定,因为修改文本和移动焦点不会更新底层源(相同的源也具有在DataGrid控件上显示和成功修改的属性).我肯定在这里遗漏了一些东西.
我想澄清价值和参考之间的差异.
我画了一张照片

所以,为了通过价值,
使用不同的引用创建相同对象的副本,并为本地变量分配新引用,以指向新副本
如何理解单词:"如果函数修改了该值,则修改也出现在调用函数的范围内,用于传递值和引用"
谢谢!
C和C++开发人员使用短语"通过引用传递",但它们似乎用于表示不同的东西.每种语言中这个模棱两可的短语究竟有什么区别?
我对目标c有点新意,我试图通过引用传递参数,但表现得像是一个值.你知道为什么这不起作用吗?
这是功能:
- (void) checkRedColorText:(UILabel *)labelToChange {
NSComparisonResult startLaterThanEnd = [startDate compare:endDate];
if (startLaterThanEnd == NSOrderedDescending){
labelToChange.textColor = [UIColor redColor];
}
else{
labelToChange.textColor = [UIColor blackColor];
}
}
Run Code Online (Sandbox Code Playgroud)
这就是电话:
UILabel *startHourLabel; // This is properly initialized in other part of the code
[self checkRedColorText:startHourLabel];
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
有一个像这样的简单结构:
type Event struct {
Id int
Name string
}
Run Code Online (Sandbox Code Playgroud)
这两种初始化方法有什么区别?
e1 := Event{Id: 1, Name: "event 1"}
e2 := &Event{Id: 2, Name: "event 2"}
Run Code Online (Sandbox Code Playgroud)
我为什么要使用这些初始化方法?
谢谢
我在下面写了一个函数:
void trans(double x,double y,double theta,double m,double n)
{
m=cos(theta)*x+sin(theta)*y;
n=-sin(theta)*x+cos(theta)*y;
}
Run Code Online (Sandbox Code Playgroud)
如果我在同一个文件中调用它们
trans(center_x,center_y,angle,xc,yc);
Run Code Online (Sandbox Code Playgroud)
会的价值xc和yc改变?如果没有,我该怎么办?
可能重复:
C++中指针变量和引用变量之间的差异
当我开始使用C++时,我发现下面的操作令人困惑.我知道通过引用传递和传递值.但是最近我遇到了这样的功能让我很困惑:
Func1(int &a)
Func2(int *a)
Run Code Online (Sandbox Code Playgroud)
这两个函数都期望a的地址,但是当我调用Func1时,我会这样做,Func1(a)而在Func2的情况下,我调用了Func2(&a)
为什么Func1在期望a的地址时直接接受int a
您好我想知道如何将变量作为参数发送到方法并让方法更改它.例如
public class Main {
public static void main(String[] args) {
int i = 2;
doThis(i);
System.out.println(i);
}
public static void doThis(int i) {
i = 3;
}
}
Run Code Online (Sandbox Code Playgroud)
我想打印出3而不是2.谢谢.