当您使用数组参数在Python中定义函数时,该参数的范围是什么?
这个例子来自Python教程:
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
Run Code Online (Sandbox Code Playgroud)
打印:
[1]
[1, 2]
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我不太确定我是否理解这里发生的事情.这是否意味着数组的范围超出了函数的范围?为什么数组会记住从调用到调用的值?来自其他语言,只有当变量是静态的时候我才会期望这种行为.否则它似乎应该每次重置.实际上,当我尝试以下内容时:
def f(a):
L = []
L.append(a)
return L
Run Code Online (Sandbox Code Playgroud)
我得到了我期望的行为(每次调用都重置了数组).
所以在我看来,我只需要def f(a, L=[]):解释这一行- L变量的范围是什么?
Scala语言要求您在使用之前初始化实例变量.但是,Scala不为您的变量提供默认值.相反,您必须使用通配符下划线手动设置其值,该下划线的作用类似于默认值,如下所示
var name:String = _
Run Code Online (Sandbox Code Playgroud)
我知道,我知道......我可以在类定义中定义一个构造函数,它将实例变量作为参数,因此Scala不会强制其初始化,如下所示
class Person(var name:String)
Run Code Online (Sandbox Code Playgroud)
但是,我需要在体内声明它,因为我需要使用其元素为FIELD或METHOD的Java注释; 也就是说,它只能应用于在我们类的主体中声明的实例变量或方法.
问题:为什么Scala语言要求您初始化一个实例变量 - 无论是默认值_还是您想要的任何内容 - 在类的主体中声明而不是依赖于默认值?
我开始知道C#3.0带有Auto-Implemented Properties的新功能,我喜欢它,因为我们不必在此声明额外的私有变量(与之前的属性相比),之前我使用的是属性,即
private bool isPopup = true;
public bool IsPopup
{
get
{
return isPopup;
}
set
{
isPopup = value;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我已将其转换为Auto-Implemented属性即
public bool IsPopup
{
get; set;
}
Run Code Online (Sandbox Code Playgroud)
我想将此属性的默认值设置为true而不使用它甚至在page_init方法中,我尝试但没有成功,任何人都可以解释如何做到这一点?
如何将字段的默认值设置为Mysql中的其他列我已经使用虚拟字段完成了oracle但我不知道如何在Mysql中执行此操作这是我的表:
create table TSM_TRANSACTION_TBL
(
TRANS_ID INT primary key auto_increment,
LOCATION_ID INT,
TRANS_DATE DATE,
RESOURCE_ID INT,
TS_ID INT,
MAX_VALUE INT,
BOOKED_UNITS INT default 0,
REMAINING INT default MAX_VALUE - BOOKED_UNITS,
BOOKED INT not null,
USER_ID INT,
TRANS_TIME TIMESTAMP
)
Run Code Online (Sandbox Code Playgroud) 这有效:
class MyClass
{
int a;
public MyClass()
{
int b = a;
}
}
Run Code Online (Sandbox Code Playgroud)
但这会产生编译错误("使用未分配的局部变量'a'"):
class MyClass
{
public MyClass()
{
int a;
int b = a;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这是因为在第一个例子中,从技术上讲,编译器不知道没有分配'a'.在后一个例子中,'a'是在本地定义的,因此很容易跟踪.
但为什么后一个例子不起作用?
不要将整数默认为0吗?这是编译器对"最佳实践"强制执行的操作.还是有其他原因吗?
我试图找到一种方法来检查并查看给定对象的值是否等于其默认值.我环顾四周,想出了这个:
public static bool IsNullOrDefault<T>(T argument)
{
if (argument is ValueType || argument != null)
{
return object.Equals(argument, default(T));
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我想这样称呼它:
object o = 0;
bool b = Utility.Utility.IsNullOrDefault(o);
Run Code Online (Sandbox Code Playgroud)
是o是一个对象,但我想让它弄清楚基类型并检查它的默认值.在这种情况下,基类型是一个整数,我想在这种情况下知道该值是否等于default(int),而不是default(object).
我开始认为这可能是不可能的.
如果用户将从键盘输入值,我必须设置默认值.以下是用户可以输入值的代码:
input = int(raw_input("Enter the inputs : "))
Run Code Online (Sandbox Code Playgroud)
这里的值将input在输入值后分配给变量并点击'Enter',是否有任何方法,如果我们不输入值并直接点击'Enter'键,变量将直接指定默认值,如input = 0.025.
每当我尝试将可选参数的默认值设置为资源文件中的某些内容时,我都会得到编译时错误
'message'的默认参数值必须是编译时常量.
有什么办法可以改变资源文件的工作方式来实现这个目标吗?
public void ValidationError(string fieldName,
string message = ValidationMessages.ContactNotFound)
Run Code Online (Sandbox Code Playgroud)
在这里,ValidationMessages是一个资源文件.
如何更改继承的依赖项属性的默认值?在我们的例子中,我们创建了一个Control的子类,默认情况下它的Focusable设置为'true'.我们希望我们的子类具有默认值'false'.
我们一直在做的只是在构造函数中将其设置为'false',但如果有人使用ClearValue,它将返回默认值,而不是构造函数中设置的值.
以下是我目前正在做的事情(这是一个带有'Foo'DP的测试控件的例子.)我不是隐藏属性的'新'的粉丝虽然感谢AddOwner,但它确实指出了到同一个共享实例所以我猜它没关系.它看起来像是继承了所有其他元数据值,所以这很好.只是想知道这是否正确?
public class TestControlBase : Control
{
public static readonly DependencyProperty FooProperty = DependencyProperty.Register(
"Foo",
typeof(int),
typeof(TestControlBase),
new FrameworkPropertyMetadata(4) // Original default value
);
public int Foo
{
get { return (int)GetValue(FooProperty); }
set { SetValue(FooProperty, value); }
}
}
public class TestControl : TestControlBase
{
public static readonly new DependencyProperty FooProperty = TestControlBase.FooProperty.AddOwner(
typeof(TestControl),
new FrameworkPropertyMetadata(67) // New default for this subclass
);
}
Run Code Online (Sandbox Code Playgroud)
标记
更新中...
我认为这更好,因为它消除了"新"呼叫.您仍然可以通过基类上的FooProperty访问它,因为它使用了AddOwner.因此,它在技术上是相同的.
public class TestControl : …Run Code Online (Sandbox Code Playgroud) 因此,我可以安全地重构所有的实例
class Blah
{
// ...
private $foo = null;
// ...
}
Run Code Online (Sandbox Code Playgroud)
至
class Blah
{
// ...
private $foo;
// ...
}
Run Code Online (Sandbox Code Playgroud)
?
default-value ×10
c# ×4
default ×2
python ×2
asp.net ×1
generics ×1
int ×1
mysql ×1
null ×1
parameters ×1
php ×1
properties ×1
scala ×1
scope ×1
subclass ×1
user-input ×1
wpf ×1