你如何计算dictPython 中两个对象的并集,其中(key, value)结果中存在一对iff key是indict(除非有重复)?
例如,{'a' : 0, 'b' : 1}和{'c' : 2}的结合{'a' : 0, 'b' : 1, 'c' : 2}.
您最好不要修改任何输入dict.这有用的示例:获取当前范围内所有变量及其值的字典
通常情况下,我发现需要成对处理列表.我想知道哪个是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哲学冲突:
我想从字典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)
"做并请求原谅"与"简单和明确".
哪个更好?为什么?
在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.
我已经看到了一些关于这个习语的提及(包括SO):
// Deliberately empty subscriber
public event EventHandler AskQuestion = delegate {};
Run Code Online (Sandbox Code Playgroud)
好处很明显 - 它避免了在提升事件之前检查null的必要性.
但是,我很想知道是否有任何缺点. 例如,它是否被广泛使用并且足够透明以至于不会引起维护问题?空事件用户呼叫是否有明显的性能影响?
我正在寻找一种简洁的方法来检查一个值,看它是零还是零.目前我正在做的事情如下:
if (!val || val == 0)
# Is nil or zero
end
Run Code Online (Sandbox Code Playgroud)
但这看起来很笨拙.
每个人都会遇到这个问题:
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结构吗?
for(const auto& item : items) {
cout << item;
} and_between …Run Code Online (Sandbox Code Playgroud) 如何在Java中实现命名参数习语?(特别是对于构造函数)
我正在寻找类似Objective-C的语法,而不是像JavaBeans中使用的语法.
一个小代码示例就可以了.
谢谢.
我看到"编程成语"这句话被抛出,好像它是普遍理解的.然而,在搜索结果和堆栈溢出中,我看到了一切......
来自微观:
中等:
要宏:
"编程习语"有一个单独的共同定义吗?由于"编程习惯用法"在许多范围内使用:
在任何这些范围中使用短语是否有效?到目前为止,答案主要集中在句法习语上.其他人也有效吗?
idioms ×10
python ×3
ruby ×2
c# ×1
c++ ×1
c++11 ×1
coding-style ×1
defaultdict ×1
delegates ×1
dictionary ×1
events ×1
groovy ×1
gstring ×1
java ×1
list ×1
null ×1
readability ×1
separator ×1
slice ×1
string ×1
typechecking ×1
zip ×1