Почему count () не работает так, как я ожидаю в моем коде? - PullRequest
0 голосов
/ 22 декабря 2009
class FriendshipManager(models.Manager):    
       def are_friends(self, user1, user2):
            if self.filter(from_user=user1, to_user=user2).count() > 0:
                return True
            if self.filter(from_user=user2, to_user=user1).count() > 0:
                return True
            return False

и я нашел count () так что я попробую это, но работает не так

a=[1,2,3,4]
print a.count()

или

a='ssada'
print a.count()

почему мой код работает неправильно, но FriendshipManager может работать, спасибо Пожалуйста, попробуйте использовать код, а не текст, потому что мой английский не очень хороший, спасибо

Ответы [ 4 ]

8 голосов
/ 22 декабря 2009

Проблема в том, что вы перепутали два метода с одинаковым именем.

В последовательности в Python, count() работает в точности так, как Дастин описывает, чтобы «подсчитать количество вхождений параметра в последовательности».

Код, на который вы ссылаетесь, взят из модели Django. Там вызов count() для объекта фильтра является псевдонимом для функции группировки SQL COUNT, которая суммирует количество совпадающих строк.

По сути, count в вашем первоначальном примере и count в двух приведенных ниже примерах вовсе не являются одним и тем же методом.

5 голосов
/ 22 декабря 2009

Я думаю, что вы хотите использовать len(a) вместо a.count(), если хотите определить длину / размер списка. a.count() на самом деле требует аргумента в любом случае. Подсчитывает количество вхождений значения. Например:

a = [2, 6, 2, 1, 5, 3, 9, 5]
print a.count(5) #should display 2 because there are two elements with a value of 5
print a.count(3) #should display 1 because there is only one element with a value of 3
3 голосов
/ 22 декабря 2009

len является правильным для этого случая.

>>> a=[1,2,3,4]
>>> print len(a)
4
0 голосов
/ 22 декабря 2009

Я не уверен, что это правильный ответ, но попробуйте это вместо кода Model Manager, который у вас есть. Никаких больших изменений как таковых.

class FriendshipManager(models.Manager):    
   def are_friends(self, user1, user2):
        if self.filter(from_user=user1, to_user=user2).count() or self.filter(from_user=user2, to_user=user1).count():
            return True
        return False

Если count () возвращает значение, отличное от нуля, оно всегда возвращает True.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...