Предположим, у вас есть серия timedelta:
import pandas as pd
from datetime import datetime
z = pd.DataFrame({'a':[datetime.strptime('20150101', '%Y%m%d')],'b':[datetime.strptime('20140601', '%Y%m%d')]})
td_series = (z['a'] - z['b'])
. Один из способов конвертировать этот timedelta-столбец или серию - это передать его объекту Timedelta (pandas 0.15.0+), а затем извлечь дни из объект:
td_series.astype(pd.Timedelta).apply(lambda l: l.days)
Другой способ состоит в том, чтобы вывести серию как timedelta64 в днях, а затем передать ее как int:
td_series.astype('timedelta64[D]').astype(int)
Python не компилируется в том же смысле как C или C++ или даже Java, файлы Python компилируются "на лету", можно думать о нем как являющийся подобным интерпретируемому языку как Основной или Perl. 1
можно сделать что-то эквивалентное условной компиляции, просто используя если оператор. Например:
if FLAG:
def f():
print "Flag is set"
else:
def f():
print "Flag is not set"
можно сделать то же для классов создания, установки переменных и в значительной степени всего.
самый близкий способ подражать IFDEF состоял бы в том, чтобы использовать функцию hasattr. Например:
if hasattr(aModule, 'FLAG'):
# do stuff if FLAG is defined in the current module.
Вы могли также использовать пункт попытки/кроме для фиксации ошибок имени, но идиоматический путь будет состоять в том, чтобы установить переменную ни на Один наверху сценария.
Существует на самом деле способ получить условную компиляцию, но это очень ограничено.
if __debug__:
doSomething()
Эти __debug__
флаг является особым случаем. При вызове Python с -O
или -OO
опции, __debug__
будут ложью, и компилятор проигнорирует тот оператор. Это используется, прежде всего, с, утверждает, который является, почему утверждения уходят 'при реальной компиляции' сценариев с оптимизацией.
Поэтому, если Ваша цель состоит в том, чтобы добавить отладку кода, но препятствовать тому, чтобы он замедлился или иначе влиял на сборку 'выпуска', это делает то, что Вы хотите. Но Вы не можете присвоить значение __debug__
, таким образом, это обо всем, для чего можно использовать его.
Python компилирует модуль автоматически при импорте его таким образом, единственный способ постараться не компилировать его не состоит в том, чтобы импортировать его. Можно записать что-то как:
if some_condition:
import some_module
, Но это только работало бы на полные модули. В C и C++ Вы обычно используете препроцессор для условной компиляции. Нет ничего мешающего Вам использовать препроцессор на Вашем коде Python, таким образом, Вы могли записать что-то как:
#ifdef SOME_CONDITION
def some_function():
pass
#endif
Выполнение, что через препроцессор C и у Вас была бы реальная условная компиляция и some_function
, будет только определено, если SOME_CONDITION
будет определен.
, НО (и это важно): Условная компиляция, вероятно, не, что Вы хотите. Помните, что при импорте модуля Python просто выполняет код в нем. Определение и операторы класса в модуле на самом деле , выполнился , когда Вы импортируете модуль. Таким образом, типичным способом реализовать, для чего другие языки использовали бы условную компиляцию, является просто нормальное если оператор, как:
if some_condition:
def some_function():
pass
Это только определит some_function
, если some_condition
будет верно.
Это - материал как это, которое делает динамические языки настолько мощными, оставаясь концептуально простым.
Не имеет большого смысла в динамической среде. При поиске условного определения функций можно использовать if
:
if happy:
def makemehappy():
return "I'm good"