小编Mec*_*ail的帖子

`**'在表达式'dict(d1,**d2)中是什么意思?

我对以下python表达式很感兴趣:

d3 = dict(d1, **d2)
Run Code Online (Sandbox Code Playgroud)

任务是将2个词典合并为第三个词典,上面的表达式完成任务就好了.我对**运算符感兴趣,它对表达式究竟做了什么.我认为**是功率运算符,还没有看到它在上面的上下文中使用过.

完整的代码片段是这样的:

>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3 = dict(d1, **d2)
>>> print d3
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
Run Code Online (Sandbox Code Playgroud)

python syntax dictionary operators set-operations

43
推荐指数
3
解决办法
7960
查看次数

"xor eax,ebp"用于C++编译器输出

我只是尝试在VS2010上编译几个C++片段并分析IDA Pro上的可执行文件.我注意到的是,他们中的大多数在开始时都有类似的内容(在调用__security_check_cookie之后不久)

xor eax, ebp

和类似的东西

xor ecx, ebp

在底部.为什么会这样?编译器优化已关闭.

c++ assembly reverse-engineering buffer-overflow compiler-optimization

43
推荐指数
1
解决办法
4444
查看次数

在列表前加上`::`和`+:`之间有什么区别?

List 有两个方法指定将元素添加到(不可变)列表:

  • +:(实施Seq.+:),和
  • ::(仅在中定义List)

+: 技术上有一个更通用的类型签名 -

def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That
def ::[B >: A](x: B): List[B]
Run Code Online (Sandbox Code Playgroud)

-丁忽略隐式的,它根据该文档信息仅需要ThatList[B],签名是等效的.

List.+:和之间有什么区别List.::如果它们实际上是相同的,我认为+:最好避免取决于具体实施List.但是为什么定义了另一个公共方法,客户端代码何时会调用它?

编辑

还有一个用于::模式匹配的提取器,但我想知道这些特定的方法.

另请参阅:Scala list concatenation,::: vs ++

scala list operators cons prepend

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

为什么这个代码在C#中无效?

以下代码将无法编译:

string foo = "bar";
Object o = foo == null ? DBNull.Value : foo;
Run Code Online (Sandbox Code Playgroud)

我得到:错误1无法确定条件表达式的类型,因为'System.DBNull'和'string'之间没有隐式转换

要解决这个问题,我必须做这样的事情:

string foo = "bar";
Object o = foo == null ? DBNull.Value : (Object)foo;
Run Code Online (Sandbox Code Playgroud)

这个演员似乎毫无意义,因为这肯定是合法的:

string foo = "bar";
Object o = foo == null ? "gork" : foo;
Run Code Online (Sandbox Code Playgroud)

在我看来,当三元分支具有不同类型时,编译器不会将值自动提供给类型对象...但是当它们属于相同类型时,则自动装箱是自动的.

在我看来,第一个声明应该是合法的......

任何人都可以描述为什么编译器不允许这样做以及为什么C#的设计者选择这样做?我相信这在Java中是合法的......虽然我没有验证这一点.

谢谢.

编辑:我要求理解为什么Java和C#以不同的方式处理这个问题,C#中的场景下发生了什么使得它无效.我知道如何使用三元,而不是寻找一个"更好的方法"来编写示例代码.我理解C#中的三元规则,但我想知道为什么......

编辑(Jon Skeet):删除了"autoboxing"标签,因为这个问题没有涉及拳击.

c# dbnull nullable conditional-operator

40
推荐指数
3
解决办法
1万
查看次数

为什么IEnumerable <T>在C#4中变得协变?

在早期版本的C#IEnumerable中定义如下:

public interface IEnumerable<T> : IEnumerable
Run Code Online (Sandbox Code Playgroud)

从C#4开始,定义是:

public interface IEnumerable<out T> : IEnumerable
Run Code Online (Sandbox Code Playgroud)
  • 只是让LINQ表达式中令人讨厌的强制转换消失了吗?
  • 这不会引入与string[] <: object[]C#中的(破坏的数组方差)相同的问题吗?
  • 从兼容性的角度来看,如何完成协方差的增加?早期代码是否仍适用于更高版本的.NET,或者是否需要重新编译?反过来呢?
  • 以前使用此接口的代码在所有情况下都是严格不变的,或者某些用例现在可能会有不同的行为吗?

c# generics ienumerable language-design covariance

40
推荐指数
3
解决办法
5560
查看次数

如何在定义类时自动注册一个类

我希望在定义类时注册一个类实例.理想情况下,下面的代码可以解决问题.

registry = {}

def register( cls ):
   registry[cls.__name__] = cls() #problem here
   return cls

@register
class MyClass( Base ):
   def __init__(self):
      super( MyClass, self ).__init__() 
Run Code Online (Sandbox Code Playgroud)

不幸的是,此代码会生成错误NameError: global name 'MyClass' is not defined.

#problem here我正在尝试实例化的一行是什么,MyClass但装饰者还没有返回,所以它不存在.

是不是在使用元类或类似的东西?

python oop design-patterns metaclass decorator

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

C#Generics有性能优势吗?

我有许多代表各种实体的数据类.

哪个更好:使用泛型和接口编写泛型类(比如打印或输出XML),或者编写一个单独的类来处理每个数据类?

是否有性能优势或任何其他好处(除了节省我编写单独课程的时间)?

.net c# generics performance

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

Clojure是编译还是解释?

我在某处编写了Clojure.是真的编译,如Java或Scala,而不是解释,如Jython或JRuby?

interpreted-language compilation clojure jvm-languages compiled-language

37
推荐指数
3
解决办法
6250
查看次数

Java条件运算符?:结果类型

我对条件运算符有点疑惑.请考虑以下两行:

Float f1 = false? 1.0f: null;
Float f2 = false? 1.0f: false? 1.0f: null;
Run Code Online (Sandbox Code Playgroud)

为什么f1变为null而第二个语句抛出NullPointerException?

Langspec-3.0 para 15.25 sais:

否则,第二和第三操作数分别是S1和S2类型.设T1是将拳击转换应用于S1所产生的类型,让T2为应用到S2的装箱转换所产生的类型.条件表达式的类型是将捕获转换(第5.1.10节)应用于lub(T1,T2)(第15.12.2.7节)的结果.

所以对于false?1.0f:nullT1是Float而T2是null类型.但结果是lub(T1,T2)什么?第15.12.2.7段只是有点太多了......

顺便说一句,我在Windows上使用1.6.0_18.

PS:我知道Float f2 = false? (Float) 1.0f: false? (Float) 1.0f: null;不会抛出NPE.

java type-conversion nullpointerexception conditional-operator

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

依赖于目录下所有文件的Makefile规则(包括在子目录中)

我的Makefile中的一条规则将整个目录(res/)压缩为ZIP文件.显然,当目录下的任何文件res/发生更改时,需要执行此规则.因此,我希望规则将该目录下的所有文件作为先决条件.我该如何实施这条规则?

启用globstar选项的 Bash中,您可以使用通配符模式获取该目录中所有文件的列表res/**/*.但是,如果将其指定为Makefile中的先决条件,它似乎不起作用:

filename.jar: res/**/*
Run Code Online (Sandbox Code Playgroud)

即使在touch输入文件后res/,仍然可以生成报告

make: `filename.jar' is up to date.
Run Code Online (Sandbox Code Playgroud)

很明显它没有认识到这种模式.

如果我将目录本身声明为先决条件:

filename.jar: res
Run Code Online (Sandbox Code Playgroud)

然后在修改文件时不会重新执行Make(我认为make只查看目录本身的修改日期,只有在添加,删除或重命名直接子项时才会更改).

glob makefile wildcard gnu-make

36
推荐指数
1
解决办法
2万
查看次数