2016-10-10 78 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())