Как проверить все значения объектов в функции python
Я хотел бы проверить все значения x в этой функции, не вызывая каждое значение x ( x[0] ...), таким образом, что-то вроде x[n] или ' for all values of x'. И перечислить все значения TickerZ в списке в зависимости от того, прошло ли значение x оператор IF.
room = str('Bingo Bango Bungo EURUSD=X')
x = room.split()
def Symbol(symbol):
aapl = yf.Ticker(symbol)
ainfo = aapl.history(period='1y')
if len(ainfo) >= 40:
print('yes it is a symbol')
global tickerZ
tickerZ = symbol
new_Memory = Memory.objects.create(user=current_user, raw_message=room, date1=datemin, date2=datemax, ticker=tickerZ, command=cmd_exec)
new_Memory.save()
return tickerZ
symb1 = Symbol(x[0])
symb2 = Symbol(x[1])
symb3 = Symbol(x[2])
symb4 = Symbol(x[3])
Объяснение кода: В общем, у меня есть строка, я разбиваю ее на слова, которые представляют все значения x. В данном случае x[0] - это Bingo. Я передаю все x в оператор IF, чтобы отфильтровать соответствующие значения x. Я знаю, является ли x релевантным, если TickerZ имеет значение, потому что переменная определена после фильтра.
Вы можете использовать понимание списка для перебора всех значений x и добавить в ticker_list
только те символы, которые прошли оператор if функции Symbol. Затем ticker_list
используется для создания и сохранения объекта new_Memory
room = str('Bingo Bango Bungo EURUSD=X')
x = room.split()
def Symbol(symbol):
aapl = yf.Ticker(symbol)
ainfo = aapl.history(period='1y')
if len(ainfo) >= 40:
print('yes it is a symbol')
global tickerZ
tickerZ = symbol
return True
return False
ticker_list = [symbol for symbol in x if Symbol(symbol)]
new_Memory = Memory.objects.create(user=current_user, raw_message=room, date1=datemin, date2=datemax, ticker=ticker_list, command=cmd_exec)
new_Memory.save()
Используйте карту:
all_tickerz = list(map(Symbol, x))
Вы можете использовать python's list-comprehension с генератором для решения этой проблемы с помощью одной строки:
symbols = [symbol for symbol in (Symbol(y) for y in x) if not symbol is None]
или, альтернативно, с фильтром, что может быть более читабельным:
symbols = filter(None, (Symbol(symbol) for symbol in x))