Вы написали print
с большой буквы P, также лучше использовать return
в такой функции, чем печатать в ней.
def celcius(f):
return (f-32)*5/9
f=int(input("Enter a temperature in Farenheit "))
print celcius(f)
Кроме того, я сделал ваш CamelCase
более питоническим. Лучше придерживаться языковых стандартов, особенно если вы новичок.
С технической точки зрения другие ответы обратились к различиям.
С точки зрения семантики, события являются действиями, повышенными объектом, когда определенные условия соблюдены. Например, мой класс Stock имеет свойство под названием Предел, и это генерирует событие, когда курсы акций достигают Предела. Это уведомление сделано через событие. Заботится ли кто-либо на самом деле об этом событии и подписывается на него, вне беспокойства класса владельца.
делегат А является большим количеством общего обозначения для описания конструкции, подобной указателю в терминах C/C++. Все делегаты в .NET являются многоадресными делегатами. С точки зрения семантики они обычно используются как своего рода вход. В частности, они - лучший способ реализовать Стратегическая модель . Например, если я хочу отсортировать Список объектов, я могу предоставить стратегию Компаратора методу для сообщения реализации, как сравнить два объекта.
я использовал эти два метода в производственном коде. Тонны моих объектов данных уведомляют, когда определенные свойства встречены. Самый основной пример, каждый раз, когда свойство изменяется, событие PropertyChanged, повышен (см. интерфейс INotifyPropertyChanged). Я использовал делегатов в коде для обеспечения различных стратегий превращения определенных объектов в строку. Этим конкретным примером был прославленный ToString () список реализаций для конкретного типа объекта для отображения его пользователям.
Ключевое слово event
является модификатором объема для многоадресных делегатов. Практические различия между этим и просто объявлением многоадресного делегата следующие:
event
в интерфейсе. public event
). Как интерес, можно подать заявку +
и -
к многоадресным делегатам, и это - основание +=
и -=
синтаксис для присвоения комбинации делегатов в событиях. Эти три отрывка эквивалентны:
B = new EventHandler(this.MethodB);
C = new EventHandler(this.MethodC);
A = B + C;
Демонстрационные два, иллюстрируя и прямое присвоение и присвоение комбинации.
B = new EventHandler(this.MethodB);
C = new EventHandler(this.MethodC);
A = B;
A += C;
Демонстрационные три: более знакомый синтаксис. Вы, вероятно, познакомились с присвоением пустого указателя для удаления всех обработчиков.
B = new EventHandler(this.MethodB);
C = new EventHandler(this.MethodC);
A = null;
A += B;
A += C;
свойства Like, события имеют полный синтаксис, который никто никогда не использует. Это:
class myExample
{
internal EventHandler eh;
public event EventHandler OnSubmit
{
add
{
eh = Delegate.Combine(eh, value) as EventHandler;
}
remove
{
eh = Delegate.Remove(eh, value) as EventHandler;
}
}
...
}
... делает точно то же как это:
class myExample
{
public event EventHandler OnSubmit;
}
добавление и удаляет методы, более заметны в довольно неестественном синтаксисе что использование VB.NET (никакие перегрузки оператора).
События являются синтаксическим сахаром. Они восхитительны. Когда я вижу событие, я знаю, что сделать. Когда я вижу делегата, я не так уверен.
Объединяющиеся события с интерфейсами (больше сахара) делает для закуски полива рта. Делегаты и чистые виртуальные абстрактные классы являются намного менее аппетитными.
События отмечены как таковые в метаданных. Это позволяет вещам как Windows Forms или разработчики ASP.NET отличать события от простых свойств типа делегата и оказывать соответствующую поддержку для них (конкретно показ их на вкладке Events Окна свойств).
Другое различие от свойства типа делегата - то, что пользователи могут только добавить и удалить обработчики событий, тогда как со свойством делегата вводят, они могут установить значение:
someObj.SomeCallback = MyCallback; // okay, replaces any existing callback
someObj.SomeEvent = MyHandler; // not okay, must use += instead
Это помогает изолировать подписчиков события: Я могу добавить свой обработчик к событию, и можно добавить обработчик к тому же событию, и Вы случайно не перезапишете мой обработчик.
Edit#1 , Когда Вы использовали бы делегатов по событиям и vs.versa? Заявите свой опыт реального мира с обоими, скажите в производственном коде.
, Когда я разрабатываю свои собственные API, я определяю делегатов, которые передаются как параметры методам, или конструкторам классов:
Predicate
и Action
делегаты передаются классам универсального набора .NET) Эти делегаты обычно обязательные во времени выполнения (т.е. не должен быть null
).
я склонен не использовать события; но где я действительно использую события, я использую их для [1 114] дополнительно события сигнализации к [1 115] нуль, один, или больше клиенты, которые могли бы быть интересно, т.е. когда он имеет смысл, что класс (например, System.Windows.Form
класс) должен существовать и работать, добавил ли какой-либо клиент обработчик событий к его событию (например, 'мышь формы вниз' событие существует, но это дополнительное , интересуется ли любой внешний клиент установкой обработчика событий на то событие).
Хотя у меня нет технических причин его, я использую события в коде стиля UI, другими словами, в более высоких уровнях кода, и использую делегатов к логике, которая кладет глубже в коде. Поскольку я говорю, что Вы могли использовать также, но я нахожу, что этот шаблон использования является логически звуковым, если ничто иное, он помогает зарегистрировать типы обратных вызовов и их иерархии также.
<час>Редактирование: Я думаю различие в шаблонах использования, которые я имею, был бы то, что, я нахожу совершенно приемлемым проигнорировать события, они - рычаги/тупики, если необходимо знать о событии, слушать их, если Вы не заботитесь о событии, просто игнорируют его. Вот почему я использую их для UI, kindof стиль события Javascript/Browser. Однако, когда у меня есть делегат, я ожидаю, ДЕЙСТВИТЕЛЬНО ожидают, что кто-то справится с задачей делегата и выдаст исключение если не обработанный.