我最近开始维护其他人的JavaScript代码.我正在修复错误,添加功能,并尝试整理代码并使其更加一致.
以前的开发人员使用两种声明函数的方法,如果背后有原因,我就无法解决.
这两种方式是:
var functionOne = function() {
// Some code
};
Run Code Online (Sandbox Code Playgroud)
function functionTwo() {
// Some code
}
Run Code Online (Sandbox Code Playgroud)
使用这两种不同方法的原因是什么?每种方法的优缺点是什么?有一种方法可以通过一种方法完成,而另一种方法无法完成吗?
怎么if __name__ == "__main__":
办?
# Threading example
import time, thread
def myfunction(string, sleeptime, lock, *args):
while True:
lock.acquire()
time.sleep(sleeptime)
lock.release()
time.sleep(sleeptime)
if __name__ == "__main__":
lock = thread.allocate_lock()
thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))
Run Code Online (Sandbox Code Playgroud) C++中的这一件事让我感到不舒服很长一段时间,因为我老实说不知道该怎么做,尽管听起来很简单:
目标:允许客户端使用工厂方法而不是对象的构造函数来实例化某个对象,而不会产生不可接受的后果和性能损失.
"工厂方法模式"是指对象内部的静态工厂方法或另一个类中定义的方法,或全局函数.通常只是"将类X的实例化的正常方式重定向到构造函数之外的任何其他位置的概念".
让我略过一些我想到过的可能答案.
这听起来不错(实际上通常是最好的解决方案),但不是一般的补救措施.首先,有些情况下,对象构造是一个复杂的任务,足以证明它被提取到另一个类.但即使将这个事实放在一边,即使对于仅使用构造函数的简单对象,通常也不会这样做.
我所知道的最简单的例子是2-D Vector类.这么简单,但很棘手.我希望能够从笛卡尔坐标和极坐标两者构造它.显然,我做不到:
struct Vec2 {
Vec2(float x, float y);
Vec2(float angle, float magnitude); // not a valid overload!
// ...
};
Run Code Online (Sandbox Code Playgroud)
我的自然思维方式是:
struct Vec2 {
static Vec2 fromLinear(float x, float y);
static Vec2 fromPolar(float angle, float magnitude);
// ...
};
Run Code Online (Sandbox Code Playgroud)
其中,而不是构造函数,导致我使用静态工厂方法...这实际上意味着我正在以某种方式实现工厂模式("类成为自己的工厂").这看起来不错(并且适合这种特殊情况),但在某些情况下失败,我将在第2点中描述.继续阅读.
另一种情况:试图通过某些API的两个opaque typedef(例如不相关域的GUID,或GUID和位域)重载,类型在语义上完全不同(所以 - 理论上 - 有效的重载)但实际上它们实际上是同样的事情 - 像无符号的int或void指针.
Java很简单,因为我们只有动态分配的对象.制造工厂同样简单:
class FooFactory {
public Foo createFooInSomeWay() {
// can be a static method as well,
// if we don't need the factory …
Run Code Online (Sandbox Code Playgroud) 如何std::map
在C++中循环?我的地图定义为:
std::map< std::string, std::map<std::string, std::string> >
Run Code Online (Sandbox Code Playgroud)
例如,上面的容器包含如下数据:
m["name1"]["value1"] = "data1";
m["name1"]["value2"] = "data2";
m["name2"]["value1"] = "data1";
m["name2"]["value2"] = "data2";
m["name3"]["value1"] = "data1";
m["name3"]["value2"] = "data2";
Run Code Online (Sandbox Code Playgroud)
如何遍历此地图并访问各种值?
如果我有一个Python字典,我如何获得包含最小值的条目的键?
我在考虑与这个min()
功能有关...
鉴于输入:
{320:1, 321:0, 322:3}
Run Code Online (Sandbox Code Playgroud)
它会回来321
.
我确信有一种更简单的方法可以解决这个问题.
我正在调用一堆返回列表的方法.该列表可能为空.如果列表非空,我想返回第一个项目; 否则,我想要返回无.此代码有效:
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
Run Code Online (Sandbox Code Playgroud)
在我看来,应该有一个简单的单行成语,但对于我的生活,我无法想到它.在那儿?
编辑:
我在这里寻找单行表达式的原因并不是因为我喜欢简洁的代码,而是因为我必须编写很多像这样的代码:
x = get_first_list()
if x:
# do something with x[0]
# inevitably forget the [0] part, and have a bug to fix
y = get_second_list()
if y:
# do something with y[0]
# inevitably forget the [0] part AGAIN, and have another bug to fix
Run Code Online (Sandbox Code Playgroud)
我想要做的事情当然可以用一个函数来完成(也可能是):
def first_item(list_or_none):
if list_or_none: return list_or_none[0]
x = first_item(get_first_list())
if x:
# do something with x
y …
Run Code Online (Sandbox Code Playgroud) 我试图在Java中反转一个int数组.
此方法不会反转数组.
for(int i = 0; i < validData.length; i++)
{
int temp = validData[i];
validData[i] = validData[validData.length - i - 1];
validData[validData.length - i - 1] = temp;
}
Run Code Online (Sandbox Code Playgroud)
这有什么问题?
我想知道对for循环中的最后一个元素进行特殊处理的最佳方法(更紧凑和"pythonic"方式).有一段代码只能在元素之间调用,在最后一个元素中被抑制.
以下是我目前的工作方式:
for i, data in enumerate(data_list):
code_that_is_done_for_every_element
if i != len(data_list) - 1:
code_that_is_done_between_elements
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?
注意:我不想使用hacks,例如使用reduce
;)
我听说过这个"执行周围"的习语(或类似的)是什么?为什么我可以使用它,为什么我不想使用它?
做以下事情的最惯用方法是什么?
def xstr(s):
if s is None:
return ''
else:
return s
s = xstr(a) + xstr(b)
Run Code Online (Sandbox Code Playgroud)
更新:我正在使用Tryptich的建议来使用str(s),这使得这个例程适用于除字符串之外的其他类型.Vinay Sajip的lambda建议给我留下了深刻的印象,但我想保持我的代码相对简单.
def xstr(s):
if s is None:
return ''
else:
return str(s)
Run Code Online (Sandbox Code Playgroud) idioms ×10
python ×5
c++ ×2
dictionary ×2
java ×2
arrays ×1
fencepost ×1
for-loop ×1
function ×1
idiomatic ×1
iteration ×1
javascript ×1
loops ×1
min ×1
minimum ×1
namespaces ×1
python-2.4 ×1
string ×1
syntax ×1