Полиморфная Связь с несколькими ассоциациями на той же модели

Я нахожу (вопреки некоторым другим предположениям), что l.reverse() - самый быстрый способ перевернуть длинный список в Python 3 и 2. Мне было бы интересно узнать, могут ли другие копировать эти моменты времени.

l[::-1], вероятно, медленнее, потому что он копирует список до его обращения. Добавление вызова list() вокруг итератора, сделанного из reversed(l), должно добавить некоторые издержки. Конечно, если вам нужна копия списка или итератор, используйте эти соответствующие методы, но если вы хотите просто перевернуть список, то l.reverse(), кажется, самый быстрый способ.

Функции

def rev_list1(l):
    return l[::-1]

def rev_list2(l):
    return list(reversed(l))

def rev_list3(l):
    l.reverse()
    return l

Список

l = list(range(1000000))

Время Python 3.5

timeit(lambda: rev_list1(l), number=1000)
# 6.48
timeit(lambda: rev_list2(l), number=1000)
# 7.13
timeit(lambda: rev_list3(l), number=1000)
# 0.44

Время Python 2.7

timeit(lambda: rev_list1(l), number=1000)
# 6.76
timeit(lambda: rev_list2(l), number=1000)
# 9.18
timeit(lambda: rev_list3(l), number=1000)
# 0.46
9
задан sth 22 July 2009 в 11:14
поделиться

2 ответа

Ага. Это вполне возможно.

Возможно, вам потребуется указать имя класса для header_image , так как это невозможно вывести. Включите также : independent =>: destroy , чтобы гарантировать, что изображения будут уничтожены, если статья будет удалена

class Article < ActiveRecord::Base
  has_one :header_image, :as => :imageable, :class_name => 'Image', :dependent => :destroy
  has_many :images, :as => :imageable, :dependent => :destroy
end

, а затем на другом конце ...

class Image < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true
end
4
ответ дан 3 November 2019 в 01:03
поделиться

Я пробовал это, но затем header_image возвращает одно из изображений. Просто потому, что в таблице изображений не указан другой тип использования изображения (header_image по сравнению с обычным изображением). Он просто говорит: imageable_type = Image для обоих вариантов использования. Поэтому, если информация о типе использования не хранится, ActiveRecord не сможет различить.

7
ответ дан 3 November 2019 в 01:03
поделиться
Другие вопросы по тегам:

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