правильно ли я понимаю вопрос? [Дубликат]

Хотя exec(open("filename").read()) часто задается как альтернатива execfile("filename"), он пропускает довольно много деталей, которые поддерживаются execfile.

Следующая функция для Python3.x находится как можно ближе получить то же поведение, что и выполнение файла напрямую.

Примечания:

  • Использует двоичное чтение, чтобы избежать проблем с кодированием
  • Гарантировано закрытие файла (Python3 .x предупреждает об этом)
  • определяет __main__, некоторые сценарии зависят от этого, чтобы проверить, загружаются ли они как модуль или нет, например. if __name__ == "__main__"
  • настройка __file__ лучше подходит для сообщений об исключениях, а некоторые скрипты используют __file__ для получения путей к другим файлам по отношению к ним.
  • принимает необязательные глобальные переменные & amp; Локальные аргументы, изменяя их на месте по мере того, как execfile делает - поэтому вы можете получить доступ к любым переменным, определяемым путем чтения переменных после запуска.
def execfile(filepath, globals=None, locals=None):
    if globals is None:
        globals = {}
    globals.update({
        "__file__": filepath,
        "__name__": "__main__",
    })
    with open(filepath, 'rb') as file:
        exec(compile(file.read(), filepath, 'exec'), globals, locals)

# execute the file
execfile("/path/to/somefile.py")

Примечание: в отличие от execfile Python2, это не изменяет текущее пространство имен по умолчанию. Для этого вам нужно явно передать globals().

4
задан Pratik 15 November 2010 в 07:56
поделиться

4 ответа

CREATE TABLE ATable (ID INTEGER, ParentID INTEGER)

INSERT INTO ATable 
SELECT 1, NULL
UNION ALL SELECT 2, 1
UNION ALL SELECT 3, 2

;WITH q AS (
  SELECT  ID, ParentID
  FROM    ATable
  UNION ALL 
  SELECT  a.ID, a.ParentID
  FROM    ATable a
          INNER JOIN q ON q.ID = a.ParentID
)
SELECT  DISTINCT *
FROM    q
3
ответ дан Lieven Keersmaekers 20 August 2018 в 18:49
поделиться

Вот самодостаточный пример.

Declare @Temp table
(
    ID int,
    ParentID int,
    Happened date,
    Value int
)
Insert into @Temp Values
    (1, null, dateadd(day,1,GetDate()),1),
    (2, 1, dateadd(day,2,GetDate()),2),
    (3, 1, dateadd(day,3,GetDate()),3),
    (4, null, dateadd(day,4,GetDate()),10),
    (5, 3, dateadd(day,5,GetDate()),50),
    (6, 4, dateadd(day,5,GetDate()),50),
    (7, 5, dateadd(day,5,GetDate()),90);
----------------------------------------

with Magic as
(
    select *
    from @Temp
    Where ID = 1

    union all

    select t.*
    from
        Magic m
        inner join
        @Temp t
            on t.ParentID = m.ID
)

select * from Magic
option (maxrecursion 3)
5
ответ дан Jacques Bosch 20 August 2018 в 18:49
поделиться

Пожалуйста, проверьте следующую ссылку о том, как писать рекурсивные запросы с использованием общих выражений таблицы: http://msdn.microsoft.com/en-us/library/ms186243.aspx

1
ответ дан rkg 20 August 2018 в 18:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: