Python:调用另一个被调用函数内部的函数时出现问题

标签 python function

我正在尝试调用一个包含在另一个函数中的函数。我知道每个内部函数都是单独工作的,因为我在将它们组合到 rollDice() 中之前对它们进行了测试。

当我尝试运行代码时,它始终告诉我基本上每个变量(d20d10 等)都是未定义的,即使我有 rollDice() 函数正在运行。

如何让我的内部函数 (d6(roll6)) 输出在使用 rollDice(roll) 函数后为其分配的值?

def diceRoll(roll):

    def d20(roll20):
        import random

        roll20 = random.randint(1,20)

        print("The roll is ", roll20)

        return roll20

    def d12(roll12):
        import random

        roll12 = random.randint(1,12)

        print("The roll is ", roll12)

        return roll12


    def d6(roll6):
        import random

        roll6 = random.randint(1,6)

        print("The roll is ", roll6)

        return roll6

####### example of other part of code

def generateDungeon():
    diceRoll(roll)

    numberOfRooms = roll6

    print("The roll was: ", roll6)

    if numberOfRooms > 1:
        print("There are ", numberOfRooms, "rooms in this dungeon.")

    else:
        print("There is only 1 room in this dungeon.")

    return numberOfRooms

最佳答案

通过执行外部函数,您不会执行任何内部函数。无论如何,它们的变量超出了范围。

如果您确实想在函数中使用函数(顺便说一下,在本例中这是不必要的),您可以通过使用闭包使代码更加简洁。此外,只需在顶部导入一次包就更容易了:

import random

def diceRoll(roll):
    def helper():
        r = random.randint(1, roll)
        print("The roll is", r)
        return r
    return helper

然后,要使用它,请调用 diceRoll 的返回值:

numberOfRooms = diceRoll(6)()

请注意,整个事情可以这样完成:

def diceRoll(roll):
    r = random.randint(1, roll)
    print("The roll is", r)
    return r

并这样称呼:

numberOfRooms = diceRoll(6)

关于Python:调用另一个被调用函数内部的函数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55584204/

相关文章:

python - MQTT (Mosquitto) over TLS - 某些程序中的证书错误

c - 之前的声明 - was Here 和 "conflicting types for put_non_bloccante"

java - 如何在Java中第二次出现字符之前拆分字符串

function - 难以将字符串数组转换为 LowerCase 并添加到我的函数中。 Javascript

c - 我如何在多个驱动程序中使用一个函数?

java - @FunctionalInterface 也实现了andThen?

python - 引用列表的一部分 - Python

python - 如何根据索引访问队列元素

python - 设置 docker 容器,以便我可以访问 ubuntu 服务器上的 python 包

python - 如何在 QTreeWidget 中设置图标大小?