为什么当我在 python 中将参数传递给函数时会出现 NameError?

Why am I getting a NameError when I pass an argument to a function in python?

提问人:J. Hawker 提问时间:5/9/2023 最后编辑:Axe319J. Hawker 更新时间:5/9/2023 访问量:85

问:

这是我的 python 代码:

import turtle

def square(t):
    t = turtle.Turtle()
    for i in range(4):
        t.fd(100)
        t.lt(90)

square(bob)

当我运行代码时,我收到错误:

Traceback (most recent call last):
  File "/home/j/python_projects/tp_ex_4.1.py", line 10, in <module>
    square(bob)
NameError: name 'bob' is not defined

我正在从“Think Python How to Think like a computer scientist”一书中学习 python 编程,我不明白为什么我的代码无法运行。我正在尝试编写一个名为的函数,该函数采用一个名为 的参数,该参数是 .我使用 for 循环与一起画一个正方形。然后我编写一个函数调用,作为参数传递给 square。不应该在我的函数中替换吗?从而使 ?我错过了什么?squaretturtlebobbobtbob = turtle.Turtle()

python 函数 变量参数 传递 nameerror

评论

1赞 B Remmelzwaal 5/9/2023
您可以作为参数传递,但以前从未定义过。但是,查看您的代码,您不需要传递参数,您可以在本地定义为 turtle,因此无需传递任何内容。bobbobt
0赞 Ghassen Sultana 5/9/2023
bob 是一个变量,“bob”是一个字符串,所以将 bob 改为 “bob” square(“bob”)
0赞 Axe319 5/9/2023
正在进入函数。因此,您实际上是在将 的值分配给 。如果需要将 back out 的值传递到全局范围,请查看该语句。bobbobttreturn
0赞 Psytho 5/9/2023
什么?你想做什么?如果你在第一行重新定义它,为什么你首先在你的函数中有一个?bobt
1赞 Axe319 5/9/2023
这个问题这个问题也是一个有用的读物。您期望的是 Python 不支持的引用传递

答:

2赞 Lior v 5/9/2023 #1

bob未定义。在此函数中,您甚至不需要参数,因为参数用于将值从外部上下文传递到函数上下文,而在这里,您可以在函数本身中定义。更改为tdef square(t):def square():square(bob)square()

-2赞 Gyula Sámuel Karli 5/9/2023 #2

很明显:鲍勃没有被定义。它看起来像一个没有获得任何值的变量。

您可能想在最后一行写下这样的内容:

square('bob')

这样,“bob”就是字面意思,它就会起作用。

评论

3赞 Psytho 5/9/2023
代码可以正常工作,但“bob”在此代码中没有意义
0赞 B Remmelzwaal 5/9/2023
我认为仔细检查一下,您会发现您不能将字符串作为参数传递给该函数。
1赞 juanpa.arrivillaga 5/9/2023
@J.Hawker,因为没有定义变量 bob。这正是 a 正在做的事情。这与 没有什么不同,你会得到一个未定义的抱怨(当然,除非你实际上已经在某个范围内定义了它)NameErrorprint(banana)NameErrorbanana
1赞 juanpa.arrivillaga 5/9/2023
“这样一来,'bob'就是一个字面意思,它就会起作用。” 它只是在它不会引发错误的意义上“工作”,但这不会做任何有用的事情
1赞 J. Hawker 5/9/2023
我目前所讲的章节是关于使用 turtle 模块、定义函数和使用 for 循环的。赋值的目的是将参数传递到函数中。这就是为什么我使用“bob”作为参数。不幸的是,我不明白为什么我的初始代码失败了,因为我试图使用一个没有被分配的变量。感谢您的帮助。