我在函数中定义了一个变量,我想在外部函数中定义的内部函数中使用这个变量。但是,有一个错误:在赋值之前引用此变量。我不知道为什么。
class Solution(object):
def findItinerary(self, tickets):
"""
:type tickets: List[List[str]]
:rtype: List[str]
"""
length = len(tickets)
visit = [1 for i in range(length)]
tmp = []
result = []
def dfs(tickets, ticket):
if len(tmp) == length:
tmp.append(ticket[1])
if len(result) == 0 or (result != [] and result[1:] > tmp[1:]):
result = tmp
tmp.pop()
return
for i in range(length):
if visit[i] == 1 and ticket[1] == tickets[i][0]:
tmp.append(ticket[1])
visit[i] = 0
dfs(tickets, tickets[i])
visit[i] = 1
tmp.pop()
for count in range(length):
if tickets[count][0] == "JFK":
visit[count] = 0
tmp.append(tickets[count][0])
dfs(tickets, tickets[count])
tmp.pop()
visit[count] = 1
return result
“结果”是变量。错误是这样的:
UnboundLocalError: local variable 'result' referenced before assignment
如果我替换
result = tmp
与
del result[:]
result.extend(tmp)
然后它有效。而我对此非常困惑。
答案 0 :(得分:0)
通过设置exact: true
,你告诉python它是一个局部变量,它将在最里面的范围内定义。如果您使用的是python3,则可以使用result
将相同的变量用作外部范围。在python2中,这个变量是必读的“只读”,你不能在内部范围内分配它。
Python的一个特殊之处在于 - 如果没有全局语句生效 - 对名称的赋值总是进入最内层范围。分配不复制数据 - 它们只是将名称绑定到对象。删除也是如此:语句del x删除了x与本地范围引用的命名空间的绑定。实际上,引入新名称的所有操作都使用本地作用域:特别是,import语句和函数定义绑定本地作用域中的模块或函数名称。
全局声明可用于表明特定变量存在于全局范围内,应该在那里反弹;非本地语句表明特定变量存在于封闭范围内,应该在那里反弹。