Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么函数在Python中是可索引的,而在PHP中是不可索引的?_Php_Python_Programming Languages - Fatal编程技术网

为什么函数在Python中是可索引的,而在PHP中是不可索引的?

为什么函数在Python中是可索引的,而在PHP中是不可索引的?,php,python,programming-languages,Php,Python,Programming Languages,我的意思不是关于Python和PHP的问题,而是关于一般的语言。我使用Python和PHP作为示例,因为我了解它们 在Python中,我们可以执行mytoken=mystring.split(mydelimiter)[1],访问str.split返回的列表,而无需将其分配给列表。 在PHP中,我们必须在访问数组之前将其放入内存,如$mytokenarray=explode($mydelimiter,$mystring)$mytoken=$mytokenarray[1]。据我所知,不可能像Pyth

我的意思不是关于Python和PHP的问题,而是关于一般的语言。我使用Python和PHP作为示例,因为我了解它们

在Python中,我们可以执行
mytoken=mystring.split(mydelimiter)[1]
,访问
str.split
返回的列表,而无需将其分配给列表。 在PHP中,我们必须在访问数组之前将其放入内存,如
$mytokenarray=explode($mydelimiter,$mystring)$mytoken=$mytokenarray[1]。据我所知,不可能像Python那样在一条语句中实现这一点


这种差异背后的原因是什么?

这是语言作者选择的设计决策。一般来说(当然,情况并非总是如此),一种语言的语法越好,它的速度就越慢。举个例子:Ruby。

这是语言作者选择的设计决策。一般来说(当然,情况并非总是如此),一种语言的语法越好,它的速度就越慢。举个例子:Ruby。

如果您试图在php中实现这一点

$mytokenarray = explode($mydelimiter, $mystring)[1];
请注意您得到的错误:
Parse error:syntax error,意外的“[”

这意味着php在试图解析代码时会感到不安,而不是在试图执行代码时。我怀疑这意味着php的语法(我听说它是动态生成的,尽管我真的不知道)说您不能['在
语句
表达式
后,或者在他们叫它什么的后面。相反,你可能只能在变量后面放'['

这是Python的语法。它包含规则
trailer:“(“[arglist]”)、“|”['subscriptlist']]”NAME
,从那里你可以看到
trailer
atom
的一部分,atom也可以包含
[
。你开始意识到它非常复杂


废话废话废话,长话短说,学习编译器,或者更好,为一种玩具语言编写一个编译器。这样,你就会对语言怪癖有很多洞察。

如果你尝试在php中这样做

$mytokenarray = explode($mydelimiter, $mystring)[1];
请注意您得到的错误:
Parse error:syntax error,意外的“[”

这意味着php在试图解析代码时会感到不安,而不是在试图执行代码时。我怀疑这意味着php的语法(我听说它是动态生成的,尽管我真的不知道)说您不能['在
语句
表达式
后,或者在他们叫它什么的后面。相反,你可能只能在变量后面放'['

这是Python的语法。它包含规则
trailer:“(“[arglist]”)、“|”['subscriptlist']]”NAME
,从那里你可以看到
trailer
atom
的一部分,atom也可以包含
[
。你开始意识到它非常复杂


废话废话废话,长话短说,了解编译器,或者更好,为一种玩具语言编写一个。然后你将对语言怪癖有大量的了解。

从5.4版开始,PHP现在就可以使用此功能。

从5.4版开始,PHP现在就可以使用此功能。

可能重复的是,基本上是重复的这个问题。函数在我听说过的任何语言中都是不可索引的。你是说“表达式”。这个问题中有很多错误的假设。这个例子不是索引函数。它是索引函数的返回值。在PHP中,将变量赋给值不会“在访问数组之前将数组放入内存”。数组已经在内存中。可能重复是的,它基本上是该问题的重复。函数在我听说过的任何语言中都是不可索引的。你是说“表达式”。这个问题中有很多错误的假设。这个示例不是索引函数。它是索引函数的返回值。在PHP中,将变量分配给值不会“在访问数组之前将其放入内存”。数组已经在内存中。或者,更具争议的是:PHP的语法非常奇怪/充满特殊情况。在理智的语言中,引用变量只是另一个表达式…或者,更具争议的是:PHP的语法非常奇怪/充满特殊情况。在理智的语言中,引用变量只是另一个表达式…这使得对任何编译语言来说,语法在运行时都会消失。对于解释语言来说,以Ruby为例。源文件在运行之前会被加载和解析,因此即使解析速度慢得多(我不相信这一点),每个文件也只会出现一次问题。而PHP并没有让事情变得“更好”,只是不太规则。我想知道是否更确切地说,语法越好,编译器就越难编写。好是一件复杂的事情。有些不会影响编译器或速度,有些会影响编译器的复杂性(影响解释语言的速度)还有一些会影响运行时的性能。例如:我认为在行尾不需要分号不会影响复杂性和性能,因为您只是使用
\n
而不是
。在静态类型语言中不需要类型声明会增加编译器的复杂性,因为它必须推断类型。DyNamaly类型的语言在运行时较慢,因为必须在运行时查找方法调用。这毫无意义。当然,对于任何编译语言,语法在运行时都会消失。对于解释语言,请使用Ruby。源文件在运行之前会被加载和解析,因此即使解析速度慢得多(我不相信这一点),每个文件只会出现一次问题。这里的PHP并没有让事情变得“更好”,只是更不规则。我想知道是否更确切地说,语法越好,编译器编写起来就越困难。Nicenes