簡體   English   中英

Python:調用另一個函數內部的函數時出現問題

[英]Python: Problems calling a function which is inside another called function

我正在嘗試調用包含在另一個函數內部的一個函數。 我知道每個內部功能都是單獨工作的,因為在將它們組合到rollDice()之前先對其進行了測試。

當我嘗試運行代碼時,它始終告訴我,即使我正在運行rollDice()函數,基本上每個變量( d20d10等)都未定義。

在具有rollDice(roll)函數之后,如何獲取內部函數( d6(roll6) )以輸出其分配的值?

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM