将Python代码转换成PHP,但要保持“漂亮、干净和优化”

2024-05-13 21:47:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我的一个朋友告诉我:“看看这个代码,并尝试用PHP来做,简单,清晰。”。

colors = ['red', 'blue', 'green', 'yellow']
print 'Choose', ', '.join(colors[:-1]), 'or', colors[-1]

有可能吗?您有没有任何“紧凑但可读”的Php代码?

(顺便说一下,我在这里问是因为这个问题不适合代码评审,也不适合codegolf)。


Tags: or代码朋友greenblueredphpprint
3条回答

Python以其难以置信的紧凑性而闻名,其他大多数语言都要冗长得多。在

与此代码等效的PHP使用了更多的行/语句(请注意,它使用了5.4中介绍的语法):

$colors = ['red', 'blue', 'green', 'yellow'];
echo 'Choose'
    . implode(', ', array_slice($colors, 0, count($colors)-1))
    . ' or '
    . $colors[count($colors)-1]; 

当然,添加.之前的新行只是为了可读性,而不是必要的

我想说PHP版本总是比python版本差,因为PHP缺少一个合适的slice操作符,而且由于只有一个数组类型,所以您不能使用-1很好地选择最后一个元素,因为这实际上可能是一个有效的键。在

$colors = array('red', 'blue', 'green', 'yellow');
echo 'Choose ' . implode(', ', array_slice($colors, 0, -1)) . ' or ' . end($colors);
function english_list($items, $conj) {
    $tail = $conj . array_pop($items);
    return implode(', ', $items) . $tail;
}

$colors = array('red', 'blue', 'green', 'yellow');
echo "Choose ", english_list($colors, " or "), "\n";

不太简洁,但对于不懂这门语言的人来说却相当易读。甚至可能更多。作为Python用户,我发现自己不确定colors[:-1]是什么意思。(例如,即使我猜它是一片……它包括什么?)或者甚至是colors[-1],因为这在大多数语言中都是无效的,并且没有像Python专家可能认为的那样在其他大多数语言中实现。在

另一方面,不知道PHP(但确实知道C、C++、java、JS、Perl、Ruby……甚至Python)的人仍然会发现这是可读的。当然,他们可能不知道array_pop和{}做什么,但他们可以很容易地找到答案。尝试用google搜索它们中的任何一个;PHP手册专门针对各自的函数,同样如此!第一个结果就是。现在试试:。:)(好吧,说句公道话:“python数组冒号运算符”。)第一个结果包含了答案,但是你必须从你做过或不想知道数组的几乎所有事情中找出答案。在

相关问题 更多 >