2016-10-10 82 views
-3

好吧,所以我很难让函数之间传递变量:在Python中的函数之间传递变量

我似乎无法找到一个清晰的例子。

我不想在funb()中运行funa()。

def funa(): 
    name=input("what is your name?") 
    age=input("how old are you?") 
    return name, age 

funa() 

def funb(name, age): 
    print(name) 
    print(age) 

funb() 
+2

丹尼尔是正确的,但是这是你可以从阅读Python入门文章或者关于变量和函数的教程中学到一些东西。 – SwiftsNamesake

回答

0

把它看作是传递对象的变量和函数参数作为对象的引用。当我更新您的示例时,我还更改了变量的名称,以便清楚地看到这些对象在不同的​​名称空间中存在于不同的变量中。

def funa(): 
    name=input("what is your name?") 
    age=input("how old are you?") 
    return name, age     # return objects in name, age 

my_name, my_age = funa()    # store returned name, age objects 
             # in global variables 

def funb(some_name, some_age):   # a function that takes name and 
             # age objects 
    print(some_name) 
    print(some_age) 

funb(my_name, my_age)     # use the name, age objects in the 
             # global variables to call the function 
+0

非常感谢您的意见,但我仍然不明白,为什么首先使用函数,而不是仅仅使用全局变量,如果名称和年龄最终会像全局一样? – AHC

+0

这取决于你的计划的目标是什么。随着程序的增长,除非封装数据,否则它变得难以管理 - 这意味着要避免全局变量。其他关心的是你如何使用这个功能。假设将来你想维护一个名字的“dict”:年龄对。现在你的名字,年龄全局变量是有问题的。你将不得不改变功能和所有使用数据的地方。 – tdelaney

+0

谢谢,这是一个很大的帮助。 – AHC

4

由于funa返回的姓名和年龄的数值,需要分配那些局部变量,然后将它们传递到funb:

name, age = funa() 
funb(name, age) 

注意函数中的名称和外面没有联系;这也可以工作:

foo, bar = funa() 
funb(foo, bar) 
+0

那么为什么这样做比不仅仅使用全局变量更好呢? – AHC

+0

首先,因为那样你会依赖于贯穿始终的相同名字。 –

0

当它返回一个元组,你可以简单地用*解压:

funb(*funa()) 

它应该是这个样子:

def funa(): 
    # funa stuff 
    return name, age 

def funb(name, age): 
    # funb stuff 
    print() 

funb(*funa())