小编hel*_*hod的帖子

为什么我不能在打开的文件上调用read()两次?

对于我正在进行的练习,我正在尝试使用该read()方法两次读取给定文件的内容.奇怪的是,当我第二次调用它时,它似乎没有将文件内容作为字符串返回?

这是代码

f = f.open()

# get the year
match = re.search(r'Popularity in (\d+)', f.read())

if match:
  print match.group(1)

# get all the names
matches = re.findall(r'<td>(\d+)</td><td>(\w+)</td><td>(\w+)</td>', f.read())

if matches:
  # matches is always None
Run Code Online (Sandbox Code Playgroud)

当然我知道这不是最有效或最好的方式,这不是重点.关键是,为什么我不能read()两次打电话?我是否必须重置文件句柄?或者关闭/重新打开文件以执行此操作?

python io

86
推荐指数
4
解决办法
6万
查看次数

在JavaScript中创建Set的方法?

在Eloquent JavaScript第4章中,通过创建对象并将值存储为属性名称,将任意值(例如,true)指定为属性值来创建一组值.要检查该值是否已包含在集合中,请使用in运算符:

var set = {};

if (!'Tom' in set) { 
  set.Tom = true;
}
Run Code Online (Sandbox Code Playgroud)

这是惯用的JavaScript吗?不会使用阵列更好吗?

var set = [];

if (!'Tom' in set) { 
  set.push = 'Tom';
}
Run Code Online (Sandbox Code Playgroud)

javascript set

76
推荐指数
6
解决办法
8万
查看次数

如何在不使用全局变量的情况下在bash中返回数组?

我有一个创建数组的函数,我想将数组返回给调用者:

create_array() {
  local my_list=("a", "b", "c")
  echo "${my_list[@]}"
}

my_algorithm() {
  local result=$(create_array)
}
Run Code Online (Sandbox Code Playgroud)

有了这个,我只得到一个扩展的字符串.如何在不使用全局的情况下"返回"my_list?

arrays bash global-variables parameter-passing

68
推荐指数
6
解决办法
7万
查看次数

C++的依赖注入框架

是否有与Google Guice相媲美的DI框架?谷歌使用什么?

c++ dependency-injection

66
推荐指数
4
解决办法
3万
查看次数

迭代按键排序的字典中的键/值对

我有以下代码,它只打印一个dict中的键/值对(这些对按键排序):

for word, count in sorted(count_words(filename).items()):
    print word, count
Run Code Online (Sandbox Code Playgroud)

但是,调用iteritems()而不是items()产生相同的输出

for word, count in sorted(count_words(filename).iteritems()):
    print word, count
Run Code Online (Sandbox Code Playgroud)

现在,在这种情况下我应该选择哪一个?我咨询了Python教程,但它并没有真正回答我的问题.

python

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

我是否更喜欢常量而不是定义?

在C中,我是否更喜欢常量而不是定义?我最近阅读了很多代码,所有的例子都大量使用了定义.

c const c-preprocessor

46
推荐指数
5
解决办法
4342
查看次数

如何退出子进程 - _exit()与exit

请考虑以下代码段:

pid_t cpid = fork();

if (cpid == -1) {
    perror("fork");
    exit(EXIT_FAILURE);
}

if (cpid == 0) { // in child
    execvp(argv[1], argv + 1);
    perror("execvp");
    _exit(EXIT_FAILURE);
}

// in parent
Run Code Online (Sandbox Code Playgroud)

如果execvp返回,我该如何退出子进程?我应该使用exit()或_exit()吗?

c fork process

44
推荐指数
2
解决办法
5万
查看次数

嘲笑一个类与嘲弄它的界面

对于单元测试,我需要模拟几个依赖项.其中一个依赖项是实现接口的类:

public class DataAccessImpl implements DataAccess {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我需要设置这个类的模拟对象,当提供一些指定的参数时返回一些指定的值.

现在,我不确定的是,模拟界面或类是否更好,即

DataAccess client = mock(DataAccess.class);
Run Code Online (Sandbox Code Playgroud)

DataAccess client = mock(DataAccessImpl.class);
Run Code Online (Sandbox Code Playgroud)

它在测试方面有什么不同吗?什么是首选方法?

java junit unit-testing mocking

43
推荐指数
4
解决办法
5万
查看次数

Guice Beginner - 如何绑定具体类?

我有这门课:

public class House {
    private final Door door;
    private final Window window;
    private final Roof roof;

    @Inject
    public House(Door door, Window window, Roof roof) {
        this.door = door;
        this.window = window;
        this.roof = roof;
    }
}
Run Code Online (Sandbox Code Playgroud)

其中Door,WindowRoof是具体的类.现在,如果我想为这个场景实现一个模块,我会这样做:

public class HouseModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Door.class).to(Door.class);
        bind(Window.class).to(Window.class);
        bind(Roof.class).to(Roof.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我想知道这是否是绑定具体类的正确方法,或者是否有更简单的方法.我觉得有一种更简单的方法.

编辑

刚试了这个,它似乎不起作用:

1) Binding points to itself.
  at de.tarent.guice.ex._1.HouseModule.configure(HouseModule.java:10)
Run Code Online (Sandbox Code Playgroud)

编辑2

似乎根本不需要绑定:

Injector injector = Guice.createInjector();
House house = injector.getInstance(House.class); …
Run Code Online (Sandbox Code Playgroud)

java guice

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

确定Set S中是否存在两个元素,其和是x正确的解?

摘自算法简介

描述一个Θ(n lg n)时间算法,给定一组n个整数和另一个整数x,确定S中是否存在两个元素,其和是x.

到目前为止,这是我用Java实现的最佳解决方案:

    public static boolean test(int[] a, int val) {
    mergeSort(a);

    for (int i = 0; i < a.length - 1; ++i) {
        int diff = (val >= a[i]) ? val - a[i] : a[i] - val;

        if (Arrays.binarySearch(a, i, a.length, diff) >= 0) {
            return true;
        }
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

现在我的第一个问题是:这是一个正确的解决方案吗?根据我的理解,mergeSort应该在O(n lg n)中执行排序,循环应该取O(n lg n)(n用于迭代乘以O(lg n)进行二进制搜索,得到O(2 l lg) n),所以它应该是正确的.

我的第二个问题是:有更好的解决方案吗?排序阵列必不可少?

java arrays algorithm

33
推荐指数
4
解决办法
3万
查看次数