标签: idioms

Python中的dict对象联合

你如何计算dictPython 中两个对象的并集,其中(key, value)结果中存在一对iff keyindict(除非有重复)?

例如,{'a' : 0, 'b' : 1}{'c' : 2}的结合{'a' : 0, 'b' : 1, 'c' : 2}.

您最好不要修改任何输入dict.这有用的示例:获取当前范围内所有变量及其值的字典

python dictionary associative-array idioms set-operations

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

112
推荐指数
5
解决办法
11万
查看次数

单列表中的对

通常情况下,我发现需要成对处理列表.我想知道哪个是pythonic和有效的方法,并在谷歌上找到了这个:

pairs = zip(t[::2], t[1::2])
Run Code Online (Sandbox Code Playgroud)

我认为这是pythonic足够的,但在最近讨论成语与效率之后,我决定做一些测试:

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 pairs_1, pairs_2, pairs_3, pairs_4:
    # time the pairing
    s = time.time()
    for i in range(1000):
        p = f(A)
    t1 = time.time() - s

    # time using the pairs …
Run Code Online (Sandbox Code Playgroud)

python zip idioms list slice

87
推荐指数
3
解决办法
5万
查看次数

Python:`如果键入dict`与`try/except` - 这是更具可读性的成语?

我有一个关于习语和可读性的问题,似乎有一个针对这个特殊情况的Python哲学冲突:

我想从字典B中构建字典A.如果B中不存在特定的键,则不执行任何操作并继续.

哪种方式更好?

try:
    A["blah"] = B["blah"]
except KeyError:
    pass
Run Code Online (Sandbox Code Playgroud)

要么

if "blah" in B:
    A["blah"] = B["blah"]
Run Code Online (Sandbox Code Playgroud)

"做并请求原谅"与"简单和明确".

哪个更好?为什么?

python idioms readability code-readability defaultdict

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

使用Groovy进行字符串连接

在Groovy中连接字符串的最佳(惯用)方法是什么?

选项1:

calculateAccountNumber(bank, branch, checkDigit, account) {
    bank + branch + checkDigit + account
}
Run Code Online (Sandbox Code Playgroud)

选项2:

calculateAccountNumber(bank, branch, checkDigit, account) {
    "$bank$branch$checkDigit$account"
}
Run Code Online (Sandbox Code Playgroud)

我在旧的Groovy网站上找到了一个关于这个主题的有趣观点:你可以做的事情,但最好不要做.

与在Java中一样,您可以使用"+"符号连接字符串.但是Java只需要将"+"表达式的两个项中的一个作为String,无论它是在第一个位置还是在最后一个.Java将在"+"表达式的非String对象中使用toString()方法.但是在Groovy中,你应该是安全的,你的"+"表达式的第一项以正确的方式实现了plus()方法,因为Groovy将搜索并使用它.在Groovy GDK中,只有Number和String/StringBuffer/Character类实现了连接字符串的plus()方法.为避免意外,请始终使用GStrings.

string groovy idioms string-concatenation gstring

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

在事件声明中添加匿名空委托是否有缺点?

我已经看到了一些关于这个习语的提及(包括SO):

// Deliberately empty subscriber
public event EventHandler AskQuestion = delegate {};
Run Code Online (Sandbox Code Playgroud)

好处很明显 - 它避免了在提升事件之前检查null的必要性.

但是,我很想知道是否有任何缺点. 例如,它是否被广泛使用并且足够透明以至于不会引起维护问题?空事件用户呼叫是否有明显的性能影响?

c# events delegates coding-style idioms

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

最好的红宝石成语为"零或零"

我正在寻找一种简洁的方法来检查一个值,看它是零还是零.目前我正在做的事情如下:

if (!val || val == 0)
  # Is nil or zero
end
Run Code Online (Sandbox Code Playgroud)

但这看起来很笨拙.

ruby null design-patterns idioms

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

"除了最后一个之外的每一个"(或"每个连续元素对之间")的成语

每个人都会遇到这个问题:

for(const auto& item : items) {
    cout << item << separator;
}
Run Code Online (Sandbox Code Playgroud)

...而且你得到了一个你不想要的额外分隔符.有时候它不是打印,而是执行一些其他动作,但是相同类型的连续动作需要一些分隔符动作 - 但最后一个动作不需要.

现在,如果你使用old-school for循环和数组,你会这样做

for(int i = 0; i < num_items; i++)
    cout << items[i];
    if (i < num_items - 1) { cout << separator; }
}
Run Code Online (Sandbox Code Playgroud)

(或者你可以特别说明循环中的最后一项.)如果你有任何承认非破坏性迭代器的东西,即使你不知道它的大小,你可以这样做:

for(auto it = items.cbegin(); it != items.cend(); it++) {
    cout << *it;
    if (std::next(it) != items.cend()) { cout << separator; }
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢最后两个的美学,并喜欢一系列的循环.我可以获得与后两个相同的效果,但使用更多漂亮的C++ 11ish结构吗?


为了进一步扩展这个问题(除了这个之外),我会说我也不想明确地说明第一个或最后一个元素的特殊情况.这是一个"实施细节",我不想被打扰.所以,在虚构的未来C++中,可能是这样的:

for(const auto& item : items) {
    cout << item;
} and_between …
Run Code Online (Sandbox Code Playgroud)

c++ idioms separator c++11

76
推荐指数
9
解决办法
6697
查看次数

Java中的命名参数习语

如何在Java中实现命名参数习语?(特别是对于构造函数)

我正在寻找类似Objective-C的语法,而不是像JavaBeans中使用的语法.

一个小代码示例就可以了.

谢谢.

java idioms

71
推荐指数
10
解决办法
5万
查看次数

什么是编程习语?

我看到"编程成语"这句话被抛出,好像它是普遍理解的.然而,在搜索结果和堆栈溢出中,我看到了一切......

来自微观:

  • 增加变量
  • 代表无限循环
  • 交换变量值

中等:

要宏:

"编程习语"有一个单独的共同定义吗?由于"编程习惯用法"在许多范围内使用:

  • 微:句法细微差别或通用语法
  • 中:共同的风格和模式
  • 宏:编程范式为习语

在任何这些范围中使用短语是否有效?到目前为止,答案主要集中在句法习语上.其他人也有效吗?

language-agnostic idioms

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