После возни я получил следующий код, основанный на официальном примере кода более десяти лет назад здесь
, поэтому я изменил код рекурсивного сложения так, чтобы он выглядел следующим образом
import stackless
def call_wrapper(f, args, kwargs, result_ch):
result_ch.send(f(*args, **kwargs))
def call(f, *args, **kwargs):
result_ch = stackless.channel()
stackless.tasklet(call_wrapper)(f, args, kwargs, result_ch)
return result_ch.receive()
def rec_add(n):
if n <= 1:
return 1
return n + call(rec_add, n-1)
print(rec_add(1000000))
Он работает с большим числом, например 1 000 000, я думаю, это своего рода косвенная рекурсия, поскольку функция вызывает другую функцию, которая запускает тасклет, который вызывает саму функцию (или что-то в этом роде).
Теперь мне интересно, действительно ли это предполагаемый способ реализации бесконечной рекурсии в Stackless Python или есть более прямые / прямые способы сделать это? Спасибо.
from datetime import datetime
fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 17:31:22', fmt)
print (d2-d1).days * 24 * 60
При попытке найти различие между метками времени, которые находятся в столбцах панд, ответ довольно прост. При необходимости в нем в течение многих дней или секунд затем
# For difference in days:
df['diff_in_days']=(df['timestamp2'] - df['timestamp1']).dt.days
# For difference in seconds
df['diff_in_seconds']=(df['timestamp2'] - df['timestamp1']).dt.seconds
Теперь, минута хитра как dt.minute работы только над datetime64 [не уточнено] dtype., тогда как столбец, сгенерированный от вычитания двух datetimes, имеет формат
AttributeError: 'TimedeltaProperties' object has no attribute 'm8'
Так как упомянутый многими выше для получения фактического значения различия в минуту, которую необходимо сделать:
df['diff_in_min']=df['diff_in_seconds']/60
, Но если просто хотят различие между мелкими частями двух меток времени затем, делают следующий
#convert the timedelta to datetime and then extract minute
df['diff_in_min']=(pd.to_datetime(df['timestamp2']-df['timestamp1'])).dt.minute
, можно также прочитать статью https://docs.python.org/3.4/library/datetime.html и видеть раздел 8.1.2, Вы будете видеть, что атрибуты "только для чтения" являются только секундами, днями и миллисекундами. И это обосновывается, почему мелкая функция не работает непосредственно.
Как уже было сказано, вам нужно использовать метод datetime.datetime's
strptime
:
from datetime import datetime
fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 17:31:22', fmt)
daysDiff = (d2-d1).days
# convert days to minutes
minutesDiff = daysDiff * 24 * 60
print minutesDiff
Используйте datetime.strptime()
для разбора в экземплярах времени, затем вычислите разницу, и, наконец, преобразуйте разницу в минуты.