将 Python 代码转换为 PHP

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4116596/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 14:20:15  来源:igfitidea点击:

Converting Python Code to PHP

phppythoncode-translationtranspiler

提问by Kirk Ouimet

Is there a software converter out there that can automatically convert this python code to 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')

采纳答案by bcosca

I'm not aware of any Python-to-PHP converter in the wild, but it should be a trivial task to port and the similarities are quite easy to spot:

我不知道有任何 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');

The last few lines in the first function could have also been written as a standard PHP ternary expression:

第一个函数的最后几行也可以写成标准的 PHP 三元表达式:

return ($entropy >= 0.0)? 0.0: -($entropy*strlen($s));

回答by John La Rooy

No such tool exists, you'll have to port the code yourself

不存在这样的工具,您必须自己移植代码

回答by David

I am about 1/2 way done making a PHP interpreter in Python and I can tell you flat out that there are literally dozens of major edge cases that play out to thousands of possibilities that would make it almost impossible to port Python to PHP. Python has a much more robust grammar then PHP while further foward in the language, Python's stdlib is probably one of the most advanced in comparison to any other language in it's class.

我已经完成了在 Python 中制作 PHP 解释器的大约 1/2 的过程,我可以明确地告诉你,实际上有几十种主要的边缘情况会产生数千种可能性,这使得将 Python 移植到 PHP 几乎是不可能的。Python 的语法比 PHP 强得多,而且在语言方面更先进,与同类中的任何其他语言相比,Python 的 stdlib 可能是最先进的之一。

My recommendation is to take your question one step further back, to why do you need a set of Python based logic in PHP. Alternatives to attempting to port/translate your code could include subprocessing from PHP to Python, using Gearman to have Python do work in the backend while PHP handles view logic, or a much more involved solution would be to implement a service bus or message queue between a PHP application and Python services.

我的建议是将您的问题更进一步,为什么您需要在 PHP 中使用一组基于 Python 的逻辑。尝试移植/翻译代码的替代方法可能包括从 PHP 到 Python 的子处理,使用 Gearman 让 Python 在后端工作而 PHP 处理视图逻辑,或者更复杂的解决方案是在两者之间实现服务总线或消息队列PHP 应用程序和 Python 服务。

PS. Apologies for any readability issues, finishing a 2 day sprint just now.

附注。对任何可读性问题表示歉意,刚刚完成了 2 天的冲刺。

回答by Raúl Ota?o

I wondered myself that same question, and I found this PyToPhp.pyfile in the GitHubGist site. It is simple, and seem an start point for the begining.

我也想知道同样的问题,我在 GitHubGist 站点中找到了这个PyToPhp.py文件。这很简单,似乎是开始的起点。

I'm going to take a look to it!!!

我要去看看!!!

回答by danda

I created a python-to-php converter called py2php. It can auto-translate the basic logic and then you will need to tweak library calls, etc. Still experimental.

我创建了一个名为py2php的 python-to-php 转换器。它可以自动翻译基本逻辑,然后你需要调整库调用等。仍然是实验性的。

Here is auto-generated PHP from the python provided by the OP.

这是从 OP 提供的 python 自动生成的 PHP。

<?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');

It would not run correctly due to the math import and __contains__, but those would be easy enough to fix by hand.

由于数学导入和 __contains__,它不会正确运行,但这些很容易手动修复。

回答by bunkus

I changed the library py2php from https://github.com/dan-da/py2phpand forked it into a new repository at https://github.com/bunkahle/py2phpYou now can also use the python math library which is translated to PHP code. Still you have to do adaptations to your code in order to get it to work.

我从https://github.com/dan-da/py2php更改了库 py2php并将其分叉到位于https://github.com/bunkahle/py2php的新存储库 您现在还可以使用已翻译的 python 数学库到 PHP 代码。您仍然必须对代码进行调整才能使其正常工作。