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

时间:2019-09-12 17:54:52

标签: python

我刚刚开始为大学课程学习python。正在使用Nick Montfort撰写的《艺术与人文科学探索性编程》一书。在前几章中,他介绍了不会执行的程序的代码。由于他将其用作解释性示例,因此我确实需要它能够工作以能够超越本书中的章节。

我已经尝试过使用python 3和python 2,但是在第1行中始终收到消息“语法不正确”。

def double([1, 10, 5]): 
    result = [] #here starts the function body
    for element in sequence:
        result = result + [element * 2]
    return result  

应该将括号内输入数字的值加倍,但是似乎在函数名称中同时使用括号和括号会导致问题。但是,这就是书中写的方式。 作者是否在代码中犯了错误,或者该代码是否可以在旧版本的python中执行? 非常感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

尝试一下:

def double(sequence): 
    result = [] #here starts the function body
    for element in sequence:
            result = result + [element * 2]
    return result

然后执行double([1, 10, 5])来调用该函数。

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

答案 1 :(得分:2)

恐怕你在看这本书。查看Google books preview of the chapter,我可以看到作者正确地为您提供了该功能。

page 45(第3章的第一页, Double,Double!)上,该函数定义为:

def double(sequence):
    result = []
    for element in sequence:
        result = result + [element * 2]
    return result

并在page 48(在标题为 3.1试用该功能的小节中)上,作者通过使用名称{{{1 }})后紧跟一个调用表达式(括号和每个参数的值):

double

这告诉Python在double([1, 10, 5]) 设置为double的情况下执行sequence函数的主体。

您似乎已经结合了两种语法。您用列表本身替换了[1, 10, 5]函数定义语法中的sequence参数名。这不是它的工作方式,函数定义具有调用者必须为其提供值的 parameters ,但是参数本身不是表达式。

如果要替换函数中的def double(....): ...参数,则可以完全删除该参数,只需在函数体内分配列表即可。

sequence

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

在旁注:您正在使用的书讲授Python 2语法,这是该语言的修订版,很快就会过时。该行的结尾是Python 2.7,即reaches it's end of life in a few months time

如果您想找到最新的替代方法,我建议您查看Think Python, 2nd edition,它可以由O'Reilly以纸质形式提供,也可以在线免费获得PDF或HTML版本。这本书讲授Python 3,并在世界各地的大学中使用。

您不必立即切换,在前几章中讲授的代码大多与版本无关。我认为这本书在第65页上介绍了double()语句,而在Python 3中则是一个函数。我希望它在大多数情况下不会遇到更多问题。