注意:我已经尝试从https://docs.python.org/3/和其他堆栈溢出问题中找到解决方案,但我还没有找到它。
我要找的很简单。在使用这样的代码时:
import turtle
s = turtle.Screen()
def u():
t.forward(50)
s.onkey(u(), "Up")
s.listen()
它只是运行代码u
所以首先:为什么它不等到我按下" Up"?第二,我怎样才能做到这一点?
答案 0 :(得分:0)
您需要在onkey
回调函数之外的listen
和u
调用 。
像这样:
import turtle
def u():
t.forward(50)
s = turtle.Screen()
t = turtle.Turtle()
s.onkey(u, "Up")
s.listen()
turtle.done()
请注意,在s.onkey(u, "Up")
我只有u
而非 u()
。前者将函数本身传递给.onkey
,因此它知道在"Up"
键事件发生时要调用的函数。后者只是将调用u
的结果(None
,因为u
没有return
语句)传递给.onkey
。
此外,您的代码省略了turtle.done()
来电。这告诉乌龟进入事件循环,所以它会监听事件并回应它们。没有它,脚本会打开一个乌龟窗口,然后立即关闭它。
顺便说一句,您发布的代码有IndentationError
;在Python中,正确的缩进至关重要。
答案 1 :(得分:-1)
在括号后面调用该函数。只需将它们传递给函数本身而不是它返回的内容:
template <class T>
class LinkedList
{
private:
struct ListNode
{
T data ;
struct ListNode * next;
};
ListNode *head;
public:
LinkedList() { head = nullptr; }
~LinkedList();
// Linked list operations
void insertNode(T);
bool deleteNode(T);
void displayList() const;
};
// insertNode: add a node in list order
template <class T>
void LinkedList<T>::insertNode(T newValue)
{
ListNode *newNode;
ListNode *pCur;
ListNode *pPre = NULL;
newNode = new ListNode;
newNode->data = newValue;
newNode->next = nullptr;
if (head == nullptr)
{
head = newNode;
}
else
{
pCur = head;
pPre = nullptr;
while (pCur != nullptr && pCur->data < newValue)
{
pPre = pCur;
pCur = pCur->next;
}
if (pPre == nullptr)
{
head = newNode;
newNode->next = pCur;
}
else
{
pPre->next = newNode;
newNode->next = pCur;
}
}
}
在Python中,函数就像其他所有东西一样。您不需要使用括号来使用它们。您可以执行import turtle
s = turtle.Screen()
def u():
t.forward(50)
s.onkey(u, "Up")
s.listen()
,然后就可以使用v = u
。如果您要说v()
,则您将无法再使用u = 4
,因为现在u()
指的是其他内容。