это просто, например, если у вас есть этот объект массива:
cars = ["Dodge", "Fiat", "Audi", "Volvo", "BMW", "Ford"];
и вы хотите, чтобы объект был отсортирован во фронте HTML, используйте:
<li ng-repeat="x in cars | orderBy">{{x}}</li>
По умолчанию строки отсортированы в алфавитном порядке, а числа отсортированы по номерам.
Если у вас есть этот массив с ключами:
customers = [
{"name" : "Bottom-Dollar Marketse" ,"city" : "Tsawassen"},
{"name" : "Alfreds Futterkiste", "city" : "Berlin"},
{"name" : "Bon app", "city" : "Marseille"},
{"name" : "Cactus Comidas para llevar", "city" : "Buenos Aires"},
{"name" : "Bolido Comidas preparadas", "city" : "Madrid"},
{"name" : "Around the Horn", "city" : "London"},
{"name" : "B's Beverages", "city" : "London"}
];
Использование:
Сортировать массив по «городскому» порядку DESC:
<li ng-repeat="x in customers | orderBy : '-city'">{{x.name + ", " + x.city}}</li>
Сортировать массив по "городу":
<li ng-repeat="x in customers | orderBy : 'city'">{{x.name + ", " + x.city}}</li>
Similar to mutable default arguments is the mutable class attribute.
>>> class Classy:
... foo = []
... def add(self, value):
... self.foo.append(value)
...
>>> instance1 = Classy()
>>> instance2 = Classy()
>>> instance1.add("Foo!")
>>> instance2.foo
['Foo!']
Not what you expect.
Об этом уже упоминалось, но я хотел бы подробнее остановиться на изменчивости атрибутов класса.
Когда вы определяете атрибут-член, а затем каждый раз, когда вы создаете экземпляр этого класса, он получает атрибут, который является неглубокой копией атрибута класса.
Итак, если у вас есть что-то вроде
class Test(object):
myAttr = 1
instA = Test()
instB = Test()
instB.myAttr = 2
, он будет вести себя так, как ожидалось.
>>> instA.myAttr
1
>>> instB.myAttr
2
Проблема возникает когда у вас есть изменяемые атрибуты класса. Поскольку при создании экземпляра была выполнена неглубокая копия, все экземпляры будут просто иметь ссылку, указывающую на один и тот же объект.
class Test(object):
myAttr=[1,2,3]
instA = Test()
instB = Test()
instB.myAttr[0]=2
>>> instA.myAttr
[2,2,3]
Но ссылки являются фактическими членами экземпляра, если вы фактически назначаете что-то новое в атрибуте вы в порядке.
В блогах об алгоритмах есть хорошая статья о проблемах с производительностью Python и о том, как их избежать: 10 советов и проблем по оптимизации Python
Некоторые ответы выше неверны или неясны относительно атрибутов класса.
Они не становятся атрибутами экземпляра, но могут считываться с использованием того же синтаксиса, что и атрибуты экземпляра. Их можно изменить, обратившись к ним через имя класса.
class MyClass:
attrib = 1 # class attributes named 'attrib'
another = 2 # and 'another'
def __init__(self):
self.instattr = 3 # creates instance attributes
self.attrib = 'instance'
mc0 = MyClass()
mc1 = MyClass()
print mc.attrib # 'instance'
print mc.another # '2'
MyClass.another = 5 # change class attributes
MyClass.attrib = 21 # <- masked by instance attribute of same name
print mc.attrib # 'instance' unchanged instance attribute
print mc.another # '5' changed class attribute
Атрибуты класса могут использоваться как своего рода значения по умолчанию для атрибутов экземпляра, замаскированные позже атрибутами экземпляра с тем же именем и другим значением.
Более сложный вопрос для понимания - это область видимости переменных во вложенных функциях.
В следующем примере y не может быть записан из любого места, кроме функции 'external'. x доступен для чтения и записи из любого места, поскольку он объявлен глобальным в каждой функции. z доступен для чтения и записи только во внутреннем *. y читается во "внешнем" и "внутреннем *", но не доступен для записи, кроме "external".
x = 1
def outer():
global x
y = 2
def inner1():
global x, y
y = y+1 # creates new global variable with value=3
def inner2():
global x
y = y+1 # creates new local variable with value=3
Я считаю, что Python 3 включает ключевое слово external для таких случаев, которые «вне этой функции, но не глобальные». В Python 2.# вы застряли в том, чтобы либо сделать y глобальным, либо сделать его изменяемым параметром для 'inner'.