Преобразование кода Python в PHP
Есть ли программный конвертер, который может автоматически преобразовать этот код Python в PHP?
#!/usr/bin/python
import math
def calcNumEntropyBits(s):
if len(s) <= 0: return 0.0
symCount = {}
for c in s:
if c not in symCount: symCount[c] = 1
else: symCount[c] += 1
entropy = 0.0
for c,n in symCount.iteritems():
prob = n / float(len(s))
entropy += prob * (math.log(prob)/math.log(2))
if entropy >= 0.0: return 0.0
else: return -(entropy*len(s))
def testEntropy(s):
print "Bits of entropy in '%s' is %.2f" % (s, calcNumEntropyBits(s))
testEntropy('hello world')
testEntropy('bubba dubba')
testEntropy('aaaaaaaaaaa')
testEntropy('aaaaabaaaaa')
testEntropy('abcdefghijk')
Ответы
Ответ 1
Я не знаю ни одного конвертера Python-to-PHP в дикой природе, но это должно быть тривиальной задачей для порта, и сходства довольно легко обнаружить:
function calcNumEntropyBits($s) {
if (strlen($s) <= 0) return 0.0;
$symCount = array();
foreach (str_split($s) as $c) {
if (!in_array($c,$symCount)) $symCount[$c] = 1;
else $symCount[$c] ++;
}
$entropy = 0.0;
foreach ($symCount as $c=>$n) {
$prob = $n / (float)strlen($s);
$entropy += $prob * log($prob)/log(2);
}
if ($entropy >= 0.0) return 0.0;
else return -($entropy*strlen($s));
}
function testEntropy($s):
printf("Bits of entropy in '%s' is %.2f",$s,calcNumEntropyBits($s));
testEntropy('hello world');
testEntropy('bubba dubba');
testEntropy('aaaaaaaaaaa');
testEntropy('aaaaabaaaaa');
testEntropy('abcdefghijk');
Последние несколько строк первой функции также могли быть записаны как стандартное трехмерное выражение PHP:
return ($entropy >= 0.0)? 0.0: -($entropy*strlen($s));
Ответ 2
Я делаю около 1/2 пути, делая PHP-интерпретатор на Python, и я могу сказать вам, что есть буквально десятки основных дел кросс, которые разыгрывают тысячи возможностей, которые сделали бы почти невозможным перенос Python на PHP. Python имеет гораздо более надежную грамматику, а затем PHP, в то время как дальше в этом языке, Python stdlib, вероятно, является одним из самых продвинутых по сравнению с любым другим языком в нем.
Моя рекомендация - повторить ваш вопрос еще на один шаг, почему вам нужен набор логики на основе Python на PHP. Альтернативы попытке переноса/перевода вашего кода могут включать подпроцессы с PHP на Python, используя Gearman для работы Python в бэкэнд, в то время как PHP обрабатывает логику просмотра, или гораздо более привлекательным решением будет внедрение служебной шины или очереди сообщений между приложения PHP и Python.
PS. Извиняюсь за любые проблемы с читабельностью, заканчивая двухдневный спринт.
Ответ 3
Я создал конвертер python-to-php под названием py2php. Он может автоматически переводить основную логику, а затем вам нужно будет настроить библиотечные вызовы и т.д. Еще экспериментальный.
Вот автогенерированный PHP из python, предоставленный OP.
<?php
require_once('py2phplib.php');
require_once( 'math.php');
function calcNumEntropyBits($s) {
if ((count($s) <= 0)) {
return 0.0;
}
$symCount = array();
foreach( $s as $c ) {
if (!$symCount.__contains__($c)) {
$symCount[$c] = 1;
}
else {
$symCount[$c] += 1;
}
}
$entropy = 0.0;
foreach( $symCount->iteritems() as $temp_c ) {
$prob = ($n / float(count($s)));
$entropy += ($prob * (math::log($prob) / math::log(2)));
}
if (($entropy >= 0.0)) {
return 0.0;
}
else {
return -($entropy * count($s));
}
}
function testEntropy($s) {
pyjslib_printFunc(sprintf('Bits of entropy in \'%s\' is %.2f', new pyjslib_Tuple([$s, calcNumEntropyBits($s)])));
}
testEntropy('hello world');
testEntropy('bubba dubba');
testEntropy('aaaaaaaaaaa');
testEntropy('aaaaabaaaaa');
testEntropy('abcdefghijk');
Он не будет работать корректно из-за импорта математики и __contains__, но это будет достаточно легко исправить вручную.
Ответ 4
Нет такого инструмента, вам придется сам портировать код
Ответ 5
Я задавался вопросом сам этот же вопрос, и я нашел этот PyToPhp.py на сайте GitHubGist. Это просто и кажется отправной точкой для начала.
Я собираюсь взглянуть на это!