#python
#python
Вопрос:
У меня есть этот скрипт:
from sys import argv
from tokens import Token
from os import system
file = open(argv[1], "r")
script = file.readlines()
lines = script
file.close()
for index, line in enumerate(lines):
if line[:8] == Token.INCLUDE:
system("python3 {} {}".format(argv[0], argv[1]))
del lines[index]
restart_loop() # Code block to restart the loop
и как я могу перезапустить цикл for. (Дополнительная информация: токен.ВКЛЮЧИТЬ = « %include
«)
Комментарии:
1. Зачем ты звонишь
del lines[index]
?2. Чтобы удалить элемент
index
th изlines
списка3. если вы удалите строки, которые удовлетворяют вашему условию, какой смысл снова запускать цикл?
4. для интерпретации других строк входного скрипта
5. Дело в том, что вы действительно не хотите изменять список по мере его прохождения. Существует множество вопросов по stackoverflow, которые объясняют, как это приводит к неожиданному и нежелательному поведению. С большим контекстом, я обещаю вам, люди здесь могут предложить более простой способ достижения ваших целей
Ответ №1:
Перезапуская цикл, я предполагаю, что вы имеете в виду вызвать его снова
самый простой способ сделать это — сделать его рекурсивной функцией
def fn():
for index, line in enumerate(lines):
if line[:8] == Token.INCLUDE:
system("python3 {} {}".format(argv[0], argv[1]))
del lines[index]
#make sure to add your conditions else it will go into an infinite loop.
fn()
Комментарии:
1. Я отредактировал его, можете ли вы еще раз проверить, что вы ответили верно?
2. да, похоже, что вы пытаетесь вызвать рекурсивную функцию, попробуйте фрагмент кода, на который я ответил, он должен работать, все, что вам нужно сделать, это заменить ur на for цикл и вызвать функцию
3. @maDeveloper Я не голосовал против, но в вашем вопросе не хватает подробностей и контекста. Кроме того, ваш пример кода недоступен для выполнения, и вы не показываете даже образец содержимого файла. Таким образом, люди, которые отвечают на вопросы, должны делать много догадок
4. Голоса против были, поскольку заданный вопрос не был правильно сформулирован, и аналогичные вопросы задавались ранее, это часто случается @maDeveloper я получил тонны голосов против
5. Хм, я понял, спасибо, в любом случае, я попробую ваш ответ