Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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/7/arduino/2.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代码中的语法正确吗?_Python - Fatal编程技术网

这段python代码中的语法正确吗?

这段python代码中的语法正确吗?,python,Python,我刚开始为大学课程学习python。我们正在使用尼克·蒙福特的《艺术与人文探索性编程》一书。在前几章的其中一章中,他介绍了一个无法执行的程序的代码。因为他把它作为一个解释性的例子,我真的需要它来工作,以便能够通过书中的章节 我已经尝试了Python3和Python2,但是在第1行中不断得到消息“语法不正确” def double([1, 10, 5]): result = [] #here starts the function body for element in sequ

我刚开始为大学课程学习python。我们正在使用尼克·蒙福特的《艺术与人文探索性编程》一书。在前几章的其中一章中,他介绍了一个无法执行的程序的代码。因为他把它作为一个解释性的例子,我真的需要它来工作,以便能够通过书中的章节

我已经尝试了Python3和Python2,但是在第1行中不断得到消息“语法不正确”

def double([1, 10, 5]): 
    result = [] #here starts the function body
    for element in sequence:
        result = result + [element * 2]
    return result  
它应该将括号内输入的数字的值加倍,但似乎在函数名中同时使用括号和括号会导致问题。然而,书中就是这样写的。 作者是否在代码中犯了错误,或者该代码是否可以在较旧版本的python中执行? 非常感谢你的帮助

试试这个:

def double(sequence): 
    result = [] #here starts the function body
    for element in sequence:
            result = result + [element * 2]
    return result
然后执行
double([1,10,5])
调用函数


原因是函数接受参数或变量,而不是值。只有在调用该函数时,才将值传递给它

恐怕您误读了这本书。通过查看,我可以看出作者正确地给出了函数

在(第3章第一页,Double,Double!)中,函数定义为:

def double(sequence):
    result = []
    for element in sequence:
        result = result + [element * 2]
    return result
在上(在标题为3.1的部分中尝试该函数),作者使用名称(
double
)调用该函数,后跟调用表达式(括号和每个参数的值):

这告诉Python执行
double
函数的主体,并将
sequence
设置为
[1,10,5]

您似乎已将这两种语法组合在一起。您用列表本身替换了
def double(..):…
函数定义语法中的
序列
参数名称。这并不是它的工作原理,函数定义具有调用者必须为其提供值的参数,但参数本身不是表达式

如果要替换函数中的
sequence
参数,则可以完全删除该参数,只需在函数体中指定列表:

def double():
    sequence = [1, 10, 5]
    result = []
    for element in sequence:
        result = result + [element * 2]
    return result
此版本的函数接受参数,只有
double()
可以工作。这几乎没有那么有用

另一方面:您正在使用的这本书教授Python2语法,这是该语言的一个修订版,很快就会过时。最后一行是Python2.7,它是

如果你想找到一个更为最新的替代方案,我建议你看看,它以O'Reilly出版的纸质形式提供,或者以PDF或HTML免费在线版本提供。本书教授Python 3,并在世界各地的学院和大学中使用


您不必立即切换,前几章中教授的代码大多是版本不可知的。我认为这本书在第65页介绍了
print
语句,而在Python 3中它是一个函数。不过,我希望它基本上不会出现问题更大的差异。

看起来要么是它们打算用默认值初始化函数,而忘记了命名输入参数,要么是它们混淆了定义函数和调用函数的过程,您需要有参数名。试试这个
def-double(sequence=[1,10,5]):
而不是
def-double([1,10,5]):
#这里开始函数体
不仅是一个无用的注释,而且是最糟糕的:它是错误的。函数体在声明
结果之前启动。很好!实际上我是第一次尝试这个,但当时我正在使用Python3。因此,我看到Python3和Python2之间的差异非常大。不管怎样,这就解决了问题。谢谢你@KilgoreTrout33:根据定义,该函数在Python2和Python3上运行良好。差异并没有那么大,在Python包索引(PyPI)上分布的大量库可以在这两个平台上使用@KilgoreTrout33:我添加了一些关于学习Python 3的建议。。。考虑到这本书,了解这一点非常有用。非常感谢您的帮助和建议!
def double():
    sequence = [1, 10, 5]
    result = []
    for element in sequence:
        result = result + [element * 2]
    return result