小编Cla*_*diu的帖子

listen()而不调用bind()

我尝试了以下方法:

int sockfd = socket(...);
listen(sockfd, 10);
accept(sockfd, ...);
Run Code Online (Sandbox Code Playgroud)

没有任何调用失败,程序刚刚开始阻塞,好像我调用了bind().在这种情况下会发生什么?是否只是不可能接收连接,因为它没有本地地址或端口?或者它是否隐式分配了本地地址和端口,现在它正在监听那些?如果是这样,我该如何检索它们是什么?

language-agnostic networking network-programming tcp

10
推荐指数
1
解决办法
3539
查看次数

将数据放入代码时使用技巧来保存程序员是否可以接受?

示例:在python中键入字符串列表真的很烦人:

["January", "February", "March", "April", ...]
Run Code Online (Sandbox Code Playgroud)

我经常做这样的事情来节省我必须在整个地方键入引号:

"January February March April May June July August ...".split()
Run Code Online (Sandbox Code Playgroud)

那些花了相同的时间,我输入了2个月的数量.另一个例子:

[('a', '9'), ('4', '3'), ('z', 'x')...]
Run Code Online (Sandbox Code Playgroud)

代替:

map(tuple, "a9 43 zx".split())
Run Code Online (Sandbox Code Playgroud)

这花费的时间少得多.

python coding-style

10
推荐指数
4
解决办法
678
查看次数

Java中的功能数据结构

Java标准库是否具有功能更新的任何功能数据结构,如不可变集,列表等?

java functional-programming set immutability

10
推荐指数
1
解决办法
2900
查看次数

当子类没有在Java中定义构造函数时会发生什么?

我有几个我想知道的案例.首先,如果你没有构造函数:

class NoCons { int x; }
Run Code Online (Sandbox Code Playgroud)

当我这样做时new NoCons(),默认构造函数被调用.它究竟做了什么?它是设置x为0,还是在其他地方发生?

如果我遇到这种情况怎么办:

class NoCons2 extends NoCons { int y; }
Run Code Online (Sandbox Code Playgroud)

我打电话后会发生什么new NoCons2()?是否NoCons默认构造函数被调用,然后NoCons2是构造函数?他们各自将各自xy字段设置为0吗?

这个版本怎么样:

class Cons2 extends NoCons { int y; public Cons2() {} }
Run Code Online (Sandbox Code Playgroud)

现在我有一个构造函数,但它不会调用超类的构造函数.如何x初始化?如果我有这种情况怎么办?

class Cons { int x; public Cons() {} }
class NoCons2 extends Cons { int y;  }
Run Code Online (Sandbox Code Playgroud)

是否会Cons调用构造函数?

我可以尝试所有这些示例,但我无法确定何时运行默认构造函数.考虑这一点的一般方法是什么,以便我知道未来情况会发生什么?

java oop generics

10
推荐指数
1
解决办法
3640
查看次数

更优雅的方法来初始化Python中重复项的列表

如果我想要一个初始化为5个零的列表,这非常好用且简单:

[0] * 5
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改我的代码以放置更复杂的数据结构,如零列表:

[[0]] * 5
Run Code Online (Sandbox Code Playgroud)

将不会按预期工作,因为它将是同一列表的10个副本.我要做:

[[0] for i in xrange(5)]
Run Code Online (Sandbox Code Playgroud)

感觉笨重并使用变量,所以有时我甚至做:

[[0] for _ in "     "]
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要一个零列表列表,它会变得更加丑陋:

[[[0] for _ in "     "] for _ in "     "]
Run Code Online (Sandbox Code Playgroud)

所有这些而不是我想做的事情:

[[[0]]*5]*5
Run Code Online (Sandbox Code Playgroud)

有没有人找到一种优雅的方式来处理这个"问题"?

python

10
推荐指数
2
解决办法
2341
查看次数

ruby默认参数成语

当你想要一个函数的默认参数,但是一个依赖于另一个参数/另一个变量的函数时,Ruby中的成语是什么?例如,在Python中,一个例子是:

def insort_right(a, x, lo=0, hi=None):
    if hi is None:
        hi = len(a)
    while lo < hi:
        mid = (lo+hi)//2
        if x < a[mid]: hi = mid
        else: lo = mid+1
    a.insert(lo, x)
Run Code Online (Sandbox Code Playgroud)

在这里,如果hi没有提供,它应该是len(a).您不能len(a)在默认参数列表中执行,因此您为其分配了一个标记值None,并检查它.Ruby中的等价物是什么?

ruby default idioms default-value

10
推荐指数
1
解决办法
5212
查看次数

相互排斥的关键字args的优雅模式?

有时在我的代码中,我有一个函数可以用两种方式之一进行参数.就像是:

def func(objname=None, objtype=None):
    if objname is not None and objtype is not None:
        raise ValueError("only 1 of the ways at a time")
    if objname is not None:
        obj = getObjByName(objname)
    elif objtype is not None:
        obj = getObjByType(objtype)
    else:
        raise ValueError("not given any of the ways")

    doStuffWithObj(obj)
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来做到这一点?如果arg可以采用三种方式之一怎么办?如果类型不同我可以做:

def func(objnameOrType):
    if type(objnameOrType) is str:
        getObjByName(objnameOrType)
    elif type(objnameOrType) is type:
        getObjByType(objnameOrType)
    else:
        raise ValueError("unk arg type: %s" % type(objnameOrType))
Run Code Online (Sandbox Code Playgroud)

但如果他们不是呢?这种选择似乎很愚蠢:

def func(objnameOrType, isName=True):
    if isName:
        getObjByName(objnameOrType)
    else:
        getObjByType(objnameOrType)
Run Code Online (Sandbox Code Playgroud)

因此,你必须称之为func(mytype, …

python design-patterns coding-style

10
推荐指数
1
解决办法
4345
查看次数

使用Python和NumPy从矩阵中获取最小/最大n值和索引的有效方法

在给定NumPy矩阵(2D数组)的情况下,返回数组中的最小值/最大值n(及其索引)的有效方法是什么?

目前我有:

def n_max(arr, n):
    res = [(0,(0,0))]*n
    for y in xrange(len(arr)):
        for x in xrange(len(arr[y])):
            val = float(arr[y,x])
            el = (val,(y,x))
            i = bisect.bisect(res, el)
            if i > 0:
                res.insert(i, el)
                del res[0]
    return res
Run Code Online (Sandbox Code Playgroud)

这比pyopencv生成我想要运行它的数组的图像模板匹配算法要长三倍,我认为这很愚蠢.

python optimization performance numpy

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

由于警告,CMake未能检测到pthread

使用CMake创建项目时出错:

-- Could NOT find Threads (missing:  Threads_FOUND)
Run Code Online (Sandbox Code Playgroud)

错误日志显示CMake绊倒了一些真正平庸的东西:

/usr/bin/cc   -std=c11 -D_GNU_SOURCE   -Wall -Wextra -Wpointer-arith -Wundef -Wvla -Wwrite-strings -Werror -Wno-error=extra -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=strict-aliasing -Wno-error=type-limits -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=undef -Wno-error=uninitialized -Wlogical-op -Wno-error=maybe-uninitialized -Waggregate-return -Wnested-externs -Wold-style-definition -Wstrict-prototypes -march=native    -o CMakeFiles/cmTryCompileExec2533162744.dir/CheckIncludeFiles.c.o   -c /mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c
/mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c:5:5: 
     error: function declaration isn’t a prototype [-Werror=strict-prototypes]
 int main(){return 0;}
 ^
/mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c: 
     In function ‘main’:
/mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c:5:5: 
     error: old-style function definition [-Werror=old-style-definition]
cc1: all warnings being treated as errors
[...]
Source:
/* */
#include <pthread.h>


int main(){return 0;}
Run Code Online (Sandbox Code Playgroud)

这真的应该没有理由让CMake认为Threads不存在.我该如何解决这个问题?

gcc compilation pthreads cmake include

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

无法连接到OSX上的Docker容器

我是Docker的新手,我似乎无法连接到任何容器.

我安装了Docker Toolbox.现在我正试图让Shipyard工作.我按照Docker Quickstart Terminal中的步骤进行操作.说明说:

部署后,脚本将输出URL以及凭据信息进行连接.

Shipyard安装程序以:

Shipyard available at http://10.0.2.15:8080
Username: [elided] Password: [elided]
Run Code Online (Sandbox Code Playgroud)

但是,我去了http://10.0.2.15:8080我的浏览器,它没有连接.

在另一个Docker Quickstart终端中,我做了一个docker ps查看容器是什么并获取其IP地址,我得到了:

$ docker inspect a4755 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.8",
                    "IPAddress": "172.17.0.8",
Run Code Online (Sandbox Code Playgroud)

我不确定为什么IP不同,但我试图连接到http://172.17.0.8:8080,这也不起作用.http://localhost:8080也失败了.

这也发生在我试图运行docker-gunicorn-nginx时 - 一切都已启动,但我无法连接到机器.

是什么赋予了?

macos docker

10
推荐指数
2
解决办法
9059
查看次数