我需要能够准确地找到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字典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.
这个定义得很好吗?你能提供一些参考来支持你的答案吗?
(如果它被破坏了,如何解决这个问题非常明显,所以这不是我追求的角度.)
文档基本上说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) 关于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)
现在它是平等的......
我应该用吗?
from foo import bar
Run Code Online (Sandbox Code Playgroud)
要么
import foo.bar as bar
Run Code Online (Sandbox Code Playgroud)
当导入模块,并和有改变名字没有必要/愿望(bar)?
有什么不同吗?有关系吗?
作为标题,我想使用markdown作为我的主要写入格式,我需要使用纯python从markdown生成PDF文件.
是否有任何Python复杂性参考?例如,在cppreference中,对于许多函数(例如std :: array :: size或std :: array :: fill),有一个复杂性部分,用容器大小的线性或常量来描述它们的运行复杂性..
我希望在python网站上出现相同的信息,或许至少对于CPython实现.例如,在列表引用中,list.insert我希望看到复杂性:线性 ; 我知道这种情况(和许多其他容器相关的操作)在这里,但许多其他情况不是.这里有一些例子:
tuple.__le__?似乎在比较两个大小的元组时n,k复杂性是关于O(min(n,k))(然而,对于小n的它看起来不同).random.shuffle?它似乎是O(n).它也出现了复杂random.randint的O(1).__format__字符串方法的复杂性是什么?它看起来与输入字符串的大小呈线性关系; 然而,当数也增长有关生长参数(比较("{0}"*100000).format(*(("abc",)*100000))用("{}"*100000).format(*(("abc",)*100000))).我知道(a)这些问题中的每一个都可以单独回答,(b)可以查看这些模块的代码(即使有些是用C语言编写的),(c)StackExchange不是python邮件用户请求列表.所以:这不是文档功能请求,只是两个部分的问题:
所以这应该很简单,但我不能让它工作.
我有一个基于查询查找图像的控制器方法,然后输出被缓存.图像可能是远程的(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)
远程文件工作正常,本地文件不工作.
任何可以帮助解决这个问题的人都可以获得奖励:
谢谢!
我试图从我的类中生成一个线程,并且该线程在我的类中执行一个特定的方法.代码如下所示:
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)
我不确定这里的实际错误是什么.有人可以帮我弄这个吗?
谢谢.
python是否具有无限整数系列的本机可迭代?
我试过range(float('inf'))和iter(int),但既不工作.
我显然可以实现自己的发电机
def int_series(next=1):
while True:
next += 1
yield next
Run Code Online (Sandbox Code Playgroud)
但这感觉就像应该存在的东西.