Я пытаюсь использовать python для создания небольшой программы поиска, которая отображает все текущие цены теоретического портфеля, а затем предлагает возможность в основном обновить свой портфель или просмотреть новую цитату по вашему выбору.Вызов функции внутри вторичной функции или вызов функции, определенной в рамках большей функции
Я могу получить все, чтобы работать в программе, проблема, с которой я сталкиваюсь, связана с определенными функциями.
Если вы посмотрите на run_price1(), вы заметите, что он идентичен идентификатору run_price(); однако run_price() находится внутри функции обновления.
Если я выхожу из функции обновления, функция обновления не работает. Если я не перечислил его где-то вне функции обновления, более поздний пользовательский ввод не работает.
Вопрос: Я ищу способ вызова функции, определенной в рамках другой функции, или способ использования ранее определенной функции внутри вторичной функции.
Мой код:
import mechanize
from bs4 import BeautifulSoup
def run_price1():
myBrowser = mechanize.Browser()
htmlPage=myBrowser.open(web_address)
htmlText=htmlPage.get_data()
mySoup = BeautifulSoup(htmlText)
myTags = mySoup.find_all("span", id=tag_id)
myPrice = myTags[0].string
print"The current price of, {} is: {}".format(ticker.upper(), myPrice)
def update():
my_stocks = ["aapl","goog","sne","msft","spy","trgt","petm","fslr","fb","f","t"]
counter = 0
while counter < len(my_stocks):
web_address = "http://finance.yahoo.com/q?s={}".format(my_stocks[counter])
ticker = my_stocks[counter]
#'yfs_l84_yhoo' - that 1(one) is really a lowercase "L"
tag_id = "yfs_l84_{}".format(ticker.lower())
def run_price():
myBrowser = mechanize.Browser()
htmlPage=myBrowser.open(web_address)
htmlText=htmlPage.get_data()
mySoup = BeautifulSoup(htmlText)
myTags = mySoup.find_all("span", id=tag_id)
myPrice = myTags[0].string
print"The current price of, {} is: {}".format(ticker.upper(), myPrice)
run_price()
counter=counter+1
update()
ticker = ""
while ticker != "end":
ticker = raw_input("Type 'update', to rerun portfolio, 'end' to stop program, or a lowercase ticker to see price: ")
web_address = "http://finance.yahoo.com/q?s={}".format(ticker.lower())
tag_id = "yfs_l84_{}".format(ticker.lower())
if ticker == "end":
print"Good Bye"
elif ticker == "update":
update()
else:
run_price1()
Почему не только называют 'run_price1' вместо' run_price' и удалить последний вообще? У вас нет * *, чтобы определить его внутри 'update'. –
Я пробовал это, я бы предпочел сделать это, но это не сработает. Я получаю сообщение об ошибке - NameError: глобальное имя «web_address» не определено –