Python:调用另一个函数内的函数时遇到问题

时间:2019-04-09 02:21:31

标签: python function

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

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

在拥有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

1 个答案:

答案 0 :(得分:3)

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

如果您确实想在函数中使用一个函数(顺便说一下,在这种情况下是不必要的),则可以使用闭包使代码更加简洁。另外,只需一次在顶部导入软件包,就更容易了:

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)