简体   繁体   English

从python中的函数外部访问函数变量

[英]Access a function variable from outside the function in python

I have a python function and would like to retrieve a value from outside the function.我有一个 python 函数,想从函数外部检索一个值。 How can achieve that without to use global variable.如何在不使用全局变量的情况下实现这一点。 I had an idea, if functions in python are objects then this could be a right solution?我有一个想法,如果 python 中的函数是对象,那么这可能是一个正确的解决方案?

def check_difficulty():
    if (difficulty == 1):
        check_difficulty.tries = 10
    elif (difficulty == 2):
        check_difficulty.tries = 5
    elif (difficulty == 3):
        check_difficulty.tries = 3


try:
    difficulty = int(input("Choose your difficulty: "))
    check_difficulty()

except ValueError:
    difficulty = int(input("Type a valid number: "))
    check_difficulty()

while check_difficulty.tries > 0:

I am new to python so excuse me...我是python的新手,所以请原谅...

def check_difficulty(difficulty):
    if (difficulty == 1):
        return 10
    elif (difficulty == 2):
        return 5
    elif (difficulty == 3):
        return 3

tries = 0
while tries > 0:
    difficulty = int(input("Choose your difficulty: "))

    tries = check_difficulty(difficulty)
    tries = tries - 1

如果您使用 while 循环并以结构化方式将所有内容放入其中,则不需要函数。

You can change this to a class to get your tries:您可以将其更改为类以进行尝试:

class MyClass:
  def __init__(self):
    self.tries = 0
  def check_difficulty(self, difficulty):
    if (difficulty == 1):
        self.tries = 10
    elif (difficulty == 2):
        self.tries = 5
    elif (difficulty == 3):
        self.tries = 3

ch = MyClass()

try:
    difficulty = int(input("Choose your difficulty: "))
    ch.check_difficulty(difficulty)

except ValueError:
    difficulty = int(input("Type a valid number: "))
    ch.check_difficulty(difficulty)


ch.tries
# 5

If you want the question answered within the construct of your current code simply put your try, except before the function.如果您想在当前代码的构造中回答问题,只需在函数之前输入 try 即可。 You can call a function anywhere in the code it doesn't ave to be after the function is created .您可以在代码中的任何位置调用函数,该函数在创建函数后不需要。 So something like this:所以像这样:

try:
    difficulty = int(input("Choose your difficulty: "))
    check_difficulty()

except ValueError:
    difficulty = int(input("Type a valid number: "))
    check_difficulty()

def check_difficulty():
    if (difficulty == 1):
        check_difficulty.tries = 10
    elif (difficulty == 2):
        check_difficulty.tries = 5
    elif (difficulty == 3):
        check_difficulty.tries = 3


while check_difficulty.tries > 0:

however, I would have to agree with the other answers and just kind of put everything together within the same loop and you won't have to worry about this.但是,我必须同意其他答案,只是将所有内容放在同一个循环中,您不必担心这一点。 I created a guessing game recently that actually had something similar to this.我最近创建了一个猜谜游戏,实际上有类似的东西。 Here is the difficulty portion of that code:这是该代码的难度部分:

def guessing_game():
    again = ''
# Define guesses/lives
    while True:
        try:
            guesses_left = int(input('How many guess would you like(up to 4)?: '))
            if 1 > guesses_left or guesses_left > 4:
                print('You must choose between 1 and 4 for your guess amount. Try again.')
                continue
            break
        except:
            print('You must enter a valid number between 1 and 4. Try again.')

# Define difficulty based on guesses_left
    difficulty = ''
    if guesses_left == 1:
        difficulty = 'Hard Mode'
    elif guesses_left == 2:
        difficulty = 'Medium Mode'
    elif guesses_left == 3:
        difficulty = 'Easy Mode'
    elif guesses_left == 4:
        difficulty = 'Super Easy Mode'

    print('You are playing on ' + difficulty + ' with ' + str(guesses_left) + ' guesses.')

#code continues under this line to finish#

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM