小编Bac*_*ach的帖子

找到两个日期之间的月份的最佳方法

我需要能够准确地找到python中两个日期之间的月份.我有一个解决方案,但它不是很好(如优雅)或快速.

dateRange = [datetime.strptime(dateRanges[0], "%Y-%m-%d"), datetime.strptime(dateRanges[1], "%Y-%m-%d")]
months = [] 

tmpTime = dateRange[0]
oneWeek = timedelta(weeks=1)
tmpTime = tmpTime.replace(day=1)
dateRange[0] = tmpTime
dateRange[1] = dateRange[1].replace(day=1)
lastMonth = tmpTime.month
months.append(tmpTime)
while tmpTime < dateRange[1]:
    if lastMonth != 12:
        while tmpTime.month <= lastMonth:
            tmpTime += oneWeek
        tmpTime = tmpTime.replace(day=1)
        months.append(tmpTime)
        lastMonth = tmpTime.month

    else:
        while tmpTime.month >= lastMonth:
            tmpTime += oneWeek
        tmpTime = tmpTime.replace(day=1)
        months.append(tmpTime)
        lastMonth = tmpTime.month
Run Code Online (Sandbox Code Playgroud)

所以只是为了解释一下,我在这里做的是将两个日期转换为iso格式转换为python datetime对象.然后我循环通过在开始日期时间对象中添加一周,并检查月份的数值是否更大(除非月份是12月,然后检查日期是否更少),如果值更大,我将其附加到列表几个月,并一直循环,直到我到达我的结束日期.

它完美地工作它似乎不是一个好方法...

python datetime monthcalendar date-math

81
推荐指数
12
解决办法
10万
查看次数

在迭代它时修改Python字典

假设我们有一个Python字典d,我们就像这样迭代它:

for k,v in d.iteritems():
    del d[f(k)] # remove some item
    d[g(k)] = v # add a new item
Run Code Online (Sandbox Code Playgroud)

(f并且g只是一些黑盒转换.)

换句话说,我们尝试添加/删除项目,d同时使用迭代它iteritems.

这个定义得很好吗?你能提供一些参考来支持你的答案吗?

(如果它被破坏了,如何解决这个问题非常明显,所以这不是我追求的角度.)

python dictionary

75
推荐指数
5
解决办法
6万
查看次数

具有float类型的步长的范围

文档基本上说range必须完全像这个实现一样(对于正面step):

def range(start, stop, step):
  x = start
  while True:
    if x >= stop: return
    yield x
    x += step
Run Code Online (Sandbox Code Playgroud)

它还说它的论点必须是整数.这是为什么?如果step是float,那么这个定义也不是完全有效吗?

就我而言,我是特别的.需要一个range接受float类型作为step参数的函数.在Python中有没有,或者我需要实现自己的?


更具体一点:我如何以一种很好的方式将这个C代码直接翻译成Python(即不仅仅是通过while-loop手动完成):

for(float x = 0; x < 10; x += 0.5f) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

python range

47
推荐指数
5
解决办法
11万
查看次数

关于更改不可变字符串的id

关于id类型对象的某些东西str(在python 2.7中)让我很困惑.该str类型是不变的,所以我希望,一旦它被创建,它将始终具有相同的id.我相信我不会这么说自己,所以我会发布一个输入和输出序列的例子.

>>> id('so')
140614155123888
>>> id('so')
140614155123848
>>> id('so')
140614155123808
Run Code Online (Sandbox Code Playgroud)

所以同时,它一直在变化.但是,在指向该字符串的变量之后,事情会发生变化:

>>> so = 'so'
>>> id('so')
140614155123728
>>> so = 'so'
>>> id(so)
140614155123728
>>> not_so = 'so'
>>> id(not_so)
140614155123728
Run Code Online (Sandbox Code Playgroud)

因此,一旦变量保存该值,它就会冻结id.的确,在del so和之后del not_so,id('so')开始的输出再次改变.

这是相同的行为与(小)整数.

我知道不变性和拥有相同之间没有真正的联系id; 仍然,我试图弄清楚这种行为的来源.我相信那些熟悉python内部的人会比我更少惊讶,所以我试图达到同样的目的......

更新

尝试使用不同的字符串会产生不同的结果......

>>> id('hello')
139978087896384
>>> id('hello')
139978087896384
>>> id('hello')
139978087896384
Run Code Online (Sandbox Code Playgroud)

现在它平等的......

python string immutability python-internals

43
推荐指数
1
解决办法
6851
查看次数

from ... import或import ...对于模块

我应该用吗?

from foo import bar
Run Code Online (Sandbox Code Playgroud)

要么

import foo.bar as bar
Run Code Online (Sandbox Code Playgroud)

导入模块,并和有改变名字没有必要/愿望(bar)?

有什么不同吗?有关系吗?

python import module

42
推荐指数
5
解决办法
4万
查看次数

有什么直接的方法可以通过python从markdown文件生成pdf

作为标题,我想使用markdown作为我的主要写入格式,我需要使用纯python从markdown生成PDF文件.

python markdown pdf-generation

25
推荐指数
2
解决办法
2万
查看次数

Python复杂性参考?

是否有任何Python复杂性参考?例如,在cppreference中,对于许多函数(例如std :: array :: sizestd :: array :: fill),有一个复杂性部分,用容器大小的线性常量来描述它们的运行复杂性..

我希望在python网站上出现相同的信息,或许至少对于CPython实现.例如,在列表引用中,list.insert我希望看到复杂性:线性 ; 我知道这种情况(和许多其他容器相关的操作)在这里,但许多其他情况不是.这里有一些例子:

  • 什么是复杂性tuple.__le__?似乎在比较两个大小的元组时n,k复杂性是关于O(min(n,k))(然而,对于小n的它看起来不同).
  • 什么是复杂性random.shuffle?它似乎是O(n).它也出现了复杂random.randintO(1).
  • __format__字符串方法的复杂性是什么?它看起来与输入字符串的大小呈线性关系; 然而,当数也增长有关生长参数(比较("{0}"*100000).format(*(("abc",)*100000))("{}"*100000).format(*(("abc",)*100000))).

我知道(a)这些问题中的每一个都可以单独回答,(b)可以查看这些模块的代码(即使有些是用C语言编写的),(c)StackExchange不是python邮件用户请求列表.所以:这不是文档功能请求,只是两个部分的问题:

  1. 你知道这样的资源是否存在吗?
  2. 如果没有,你知道要求的地方是什么,或者你能说出我不需要的地方吗?

python time-complexity

25
推荐指数
1
解决办法
800
查看次数

渲染图像

所以这应该很简单,但我不能让它工作.

我有一个基于查询查找图像的控制器方法,然后输出被缓存.图像可能是远程的(flickr,谷歌图像等),也可能是本地的.无论来源如何,我只需要获取图像文件内容,并将其传递给用户.从本质上讲,代理.通过远程图像似乎工作正常,但通过本地图像给我一个:

invalid byte sequence in UTF-8
Run Code Online (Sandbox Code Playgroud)

所以这就是我得到的.我希望有人能用我的代码解决问题或指导我更好的方向.

def image_proxy
  query = params[:query]
  image_url = get_image_url(query) # returns an absolute local file path or a URL

  response.headers['Cache-Control'] = "public, max-age=#{12.hours.to_i}"
  response.headers['Content-Type'] = 'image/jpeg'
  response.headers['Content-Disposition'] = 'inline'
  render :text => open(image_url).read
end
Run Code Online (Sandbox Code Playgroud)

远程文件工作正常,本地文件不工作.

任何可以帮助解决这个问题的人都可以获得奖励:

  1. 我需要设置正确的内容类型.远程图像网址不告诉我图像类型,我只是得到一个网址,有时网址不包含扩展名.所以我选择了jpeg,因为无论发送给我的图像类型如何,它似乎都有效.

谢谢!

proxy ruby-on-rails image

24
推荐指数
2
解决办法
2万
查看次数

std :: thread <未解析的重载函数类型>错误

我试图从我的类中生成一个线程,并且该线程在我的类中执行一个特定的方法.代码如下所示:

class ThreadClass{
    int myThread(int arg){
     // do something
    }

    void createThread(){
        thread t = thread(myThread,10);
    }

} ;
Run Code Online (Sandbox Code Playgroud)

编译时的这段代码会引发错误说法

std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = int (ThreadClass::*)(int), _Args = {int}]
no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘int (ThreadClass::*&&)(int)’
Run Code Online (Sandbox Code Playgroud)

我不确定这里的实际错误是什么.有人可以帮我弄这个吗?

谢谢.

c++ multithreading std c++11 stdthread

21
推荐指数
1
解决办法
1万
查看次数

原生无限范围?

python是否具有无限整数系列的本机可迭代?

我试过range(float('inf'))iter(int),但既不工作.

我显然可以实现自己的发电机

def int_series(next=1):
    while True:
        next += 1
        yield next
Run Code Online (Sandbox Code Playgroud)

但这感觉就像应该存在的东西.

python

21
推荐指数
2
解决办法
5820
查看次数