在另一个函数 (Python) 中使用一个函数中的变量的最佳方法是什么?

What is the best way to use a variable from one function in another function (Python)?

我正在尝试编写一些非常简单的代码,但无法弄清楚如何在第二个函数中使用我在第一个函数中声明的变量。 你有什么想法吗?

import random 

def request_info():
    name = input("What is your name?: ")
    email = input("What is your email?: ")

def print_user_info():
    print("Your name " + name)
    print("Your email " + email)
    num = random.randrange(100_000, 10**8)

您要查找的是 return 语句,您可以使用这些语句将函数的输出分配给变量。

在这里,我们将 return 一个元组并使用多重赋值来调用元组中的值 nameemail:

import random 

def request_info():
    name = input("What is your name?: ")
    email = input("What is your email?: ")
    return (name, email) # this function now 'returns' this tuple

def print_user_info(name, email):
    print("Your name " + name)
    print("Your email " + email)
    num = random.randrange(100_000, 10**8)

因此,如果您 运行 以下内容:

name, email = request_info()
print_user_info(name, email)

(为清楚起见,这是上面第一行中发生的情况,但您可以将其合并为 1 行而不是 3 行)

user_info = request.info()
name = user_info[0]
email = user_info[1]

你的程序会运行像这样:

What is your name?: Joe Smith
What is your email?: jsmith@gmail.com
Your name Joe Smith
Your email jsmith@gmail.com

我只是将变量传递给另一个函数,如下面的代码所示:

import random 

def print_user_info(name,email):
    print("Your name " + name)
    print("Your email " + email)
    num = random.randrange(100_000, 10**8)

def request_info():
    name = input("What is your name?: ")
    email = input("What is your email?: ")
    print_user_info(name,email)


    

您当然还必须调用一次 request_info 函数,以便调用另一个函数。

我会创建一个 class:

import random 

class request_info(object):
    def __init__(self):
        self.name = input("What is your name?: ")
        self.email = input("What is your email?: ")

    def print_user_info(self):
        print("Your name " + self.name)
        print("Your email " + self.email)
        num = random.randrange(100_000, 10**8)
        return num
    
r = request_info()
r.print_user_info()

# What is your name?:  Test
# What is your email?:  Test@gmail.com
# Your name Test
# Your email Test@gmail.com
# 90584743

这是一种方法。使用 class 可以帮助共享变量和函数。

import random 

class User:

def __init__(self, name, email):
    self.name = name
    self.email = email
    self.num = random.randrange(100_000, 10**8)

def print_info(self):
    print(f"Your name is: {self.name} \nYour email is: {self.email}")

new_user = User(input("What is your name?"), input("What is your email?"))
new_user.print_info()

有几种方法可以做到这一点,但您应该首先考虑范围。

最肮脏的方法是声明一个全局变量,该变量将在函数外部设置,然后在函数内部赋值。

global someVariable
someVariable = None
someVariable2
someVariable2 = None

def someFunction():
    global someVariable
    someVariable = 12

    global someVariable2
    someVariable2 = 24    

someFunction()

print(someVariable)

这可以帮助您,但这不是处理变量的最佳方式。如果您只编写 11 行左右的代码,它就可以了。

Returns 是另一种处理方式。

def someFunction():
    someVariable = 4
    someVariable2 = 13
    return (someVariable,someVariable2)

print(someFunction())

通过使用函数 return,元组将允许您获得下一个函数可访问的两个变量。

最后,类。对于更复杂的代码,我会推荐 类,因为它将内容保存在一个漂亮整洁的小容器中。

class myClass:
    someVariable = None
    someVariable2 = None

    def __init__(self):
        self.someVariable = 50
        self.someVariable2 = -12
        
    def retValues(self):
        someVariable = self.someVariable
        someVariable2 = self.someVariable2
        
        return (someVariable,someVariable2)

print(myClass().retValues())

更多关于 类 的信息:https://docs.python.org/3/tutorial/classes.html