Почему не делает Python dict.update (), возвращают объект?

Если Ваши цвета находятся в формате RGB (или, по-видимому, CMYK), можно использовать довольно сырой метод увеличивания стоимости каждого компонента цвета. Например, в HTML цвета представлены как три двухразрядных шестнадцатеричных числа. #ff0000 даст Вам яркий красный, который может тогда исчезнуться путем увеличивания стоимостей G и B componenets той же суммой, таких как #ff5555 (дает более светло-красный). По-видимому, для Оттенка, Насыщенности и Легкости (HSL) цвета, можно просто повысить компонент L, но я не могу сказать наверняка; я менее знаком с этим цветовым пространством.

, Как я говорю, тем не менее, этот метод довольно сыр. От моих памятей Живого Messenger это кажется, что Вы пытаетесь сделать градиенты, которые могут быть применены действительно довольно легко в Windows Presentation Foundation (WPF, часть.NET 3.0). WPF поддерживает много различных типов градиентной кисти, включая линейные и радиальные градиенты.

я могу настоятельно рекомендовать книжный Windows Presentation Foundation Unleashed Adam Nathan как хорошее и полное введение в WPF.

HTH

118
задан dreftymac 18 June 2018 в 17:48
поделиться

3 ответа

Python в основном реализует прагматически окрашенный вариант разделения команд и запросов : мутаторы возвращают None (с прагматически индуцированными исключениями, такими как pop ;-), поэтому их нельзя спутать с аксессорами (и в том же духе присваивание не является выражением, существует разделение оператора и выражения и так далее).

Это не значит, что есть не так уж много способов объединить вещи, когда вы действительно этого хотите, например, dict (a, ** Award_dict) создает новый dict, очень похожий на тот, который вы, кажется, хотите .update - так почему бы не использовать ЭТО, если вы действительно считаете это важным?

Edit : кстати, в вашем конкретном случае нет необходимости создавать a по пути, либо:

dict(name=name, description=desc % count, points=points, parent_award=parent,
     **award_dict)

создает один dict с точно такой же семантикой, что и ваш a.update (award_dict) (включая, в случае конфликтов, тот факт, что записи в award_dict переопределяют те, которые вы ' передаете явно; чтобы получить другую семантику, т. е. чтобы явные записи "побеждали" в таких конфликтах, передайте Award_dict как единственный позиционный аргумент, перед ключевые слова и без формы ** - dict (award_dict, name = name и т. д.).

передать Award_dict в качестве единственного позиционного аргумента, перед ключевыми словами, и без формы ** - dict (Award_dict, name = name и т. д.).

передать Award_dict в качестве единственного позиционного аргумента, перед ключевыми словами, и без формы ** - dict (Award_dict, name = name и т. д.)

193
ответ дан 24 November 2019 в 01:56
поделиться

Python's API, by convention, distinguishes between procedures and functions. Functions compute new values out of their parameters (including any target object); procedures modify objects and don't return anything (i.e. they return None). So procedures have side effects, functions don't. update is a procedure, hence it doesn't return a value.

The motivation for doing it that way is that otherwise, you may get undesirable side effects. Consider

bar = foo.reverse()

If reverse (which reverses the list in-place) would also return the list, users may think that reverse returns a new list which gets assigned to bar, and never notice that foo also gets modified. By making reverse return None, they immediately recognize that bar is not the result of the reversal, and will look more close what the effect of reverse is.

35
ответ дан 24 November 2019 в 01:56
поделиться

Дело не в том, что это неприемлемо, а скорее в том, что диктовки не были реализованы таким образом.

Если вы посмотрите на ORM Django, он широко используется цепочки. Это не обескураживает, вы можете даже унаследовать от dict и только переопределить update для выполнения обновления и вернуть self , если вы действительно этого хотите.

class myDict(dict):
    def update(self, *args):
        dict.update(self, *args)
        return self
5
ответ дан 24 November 2019 в 01:56
поделиться