首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个函数总是给我一个错误

为什么这个函数总是给我一个错误
EN

Stack Overflow用户
提问于 2022-06-15 21:45:07
回答 2查看 34关注 0票数 0

我想尝试自己快速排序,但是函数在执行它们时总是给我一个错误。

目前的守则:

代码语言:javascript
复制
import random
pivot = 0
mop = 0
vop = 0
bobl = 0
lista = [2, 5, 1, 7, 9, 4, 6, 3, 8]
def mopcom():
    if lista.index(mop)>lista.index(pivot):
        mop = random.choice(lista)
        mopcom()
def vopcom():
    if lista.index(vop)<lista.index(pivot):
        vop = random.choice(lista)
        vopcom()
pivot = random.choice(lista)
mop = random.choice(lista)
vop = random.choice(lista)
mopcom()

引起问题的两个职能:

代码语言:javascript
复制
def mopcom():
    if lista.index(mop)>lista.index(pivot):
        mop = random.choice(lista)
        mopcom()
def vopcom():
    if lista.index(vop)<lista.index(pivot):
        vop = random.choice(lista)
        vopcom()

错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:/Users/antem/OneDrive/Radna površina/pametno.py", line 22, in <module>
    mopcom()
  File "C:/Users/antem/OneDrive/Radna površina/pametno.py", line 11, in mopcom
    if lista.index(mop)>lista.index(pivot):
UnboundLocalError: local variable 'mop' referenced before assignment

请不要告诉我,我做错了快速排序,因为我想尝试这样做,我自己。告诉我为什么这会给我带来错误

EN

回答 2

Stack Overflow用户

发布于 2022-06-15 21:50:22

摘要:使用函数参数。

这些全局变量对你没有任何好处。

你写道:

代码语言:javascript
复制
def mopcom():
    if lista.index(mop)>lista.index(pivot):
        mop = random.choice(lista)
    ...

第2行读取mop,第3行向其写入。那么,它写到一个不同的mop,它写到一个新创建的局部变量的名称。然后退出函数,本地将超出作用域,并被垃圾收集。

您可以使用global关键字。但是,将相关变量作为形式参数传递,或者使其成为class并引用self.mop要好得多。

票数 0
EN

Stack Overflow用户

发布于 2022-06-15 21:49:49

在python中,变量的作用域是默认的。考虑一下这个片段:

代码语言:javascript
复制
x = 3

def foo():
    x = 4 # This is a new, different variable also called x

foo()
print(x) # Prints 3

正因为如此,mopmopcom中被视为不同的值。要解决这个问题,请添加行global mop。这告诉python mop实际上是一个全局值。

代码语言:javascript
复制
import random
pivot = 0
mop = 0
vop = 0
bobl = 0
lista = [2, 5, 1, 7, 9, 4, 6, 3, 8]
def mopcom():
    global mop
    global pivot
    global lista
    if lista.index(mop)>lista.index(pivot):
        mop = random.choice(lista)
        mopcom()
def vopcom():
    global vop
    global lista
    global pivot
    if lista.index(vop)<lista.index(pivot):
        vop = random.choice(lista)
        vopcom()
pivot = random.choice(lista)
mop = random.choice(lista)
vop = random.choice(lista)
mopcom()
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72638197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档