Что так плохо о касательно параметров?

Эта функция только что добавлена ​​в недавнюю версию Seaborn 0.7.1.

Из История обновлений Seaborn :

] Параметр annot heatmap () теперь принимает прямоугольный набор данных в дополнение к булевскому значению. Если передается набор данных, его значения будут использоваться для аннотаций, тогда как основной набор данных будет использоваться для цветов ячейки тепловой карты

blockquote> blockquote>

. Вот пример

data = np.array([[0.000000,0.000000],[-0.231049,0.000000],[-0.231049,0.000000]])
labels =  np.array([['A','B'],['C','D'],['E','F']])
fig, ax = plt.subplots()
ax = sns.heatmap(data, annot = labels, fmt = '')

Примечание: fmt = '' необходимо, если вы используете нечисловые метки, поскольку значение по умолчанию - fmt = '. 2g', что имеет смысл только для числовых значений и приведет к ошибке для текстовых меток ,

14
задан Jonathan C Dickinson 20 February 2009 в 19:32
поделиться

11 ответов

Можно ли добавить перегрузку? Имейте одну подпись без касательно параметра, и один с ним.

Касательно параметров может быть полезным, и я рад, что они существуют в C#, но они не должны использоваться без мысли. Часто, если бы метод эффективно возвращает два значения, он должен был бы лучше или разделить метод на две части или инкапсулировать оба значения в единственном типе. Ни одно из этих покрытий каждый случай, хотя - существуют определенно времена, когда ref наилучший вариант.

28
ответ дан 1 December 2019 в 06:05
поделиться

Возможно, используйте перегруженная функция для этого 5%-й случай и оставьте другую функцию, как.

Ненужный касательно параметров может привести к плохим шаблонам разработки, но если у Вас есть определенная потребность, существует без проблем с выполнением этого.

13
ответ дан 1 December 2019 в 06:05
поделиться

Если Вы берете Платформу.NET в качестве барометра ожиданий людей API, полагаете, что почти все Строковые методы возвращают измененное значение , но оставляют передаваемый аргумент без изменений. Строка. Обрезка (), например, возвращает обрезанную Строку - она не обрезает Строку, которая была передана в как аргумент.

Теперь, очевидно, это только выполнимо, если Вы готовы поместить возвращаемые значения в свой API. Кроме того, если Ваша функция уже возвращает значение, Вы сталкиваетесь с противной возможностью создания пользовательской структуры, которая содержит Ваше исходное возвращаемое значение, а также недавно измененный объект.

В конечном счете, Вам решать и как Вы документируете свой API. Я нашел, по моему опыту, хотя тот мой товарищ программисты склонен ожидать, что мои функции будут действовать "как функции Платформы.NET". :)

5
ответ дан 1 December 2019 в 06:05
поделиться

ref параметр не вызовет проблемы по сути. Это - зарегистрированная функция языка.

Однако это могло вызвать социальные проблемы. А именно, клиенты Вашего API не могли бы ожидать ref параметр просто, потому что это редко. Вы могли бы изменить ссылку, которую не ожидает клиент.

, Конечно, можно утверждать, что это - отказ клиента для того, чтобы не считать спецификацию API, и это было бы верно. Но иногда лучше уменьшать удивление. Написание хорошего кода примерно не следует правилам и документирует материал, это также о создании чего-то естественно очевидно для пользователя - человека.

4
ответ дан 1 December 2019 в 06:05
поделиться

Перегрузка не уничтожит Ваше приложение или его дизайн. Пока намерение ясно документируется, это должно быть хорошо.

Одна вещь, которую можно было бы рассмотреть, смягчает Ваши страхи о ref параметр через другое тип параметра. Например, рассмотрите это:

public class SaveArgs
{
   public SaveArgs(TEntity value) { this.Value = value; }

   public TEntity Value { get; private set;}
   public int NewId { get; internal set; }
   public bool NewIdGenerated { get; internal set; } 
}

В Вашем коде, Вы просто передаете SaveArgs, а не TEntity, так, чтобы можно было изменить его свойства с большей значимой информацией. (Естественно, это был бы лучше разработанный класс, чем, что я имею выше.), Но затем Вы не должны были бы волноваться о неопределенных интерфейсах метода, и Вы могли возвратить столько данных, сколько Вы должны были в подробном классе.

Просто мысль.

РЕДАКТИРОВАНИЕ: Зафиксированный код. Мое плохое.

2
ответ дан 1 December 2019 в 06:05
поделиться

Самая большая проблема, с которой я имею касательно параметров, они мешают использовать вывод типа, поскольку необходимо иногда явно объявлять тип переменной, используемой в качестве касательно параметра.

Большую часть времени я использую касательно параметра, это находится в сценарии TryGet. В целом я прекратил использовать ref's в том сценарии и вместо этого выбрал использование более функционального метода стиля посредством опции.

, Например. TryGetValue в словаре переключается от

bool TryGetValue(TKey key, out TValue value)

К

Option<Value> TryGetValue(TKey key)

Опция, доступная здесь: http://blogs.msdn.com/jaredpar/archive/2008/10/08/functional-c-providing-an-option-part-2.aspx

1
ответ дан 1 December 2019 в 06:05
поделиться

Нет ничего неправильно с использованием касательно параметров, о которых я могу думать, на самом деле они могут иногда быть очень удобными. Я думаю, что они иногда получают плохой рэп из-за отладки, так как значение переменной может измениться в логике кода и может иногда быть твердо отследить. Это также делает вещи трудными при преобразовании в вещи как WebServices, куда "значение" только передает, будет достаточен.

1
ответ дан 1 December 2019 в 06:05
поделиться

Если для Вашего метода только нужно это касательно параметра 5% времени, возможно, необходимо сломать этот метод. Конечно, без большего количества деталей его твердое, чтобы сказать, но это мне пахнет как случай нарушением единственного принципала ответственности. Возможно, перегрузка его поможет.

Что касается Вашего вопроса нет никакой проблемы, по-моему, передающей параметр как ссылка, хотя это не общая вещь столкнуться.

0
ответ дан 1 December 2019 в 06:05
поделиться

Наиболее популярный способ использования, который я видел касательно параметров, как способ возвратить несколько значений. Если это так, необходимо рассмотреть создание класса или структуры, которая возвращает все значения как один объект. Если Вы все еще хотите использовать касательно, но хотеть сделать это дополнительным, добавьте функциональную перегрузку.

1
ответ дан 1 December 2019 в 06:05
поделиться

Это - одна из тех вещей, которые F# или другие языки функционального программирования решают намного лучше с возвращением значений Кортежа. Это - намного больше более чистого и краткого синтаксиса. В книге я читаю на F#, она на самом деле указывает на C# equivelant использования касательно как выполнение того же самого в C# для возврата нескольких параметров.

я понятия не имею, является ли это плохая практика или существуют некоторые лежащие в основе "booga booga" о касательно параметров, мне они просто чувствуют как не чистый синтаксис.

0
ответ дан 1 December 2019 в 06:05
поделиться

Возвращающая пустоту функция с единственным параметром ссылки, конечно, выглядит забавной мне. Если бы я рассматривал этот код, то я предложил бы осуществить рефакторинг BeforeSave () для включения вызова в Репозиторий. Сохраните () - переименование его, очевидно. Почему не только имеют один метод, который берет Ваш возможно новый объект и гарантирует, что все сохраняется правильно? Вызывающая сторона ничего не делает с возвращенным объектом так или иначе.

0
ответ дан 1 December 2019 в 06:05
поделиться
Другие вопросы по тегам:

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