我已经看到这个马尔可夫链乱码检测器是为了回答Stackoverflow上的另一个问题而编写的,我想将其转换为PHP,我不是在寻找人为我做这件事的人,但我对我不了解的Python代码部分感到困惑。我看过python文档,但它让我更加困惑。
-
什么是 PHP 等价物的收益率?
def ngram(n, l): """ Return all n grams from l after normalizing """ filtered = normalize(l) for start in range(0, len(filtered) - n + 1): yield ''.join(filtered[start:start + n])
-
xrange到底是什么?有一个PECL扩展,但是我更喜欢纯PHP实现?这可能吗?
counts = [[10 for i in xrange(k)] for i in xrange(k)] for i, row in enumerate(counts): s = float(sum(row)) for j in xrange(len(row)): row[j] = math.log(row[j] / s)
-
断言有什么作用?这相当于抛出异常吗?
assert min(good_probs) > max(bad_probs)
-
Python Pickle,本质上是序列化吗?
pickle.dump({'mat': counts, 'thresh': thresh}, open('gib_model.pki', 'wb'))
感谢您的任何帮助。
编辑:错别字。
1. 什么是 PHP 等价物的收益?
在 PHP 中没有等同于yield
。 yield
用于生成器函数 - 返回结果但保留其状态的特殊函数类。
例如:
def simple_generator(start=0, end=100):
while start < end:
start += 1
yield start
gen = simple_generator()
gen() # 1
gen() # 2
gen() # 3
你可以在PHP中做类似的事情,如下所示:
class simple_generator {
private $start;
private $end;
function __construct($start=0, $end=100) {
$this->start = $start;
$this->end = $end;
}
function __call() {
if($this->start < $this->end) {
$this->start++;
return $start;
}
}
}
gen = simple_generator();
gen(); // 1
gen(); // 2
2. 究竟什么是xrange?
xrange
的行为与range
类似,但使用生成器函数。这是处理非常大的列表或内存紧张时的性能调整。
3. 断言有什么作用?它相当于抛掷和异常吗?
是的。当心 - 它与PHP的assert
不同 - 这是攻击软件的一个非常有趣的载体。
4. 蟒蛇泡菜,本质上是序列化吗?
是的。
-
xrange 返回一个迭代器。这与返回列表的范围不同。两者的行为方式大多相同,因此只需像使用范围一样使用它。
-
是的
-
是的