因此,我在一种类似python类中给出了以下代码。这确实是一个离散的数学类,但他使用python来演示一切。这段代码应该演示多路复用器并用它构建一个异或门。在
def mux41(i0,i1,i2,i3):
return lambda s1,s0:{(0,0):i0,(0,1):i1,(1,0):i2,(1,1):i3}[(s1,s0)]
def xor2(a,b):
return mux41(0,1,1,0)(a,b)
在xor2
函数中,我不理解return mux41(0,1,1,0)(a,b)
后面的语法,1和0是mux函数的输入,但是(a,b)在做什么呢?在
(a, b)
实际上是您在mux41
函数中返回的lambda
函数的输入。在您的
mux41
函数返回一个lambda
函数,它看起来像是根据mux41
函数的输入返回字典中的值。您需要第二个输入来说明要返回哪个值。在它直接相当于:
对于Python初学者来说,这是一个相当高级的代码,所以不要感到遗憾,因为它对您来说并不明显。我也认为这是相当棘手的比它需要的。在
它定义了一个基于两个输入返回值的函数对象。这两个输入是}来选择这四个值中的一个。在
s1
和s0
。function对象构建一个字典,其中预填充了传递给mux41()
的四个值,它使用s0
和{字典使用键来查找值。在本例中,键是Python元组:}。表达式
^{pr2}$(0, 0)
,(0, 1)
,(1, 0)
,和{(s1,s0)
正在从参数s0
和s1
构建元组。这个元组用作从字典中查找值的键。在因此,}作为参数传入。最后它返回答案。在
mux41()
返回一个函数对象,它执行我刚刚讨论过的内容。xor2()
调用mux41()
并获得一个函数对象;然后它立即调用返回的函数对象,并将a
和{mux41()
创建的函数对象不会保存在任何地方。因此,每次调用xor2()
,都是在创建一个函数对象,然后被垃圾回收。当function对象运行时,它将构建一个dictionary对象,并且在每次使用之后都会被垃圾回收。这可能是我见过的最复杂的异或函数。在这里有一个重写,可能会使这一点更清楚。我不使用
lambda
来创建一个未命名的函数对象,而是使用def
来创建一个命名函数。在编辑:如果我想在Python中进行表查找XOR,我会写下这些。在
我们构建一次查找字典,然后直接从
xor2()
使用它。实际上没有必要在xor2()
中生成显式的temp变量,但可能会更清楚一些。你可以这样做:你喜欢哪个?在
当然,由于Python内置了一个XOR操作符,所以可以这样写:
如果我是真的写这篇文章,我可能会添加错误处理和/或使它对
bool
值进行操作。在编辑:我又发生了一件事。在Python中,规则是“逗号生成元组”。元组周围的括号有时是可选的。我刚检查过,在查字典的时候去掉括号就行了。所以你可以这样做:
而且效果很好。这也许有点太棘手了?如果我在别人的代码中看到这一点,我会感到惊讶的。在
相关问题 更多 >
编程相关推荐