当我在终端尝试这个时
>>> (-3.66/26.32)**0.2
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: negative number cannot be raised to a fractional power
Run Code Online (Sandbox Code Playgroud)
但是,我能够通过两个步骤完成此操作,例如:
>>> (-3.66/26.32)
-0.13905775075987842
>>> -0.13905775075987842 ** 0.2
-0.6739676327771593
Run Code Online (Sandbox Code Playgroud)
为什么会这样?单线解决这个问题的方法是什么?
我dict喜欢这样的:
>>> my_dict = {u'2008': 6.57, u'2009': 4.89, u'2011': 7.74,
... u'2010': 7.44, u'2012': 7.44}
Run Code Online (Sandbox Code Playgroud)
输出has_key:
>>> my_dict.has_key(unicode(2012))
True
Run Code Online (Sandbox Code Playgroud)
输出hasattr:
>>> hasattr(my_dict, unicode(2012))
False
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么这种行为有所不同.我用Google搜索并发现它是因为dict和对象不同.
但是,我仍然无法正确理解差异.
(顺便说一句:我使用的是python 2.7)
我有这样的清单
[u'201003', u'200403', u'200803', u'200503', u'201303',
u'200903', u'200603', u'201203', u'200303', u'200703', u'201103']
Run Code Online (Sandbox Code Playgroud)
我们将此列表称为'years_list'
当我做年组时,
group_by_yrs_list = groupby(years_list, key = lambda year_month: year_month[:-2])
for k,v in group_by_yrs_list:
print k, list(v)
Run Code Online (Sandbox Code Playgroud)
我得到了所需的输出:
2010 [u'201003']
2004 [u'200403']
2008 [u'200803']
2005 [u'200503']
2013 [u'201303']
2009 [u'200903']
2006 [u'200603']
2012 [u'201203']
2003 [u'200303']
2007 [u'200703']
2011 [u'201103']
Run Code Online (Sandbox Code Playgroud)
然后,我稍微改变了我的实现,
group_by_yrs_list = dict(groupby(years_list, key = lambda year_month: year_month[:-2]))
for k,v in group_by_yrs_list.items():
print k, list(v)
Run Code Online (Sandbox Code Playgroud)
我刚刚添加了一个字典,但输出不同,
2003 []
2006 []
2007 []
2004 []
2005 []
2008 …Run Code Online (Sandbox Code Playgroud) 我们正在将Flask应用程序从基于函数的视图迁移到可插入视图,除了错误处理程序之外,所有这些都按预期工作.我试图将所有错误处理程序放在一个名为error_handlers.py的模块中,并将其导入主模块.但它没有用.尝试在谷歌搜索并按照相同的方式找到一些Git回购,但它不适合我,请帮我解决这个问题.
app
|
|__ __init__.py
|__ routing.py (which has the app=Flask(__name__) and imported error handlers here [import error_handlers])
|__ views.py
|__ error_handlers.py (Ex: @app.errorhandler(FormDataException)def form_error(error):return jsonify({'error': error.get_message()})
|__ API (api modules)
|
|
|__ __init__.py
|__ user.py
Run Code Online (Sandbox Code Playgroud)
我使用的是Python 2.6和Flask 0.10.1.
mongodb db.getCollectionNames()命令将在列表中为您提供当前数据库中所有集合名称.
我希望使用pymongo输出相同的输出.我google了一段时间,找不到那样的东西.
这样的东西存在吗?
我有一个这样的文件:
>>> k = {'finance_pl':{'S':{'2008':45,'2009':34}}}
Run Code Online (Sandbox Code Playgroud)
正常的访问方式是:
>>> k['finance_pl']['S']
{'2008': 45, '2009': 34}
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,最终用户会给我输入 finance_pl.S
我可以拆分它并像这样访问字典:
>>> doc_list = doc.split('.')
>>> k[doc_list[0]][doc_list[1]]
{'2008': 45, '2009': 34}
Run Code Online (Sandbox Code Playgroud)
但是,我不想这样做,因为字典结构可能会改变,用户可以给出类似的东西,finance_pl.new.S而不是k['finance_pl']['S']或k[doc_list[0]][doc_list[1]].
我需要直接应用用户输入的东西(例如:如果是输入finance_pl.new.S,我应该能够将此.split('.')方法应用于用户输入并直接应用).
这样做的优雅方式是什么?
我有一种情况,我需要从字符串的date_entry位置找到前一个日期date_entry,我设法做到这一点:
>>> from datetime import timedelta, datetime
>>> from time import strptime, mktime
>>> date_str = '20130723'
>>> date_ = strptime(date_str, '%Y%m%d')
>>> date_
time.struct_time(tm_year=2013, tm_mon=7, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=204,tm_isdst=-1)
>>> datetime.fromtimestamp(mktime(date_))-timedelta(days=1)
datetime.datetime(2013, 7, 22, 0, 0)
>>>
Run Code Online (Sandbox Code Playgroud)
但是,为了这个,我必须导入模块timedelta,datetime,strptime和mktime.我认为解决这个简单问题真的太过分了.
有没有更优雅的方法来解决这个问题(使用Python 2.7)?