2016-03-07 3 views
1

Быстрого вопрос:Вызов функции в функции без аргументов

Я хочу, чтобы вызвать основную функцию без аргументов, так и в основной функции, у меня есть несколько других функций, которые действительно имеют аргументы. Как мне это сделать?

Вот несколько функций:

# Takes the Portfolio dictionay, unpacks the multiple tuples, and calculates 
# the total price of the shares at time of purchase 

def total_purchase_price(portfolio): 
    totalprice = 0 
    totalpurprice = 0 
    for item in portfolio: 
     purdate, purprice, numshares, sym, curprice = item 
     totalprice += purprice * numshares 
     totalpurprice = totalprice 
    return totalpurprice 

# Takes the Portfolio dictionay, unpacks the multiple tuples, and calculates 
# the current total value of the shares 

def total_value(portfolio): 
    totalprice = 0 
    totalvalueprice = 0 
    for item in portfolio: 
     purdate, purprice, numshares, sym, curprice = item 
     totalprice += curprice * numshares 
     totalvalueprice = totalprice 
    return totalvalueprice 

# Takes the previous two functions, and subtracts them to get the total 
# gain/lost of the shares 

def total_gain(total_purchase_price, total_value, portfolio): 
    gainlost = total_value - total_purchase_price 
    return gainlost 

отл. То, что я прямо сейчас (Примечание: я знаю, что это не будет работать, только там за то, что я хочу, так как каждая функция возвращает значение):

def testQ1(total_purchase_price, total_value, total_gain, portfolio): 
    print("Total Cost =", total_purchase_price) 
    print("Current Value =", total_value) 
    print("Total gain/lost =", total_gain) 
    return 

отл. Чего я хочу достичь:

def testQ2(): 
    total_purchase_price(portfolio) 
    total_value(portfolio) 
    total_gain(total_purchase_price, total_value, portfolio) 
    print("Total Cost =", total_purchase_price) 
    print("Current Value =", total_value) 
    print("Total gain/lost =", total_gain) 
    return 

Как бы это сделать? Спасибо

+0

Являются ли эти значения глобальных и где они инициализируются. Будет ли 'testQ2()' читать их из файла и иметь другую функцию, которая возвращает их? – sabbahillel

+0

Вы не присваиваете возвращаемые значения переменным. –

+0

testQ2 должен знать, что такое портфель, как говорит sabbahillel, вы должны использовать глобальные vars или сделать класс, а затем они могут быть атрибутом класса – Mixone

ответ

1

портфолио - единственный аргумент, который не рассчитан в пределах testQ2. Для этого вам нужно иметь глобальное значение или прочитать его (возможно, в другой функции). После того, как они были рассчитаны, верните значения в соответствующем порядке.

def testQ2(): 
    portfolio = getPortfolio() 
    tp = total_purchase_price(portfolio) 
    tv = total_value(portfolio) 
    tg = total_gain(tp, tv, portfolio) 
    print("Total Cost =", tp) 
    print("Current Value =", tv) 
    print("Total gain/lost =", tg) 
    return portfolio, tp, tv, tg 
2

Использование класса может быть проще:

class PortfolioParser: 
    def __init__(self, portfolio): 
     self.portfolio = portfolio 
     self.price = self.total_purchase_price() 
     self.value = self.total_value() 
     self.gain = self.total_gain() 

    def total_purchase_price(self): 
     # Takes the Portfolio dictionay, unpacks the multiple tuples, and calculates 
     # the total price of the shares at time of purchase 
     totalprice = 0 
     totalpurprice = 0 
     for item in self.portfolio: 
      purdate, purprice, numshares, sym, curprice = item 
      totalprice += purprice * numshares 
      totalpurprice = totalprice 
     return totalpurprice  

    def total_value(self): 
     # Takes the Portfolio dictionay, unpacks the multiple tuples, and calculates 
     # the current total value of the shares 
     totalprice = 0 
     totalvalueprice = 0 
     for item in self.portfolio: 
      purdate, purprice, numshares, sym, curprice = item 
      totalprice += curprice * numshares 
      totalvalueprice = totalprice 
     return totalvalueprice 

    def total_gain(self): 
     # Takes the previous two functions, and subtracts them to get the total 
     # gain/lost of the shares 
     return self.value- self.price 

    def testQ2(self): 
     print("Total Cost = {0}\nCurrent Value = {1}\nTotal Gains = {2}".format(self.price, self.value, self.gain)) 

И тогда вы будете использовать его следующим образом:

myPortfolio = # The portfolio to parse 
parser = PortfolioParser(myPortfolio) 
parser.testQ2()