我尝试了以下方法:
int sockfd = socket(...);
listen(sockfd, 10);
accept(sockfd, ...);
Run Code Online (Sandbox Code Playgroud)
没有任何调用失败,程序刚刚开始阻塞,好像我调用了bind().在这种情况下会发生什么?是否只是不可能接收连接,因为它没有本地地址或端口?或者它是否隐式分配了本地地址和端口,现在它正在监听那些?如果是这样,我该如何检索它们是什么?
示例:在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)
这花费的时间少得多.
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是构造函数?他们各自将各自x和y字段设置为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调用构造函数?
我可以尝试所有这些示例,但我无法确定何时运行默认构造函数.考虑这一点的一般方法是什么,以便我知道未来情况会发生什么?
如果我想要一个初始化为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)
有没有人找到一种优雅的方式来处理这个"问题"?
当你想要一个函数的默认参数,但是一个依赖于另一个参数/另一个变量的函数时,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中的等价物是什么?
有时在我的代码中,我有一个函数可以用两种方式之一进行参数.就像是:
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, …
在给定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生成我想要运行它的数组的图像模板匹配算法要长三倍,我认为这很愚蠢.
使用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不存在.我该如何解决这个问题?
我是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时 - 一切都已启动,但我无法连接到机器.
是什么赋予了?
python ×4
coding-style ×2
java ×2
cmake ×1
compilation ×1
default ×1
docker ×1
gcc ×1
generics ×1
idioms ×1
immutability ×1
include ×1
macos ×1
networking ×1
numpy ×1
oop ×1
optimization ×1
performance ×1
pthreads ×1
ruby ×1
set ×1
tcp ×1