我刚刚开始为大学课程学习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中执行? 非常感谢您的帮助!
答案 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中则是一个函数。我希望它在大多数情况下不会遇到更多问题。