【问题标题】:What is the best way to use a variable from one function in another function (Python)?在另一个函数(Python)中使用一个函数中的变量的最佳方法是什么?
【发布时间】:2021-05-27 20:08:05
【问题描述】:

我正在尝试编写一些非常简单的代码,但不知道如何在第二个函数中使用我在第一个函数中声明的变量。 您可能有什么想法?

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)

【问题讨论】:

  • 您可以从第一个函数调用第二个函数,将变量作为参数传递给它

标签: python var


【解决方案1】:

我会创建一个类:

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

【讨论】:

  • 嘿,谢谢!你能解释一下最后两行的作用吗?
  • @Adrian 当然,r = request_info() 初始化类对象并将其分配给变量 r 然后你调用你的函数,它会打印出名称和电子邮件:r.print_user_info() 但是,你也可以通过调用 init 中的类属性获取姓名和电子邮件。例如,你可以先r = request_info() 然后print(r.name)print(r.email)
【解决方案2】:

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

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 函数,以便调用另一个函数。

【讨论】:

    【解决方案3】:

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

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

    global someVariable
    someVariable = None
    someVariable2
    someVariable2 = None
    
    def someFunction():
        global someVariable
        someVariable = 12
    
        global someVariable2
        someVariable2 = 24    
    
    someFunction()
    
    print(someVariable)
    

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

    退货是另一种处理方式。

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

    通过让函数返回一个元组,您可以让下一个函数可以访问这两个变量。

    终于有课了。对于更复杂的代码,我建议使用 Classes,因为它将内容保存在一个漂亮整洁的小容器中。

    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

    【讨论】:

      【解决方案4】:

      您正在寻找的是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
      

      【讨论】:

        【解决方案5】:

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

        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()
        

        【讨论】:

          猜你喜欢
          • 2017-07-16
          • 2018-09-11
          • 2013-04-08
          • 2021-07-14
          • 1970-01-01
          • 2016-01-16
          • 1970-01-01
          • 2021-09-25
          • 1970-01-01
          相关资源
          最近更新 更多