Questions tagged «idioms»

编程习惯用法是一种克服编程语言限制和/或编写与代码的字面意义分开的目的的通用代码的方法。同样,当有多种显而易见的方式来编写代码时,成语是一种首选的编写代码的方式。

30
var functionName = function(){}与function functionName(){}
我最近开始维护别人的JavaScript代码。我正在修复错误,添加功能,还试图整理代码并使其更加一致。 以前的开发人员使用了两种方法来声明函数,如果有背后的原因,我将无法解决。 两种方式是: var functionOne = function() { // Some code }; function functionTwo() { // Some code } 使用这两种不同方法的原因是什么,每种方法的利弊是什么?有什么方法可以用另一种方法不能完成的?

30
__name__ ==“ __main__”怎么办?
Наэтотвопросестьответына 堆栈溢出нарусском:Чтоделают如果__name__ ==“__main__”? 给定以下代码,该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))

10
如何在C ++中正确实现工厂方法模式
在C ++中有一件事让我很长时间以来一直感到不舒服,因为老实说我不知道​​怎么做,尽管听起来很简单: 如何在C ++中正确实现Factory方法? 目标:允许客户端使用工厂方法而不是对象的构造函数实例化某些对象,而不会造成不可接受的后果和性能损失。 “工厂方法模式”是指对象内部的静态工厂方法或另一个类中定义的方法或全局函数。通常只是“将类X的常规实例化方法重定向到构造函数以外的任何其他地方的概念”。 让我浏览一下我想到的一些可能的答案。 0)不要制造工厂,制造构造函数。 这听起来不错(实际上通常是最好的解决方案),但这不是一般的补救方法。首先,在某些情况下,对象构造是一个任务复杂到足以证明将其提取到另一个类的任务。但是即使抛开这个事实,即使对于仅使用构造函数的简单对象,也常常不起作用。 我知道的最简单的示例是2-D Vector类。如此简单,但棘手。我希望能够同时从笛卡尔坐标和极坐标构造它。显然,我不能做: struct Vec2 { Vec2(float x, float y); Vec2(float angle, float magnitude); // not a valid overload! // ... }; 我的自然思维方式是: struct Vec2 { static Vec2 fromLinear(float x, float y); static Vec2 fromPolar(float angle, float magnitude); // ... }; 这不是构造函数,而是带我使用静态工厂方法……这实际上意味着我正在以某种方式实现工厂模式(“类成为自己的工厂”)。这看起来不错(并且将适合此特定情况),但是在某些情况下会失败,这将在第2点中进行描述。请继续阅读。 …


9
如何遍历C ++地图?
如何std::map在C ++中循环浏览?我的地图定义为: std::map< std::string, std::map<std::string, std::string> > 例如,上述容器保存如下数据: m["name1"]["value1"] = "data1"; m["name1"]["value2"] = "data2"; m["name2"]["value1"] = "data1"; m["name2"]["value2"] = "data2"; m["name3"]["value1"] = "data1"; m["name3"]["value2"] = "data2"; 如何遍历此映射并访问各种值?

23
Python成语返回第一项或无
我敢肯定,有一种更简单的方法可以做到这一点,而这只是我自己没有想到的。 我正在调用一堆返回列表的方法。该列表可能为空。如果列表是非空的,我想返回第一项。否则,我想返回无。此代码有效: my_list = get_list() if len(my_list) > 0: return my_list[0] return None 在我看来,这样做应该有一个简单的一句习惯用语,但是对于我的一生,我无法想到。在那儿? 编辑: 我在这里寻找单行表达式的原因并不是我喜欢令人难以置信的简洁代码,而是因为我不得不编写很多这样的代码: 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 …

30
如何在Java中反转int数组?
Наэтотвопросестьответына 堆栈溢出нарусском:КакперевернутьмассиввДжаве? 我正在尝试反转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; } 怎么了
238 java  arrays  idioms  idiomatic 

21
在“ for”循环中检测最后一个元素的pythonic方法是什么?
我想知道对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 有什么更好的办法吗? 注意:我不希望使用hack之类的东西reduce。;)

16
Python:将None转换为空字符串的最惯用方式?
做以下事情的最惯用的方法是什么? def xstr(s): if s is None: return '' else: return s s = xstr(a) + xstr(b) 更新:我合并了Tryptich的建议使用str(s),这使此例程可用于字符串以外的其他类型。Vinay Sajip的lambda建议给我留下了深刻的印象,但是我想保持我的代码相对简单。 def xstr(s): if s is None: return '' else: return str(s)
156 string  python  idioms 



9
一对单对
通常,我发现需要成对处理列表。我想知道哪种方法是有效的pythonic方法,并在Google上找到了它: pairs = zip(t[::2], t[1::2]) 我认为这已经足够好用了,但是在最近涉及成语与效率的讨论之后,我决定进行一些测试: import time from itertools import islice, izip def pairs_1(t): return zip(t[::2], t[1::2]) def pairs_2(t): return izip(t[::2], t[1::2]) def pairs_3(t): return izip(islice(t,None,None,2), islice(t,1,None,2)) A = range(10000) B = xrange(len(A)) def pairs_4(t): # ignore value of t! t = B return izip(islice(t,None,None,2), islice(t,1,None,2)) for f in …
98 python  list  zip  slice  idioms 

10
`if key in dict` vs. try / except`-哪个更易读?
我有一个关于成语和可读性的问题,对于这种特殊情况,似乎存在Python哲学上的冲突: 我想从字典B构建字典A。如果B中不存在特定键,则什么也不做,继续。 哪种方法更好? try: A["blah"] = B["blah"] except KeyError: pass 要么 if "blah" in B: A["blah"] = B["blah"] “请原谅”与“简单明了”。 哪个更好?为什么?

3
用Groovy进行字符串连接
在Groovy中串联字符串的最佳(惯用)方法是什么? 选项1: calculateAccountNumber(bank, branch, checkDigit, account) { bank + branch + checkDigit + account } 选项2: calculateAccountNumber(bank, branch, checkDigit, account) { "$bank$branch$checkDigit$account" } 我已经在旧的Groovy网站上找到了有关此主题的有趣观点:您可以做的事情最好不要做。 与Java中一样,您可以将字符串与“ +”符号连接起来。但是Java只需要将“ +”表达式的两个项目之一作为字符串,无论它在首位还是在最后一位。Java将在“ +”表达式的非String对象中使用toString()方法。但是在Groovy中,您应该安全无忧,“ +”表达式的第一项以正确的方式实现plus()方法,因为Groovy会搜索并使用它。在Groovy GDK中,只有Number和String / StringBuffer / Character类具有实现串联字符串的plus()方法。为避免意外,请始终使用GStrings。

9
在事件声明中添加匿名空委托是否有不利之处?
我已经看到了一些关于这个成语的提法(包括SO): // Deliberately empty subscriber public event EventHandler AskQuestion = delegate {}; 好处很明显-避免了在引发事件之前检查null的需要。 但是,我很想了解是否有任何弊端。 例如,它是否已经被广泛使用并且足够透明以至于不会引起维护麻烦?空事件订阅者调用是否有明显的性能下降?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.