我刚开始为大学课程学习蟒蛇。当时正在使用尼克·蒙福尔的书“艺术与人文的探索性编程”。在第一章中,他给出了不会执行的程序的代码。由于他正在使用它作为一个解释的例子,我真的需要它工作,以便能够通过这一章在书中。
我已经尝试过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中是可执行的呢?非常感谢你的帮助!
发布于 2019-09-12 18:05:15
恐怕你误读了这本书。查看谷歌图书预览本章,我可以看到作者正确地给出了函数。
在第45页 (第3章的第一页,Double,Double!)上,函数被定义为:
def double(sequence):
result = []
for element in sequence:
result = result + [element * 2]
return result
在第48页上(在标题3.1中,作者调用函数,使用名称(double
),后面跟着一个调用表达式(括号和每个参数的值):
double([1, 10, 5])
这告诉Python执行double
函数的主体,并将sequence
设置为[1, 10, 5]
。
您似乎已经将这两部分语法结合起来了。您用列表本身替换了sequence
函数定义语法中的def double(....): ...
参数名。这并不完全是它的工作方式,函数定义具有调用方必须提供值的参数,但参数本身并不是表达式。
如果要替换函数中的sequence
参数,则可以完全删除该参数,只需在函数体内分配列表:
def double():
sequence = [1, 10, 5]
result = []
for element in sequence:
result = result + [element * 2]
return result
该函数的这个版本使用参数,只有double()
才能工作。这一点也没那么有用!
顺便提一句:你正在使用的这本书教的是Python 2语法,这是对语言的一种修订,很快就会过时。行的末尾是Python2.7,它是几个月后就到生命的尽头。
如果您想要找到更最新的替代方案,我建议您查看想想Python,第二版,它是由O‘’Reilly发表的纸质形式,或作为一个PDF或HTML版本在线免费。这本书教Python 3,并在世界各地的大学和学院使用。
您不必立即切换,前几章中教授的代码大多是版本不可知论的。我认为这本书在第65页引入了print
语句,它在Python3中是一个函数。然而,我希望它大部分远离那些更有问题的差异。
发布于 2019-09-12 17:58:24
试试这个:
def double(sequence):
result = [] #here starts the function body
for element in sequence:
result = result + [element * 2]
return result
然后执行double([1, 10, 5])
调用函数。
原因是该函数接受参数或变量,而不是接受值。只有在调用函数时,才会将值传递给它。
https://stackoverflow.com/questions/57912158
复制相似问题