class Node(object):
def __init__(self, data=None, next_=None):
self.next_ = next_
self.data = data
class LinkList(object):
def __init__(self):
self.head = None
self.tear = None
def insert(self, node):
if self.head is None:
# print("is None")
self.head = node
self.tear = node
self.head.next_ = self.tear
else:
# print("tear")
self.tear.next_ = node
self.tear = node
def display(self):
# global node
node = self.head
if node is not None:
print(node.data)
node = node.next_
为了便于理解我把整段代码都贴上来了.
这是用Python实现链表的插入功能
问题出在LinkList类中的display()函数
不把变量node设置为global的话,if语句下面node = node.next_这句 ,被赋值的node是一个新的变量(PyCharm提示Shadows name 'node' from outer scope和Local variable 'node' value is not used)
如果把if语句改为while循环,if和display函数下面的node就都为同一个变量
请问问题出在哪里 ?
Python版本是3.5
Portée des variables de Python :
Le module correspond au global,
La couche la plus interne est locale,
La couche externe est non locale
Ordre de recherche variable : Portée interne->Couche externe-> ; Global->builtin
Seules class, def et lamda changeront la portée
Lors de la lecture d'une variable, si local n'existe pas, recherchez nonlocal, puis global
Lors de l'écriture d'une variable, si nonlocal/global n'est pas spécifié, une nouvelle variable est définie dans la portée locale
Ce qui suit l'exemple est extrait du tutoriel python chapitre 9
J'ai exécuté votre code dans l'interpréteur et PyCharm et je n'ai pas vu le problème que vous avez mentionné. Il est préférable de publier également le code exécuté. Je ne vois aucun problème rien qu'en les regardant.