Как упоминалось ранее firelynx, если dtype явно указано, и есть смешанные данные, которые несовместимы с этим dtype, тогда загрузка будет аварийна. Я использовал такой конвертер как обходной путь для изменения значений с несовместимым типом данных, чтобы данные все равно могли быть загружены.
def conv(val):
if not val:
return 0
try:
return np.float64(val)
except:
return np.float64(0)
df = pd.read_csv(csv_file,converters={'COL_A':conv,'COL_B':conv})
Одно большое практическое различие между методом и функцией - это то, что означает return
. return
только когда-либо возвращается из метода. Например:
scala> val f = () => { return "test" }
<console>:4: error: return outside method definition
val f = () => { return "test" }
^
Возврат из функции, определенной в методе, выполняет нелокальный возврат:
scala> def f: String = {
| val g = () => { return "test" }
| g()
| "not this"
| }
f: String
scala> f
res4: String = test
В то время как возврат из локального метода возвращается только из этого метода.
scala> def f2: String = {
| def g(): String = { return "test" }
| g()
| "is this"
| }
f2: String
scala> f2
res5: String = is this
Функции не поддерживают параметры по умолчанию. Способы делают. Преобразование из метода в функцию теряет параметры по умолчанию. (Scala 2.8.1)
function Функция может быть вызвана со списком аргументов для получения результата. Функция имеет список параметров, тело и тип результата. Функции, являющиеся членами класса, свойства или одиночного объекта, называются методами. Функции, определенные внутри других функций, называются локальными функциями. Функции с типом результата Unit называются процедурами. Анонимные функции в исходном коде называются функциональными литералами. Во время выполнения функциональные литералы создаются в объекты, называемые значениями функций.
blockquote>Программирование в Scala Second Edition. Мартин Одерски - Лекс Ложка - Билл Веннерс
Здесь есть хорошая статья , из которой взяты большинство моих описаний. Просто короткое сравнение функций и методов, касающихся моего понимания. Надеюсь, что это поможет:
Функции: Они - в основном объект. Точнее, функции - это объекты с методом apply; Поэтому они немного медленнее, чем методы из-за их накладных расходов. Это похоже на статические методы в том смысле, что они не зависят от вызываемого объекта. Простой пример функции аналогичен приведенному ниже:
val f1 = (x: Int) => x + x
f1(2) // 4
Строка выше ничего, кроме назначения одного объекта другому, как object1 = object2. На самом деле объект2 в нашем примере является анонимной функцией, и из-за этого левая сторона получает тип объекта. Следовательно, теперь f1 является объектом (Function). Анонимная функция на самом деле является экземпляром Function1 [Int, Int], что означает функцию с 1 параметром типа Int и возвращаемое значение типа Int. Вызов f1 без аргументов даст нам подпись анонимной функции (Int => Int =)
Методы: они не являются объектами, а назначаются экземпляру класса, т. Е. Объекта. Точно так же, как метод в java или функции-члене в c ++ (как Raffi Khatchadourian указал в комментарии к этот вопрос ) и т. Д. Простым примером метода является просто например:
def m1(x: Int) = x + x
m1(2) // 4
Строка выше - это не простое назначение значений, а определение метода. Когда вы вызываете этот метод со значением 2 как вторая строка, x заменяется на 2, и результат будет вычисляться, и вы получите 4 в качестве вывода. Здесь вы получите сообщение об ошибке, если просто напишите m1, потому что это метод и ему нужно значение ввода. Используя _, вы можете назначить метод функции, подобной приведенной ниже:
val f2 = m1 _ // Int => Int = <function1>
Пусть у вас есть список
scala> val x =List.range(10,20)
x: List[Int] = List(10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
Определить метод
scala> def m1(i:Int)=i+2
m1: (i: Int)Int
Определить функцию
scala> (i:Int)=>i+2
res0: Int => Int = <function1>
scala> x.map((x)=>x+2)
res2: List[Int] = List(12, 13, 14, 15, 16, 17, 18, 19, 20, 21)
Метод принятия аргумента
scala> m1(2)
res3: Int = 4
Определение функции с val
scala> val p =(i:Int)=>i+2
p: Int => Int = <function1>
Аргумент функции необязателен
scala> p(2)
res4: Int = 4
scala> p
res5: Int => Int = <function1>
Аргумент метода обязателен
scala> m1
<console>:9: error: missing arguments for method m1;
follow this method with `_' if you want to treat it as a partially applied function
Проверьте следующее Учебное пособие , в котором объясняется передача других различий примерами, например, другим примером diff с функцией Vs Function, использованием функции в качестве переменных, созданием функции, возвращающей функцию
for (a <- List(1, 2, 3)) { return ... }
? Это освобождается от закрытия. – Ben Lings 2 July 2013 в 09:53return
возвращают значение из функции и некоторую формуescape
илиbreak
илиcontinue
для возврата из методов. – Ryan The Leach 3 May 2016 в 15:58