Вы ничего не возвращаете из обратного вызова Array.map()
:
{Object.keys(context.state.subjects).map(subject => {
<li>{context.state.subjects[subject].title}</li>; <-- this is not returned
console.log(context.state.subjects[subject].title);
})}
const contextValue = { state: {"subjects":{"subject0":{"title":"Math","description":"","cards":{"card1":{"note":"","answer":""}}},"subject1":{"title":"history","description":"","cards":{"card1":{"note":"","answer":""}}}}}};
const MyContext = React.createContext();
const Example = () => (
<MyContext.Consumer>
{context => (
<ul>
{Object.keys(context.state.subjects).map(subject => {
console.log(context.state.subjects[subject].title);
return (
<li key={subject}>{context.state.subjects[subject].title}</li>
);
})}
</ul>
)}
</MyContext.Consumer>
);
const Demo = ({ value }) => (
<MyContext.Provider value={value}>
<Example />
</MyContext.Provider>
);
ReactDOM.render(
<Demo value={contextValue} />,
demo
);
<script crossorigin src="https://unpkg.com/react@16.3/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16.3/umd/react-dom.development.js"></script>
<div id="demo">
</demo>
def main():
args = arguments()
if not os.path.isfile(args.inventory):
sys.exit('Please specify valid, readable YAML file with data')
inventory = get_inventory(args.inventory)
generate_table(inventory, args)
Вы вызываете get_inventory
со строкой, значения из args
. Вам также следует вызвать generate_table
со значениями из args
или самого args
. Переоценка args
работает, но делает ваш код более грязным.
def generate_table(inventory, args):
# args = arguments() # no need to reevaluate args
data = generate_data(inventory)
...
То же самое можно сделать для output_file
, хотя не очевидно, где вы используете args
.
В generate_table
вы, кажется, используете args
в основном в:
for arg in vars(args):
if arg in main_headers and getattr(args, arg):
main_header.append(arg)
elif arg in lldp_headers and getattr(args, arg):
lldp_header.append(arg)
elif arg in out_file and getattr(args, arg):
out_file.append(arg)
output_file(inventory)
Это неясный фрагмент кода, трактующий args
как пространство имен и словарь. Я думаю, что это просто проверка значений
args.os_version
args.serial_number
args.lldp
args.outfile
Это все store_true
, поэтому они всегда будут присутствовать, и значение True/False
. Так что вы могли бы
if args.out_file:
output_file(inventory)
if args.lldp:
lldp_header.append('lldp')
Но мне не слишком интересно копаться во всех логических шагах.
Убедитесь, что вы понимаете, что parse_args
произвело. Во время отладки я призываю пользователей
print(args)
Таким образом, будет меньше сюрпризов.
Ваш метод generate_table
всегда печатает две таблицы, когда вы хотите, чтобы он распечатал только одну:
Ваша исходная функция:
def generate_table(inventory):
args = arguments()
...
print(main_table_header)
print(lldp_table_header)
Должна просто измениться на: [ 118]
def generate_table(inventory):
args = arguments()
...
if args.lldp:
print(lldp_table_header)
else:
print(main_table_header)
Другие комментаторы упомянули оптимизации, которые, как правило, улучшают код, который вы должны рассмотреть, например:
, генерируя arguments
только один раз
создавать только таблицы, которые вы собираетесь визуализировать, вместо того, чтобы выполнять шаги по созданию таблиц, которые вы не собираетесь печатать в конце
Но, в конце концов, вы были в нескольких шагах от того, чтобы приведенные выше варианты использования работали так, как вы этого хотели.