对于我正在进行的练习,我正在尝试使用该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()两次打电话?我是否必须重置文件句柄?或者关闭/重新打开文件以执行此操作?
在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) 我有一个创建数组的函数,我想将数组返回给调用者:
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?
我有以下代码,它只打印一个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教程,但它并没有真正回答我的问题.
在C中,我是否更喜欢常量而不是定义?我最近阅读了很多代码,所有的例子都大量使用了定义.
请考虑以下代码段:
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()吗?
对于单元测试,我需要模拟几个依赖项.其中一个依赖项是实现接口的类:
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)
它在测试方面有什么不同吗?什么是首选方法?
我有这门课:
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,Window和Roof是具体的类.现在,如果我想为这个场景实现一个模块,我会这样做:
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) 摘自算法简介
描述一个Θ(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),所以它应该是正确的.
我的第二个问题是:有更好的解决方案吗?排序阵列必不可少?