小编Edv*_*olm的帖子

super()的第二个参数?

我的一位同事今天写了类似下面的代码,请我看看,我花了一段时间才发现错误:

class A():                                                                                         
    def __init__(self):                                                         
        print('A')                                                              

class B(A):                                                                     
    def __init__(self):                                                         
        super(B).__init__()                                               

b = B()
Run Code Online (Sandbox Code Playgroud)

这里的问题是在构造函数中没有self参数.让我感到惊讶的是,在这种情况下绝对没有任何事情发生,即没有错误,没有.包含的对象创建了什么?作为一个对象,它显然有一个构造函数,所以这是被调用的,但该对象是如何与?相关的?特别是,为什么这个有效的代码并没有在某处抛出异常?是一个具有一些实际用途的对象,那会是什么?super()Bsupersuper(B)Bsuper(B)

python class super python-3.x

13
推荐指数
1
解决办法
582
查看次数

优化Haskell程序

我昨天开始关注Haskell,目的是实际学习它.我在编程语言课程中编写了一些简单的程序,但没有一个真正关心效率.我试图了解如何改善以下程序的运行时间.

我的程序解决了以下玩具问题(我知道如果你知道什么是阶乘,那么手动计算答案是很简单的,但我正在使用后继函数进行蛮力方式):

http://projecteuler.net/problem=24

给定有限长度列表的词典排序的后继函数的算法如下:

  1. 如果列表已经按递减顺序排列,那么我们在词典排序中有最大元素,因此没有后继者.

  2. 给定一个列表h:t,或者在词典排序中t是最大的,或者不是.在后一种情况下,计算t的后继.在前一种情况下,进行如下.

  3. 选择t大于h的最小元素d.

  4. 用h代替d,给出一个新的列表t'.排序中的下一个元素是d :(排序t')

我实现此目的的程序如下(许多这些函数可能在标准库中):

max_list :: (Ord a) => [a] -> a
max_list []     = error "Empty list has no maximum!"
max_list (h:[]) = h
max_list (h:t)  = max h (max_list t)

min_list :: (Ord a) => [a] -> a
min_list []     = error "Empty list has no minimum!"
min_list (h:[]) = h
min_list (h:t)  = min h (min_list t)

-- replaces first occurrence of x in list with y
replace :: (Eq a) …
Run Code Online (Sandbox Code Playgroud)

optimization haskell

5
推荐指数
1
解决办法
463
查看次数

在 docker 中共享 proto 文件?

我想知道人们如何倾向于在 docker 组合中的客户端和服务器之间共享 proto 文件?我正在测试 gRPC 的乐趣,并创建了一个具有以下布局的项目:

docker-compose.yml
front/Dockerfile
      ...
back/Dockerfile
     proto/
     ...
Run Code Online (Sandbox Code Playgroud)

frontback服务器的 gRPC 客户端。现在back/proto包含生成客户端存根所需的 protobuf 文件。这里的问题是这超出了front. 使用这些的任何人都有任何最佳实践可以分享来处理这个问题?

protocol-buffers project-layout grpc docker-compose

5
推荐指数
1
解决办法
683
查看次数

在编译时提取宏常量中的位数

我需要做一些预处理器魔术.假设我有一个全局常量

#define MAX_VALUE 99999
Run Code Online (Sandbox Code Playgroud)

我需要做的是在编译时以十进制表示形式提取此常量的长度.换句话说,我不想要另一个常数

#define MAX_VALUE_STRLEN 5
Run Code Online (Sandbox Code Playgroud)

污染全局命名空间,我不想在修改MAX_VALUE的情况下在代码中添加需要更改的位置.如果我有一个数字文字,那么我可以做类似的事情

#define INTLEN(x) (sizeof(#x)/sizeof((#x)[0]) - 1)
Run Code Online (Sandbox Code Playgroud)

然后在编译时INTLEN(99999)扩展到5.不幸的是,我做不了类似的事情

INTLEN(MAX_VALUE),
Run Code Online (Sandbox Code Playgroud)

因为预处理器首先扩展INTLEN,所以我得到了

 (sizeof("MAX_VALUE")/sizeof(("MAX_VALUE")[0]) - 1)
Run Code Online (Sandbox Code Playgroud)

是否有预处理器技巧可以达到我想要的效果?我应该能够安全地忽略的另一个棘手的问题是,如果有人决定添加一个类型注释,例如,99999L到常量,我仍然可以获得正确的值,这可以做得足够通用吗?

c c-preprocessor

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