Tag: python

是否存在pythonic“if __name__ ==”__main__“:main()”的R等价物?

目标是有两个简单的方法来源代码,说func.R,包含一个函数。 调用R CMD BATCH func.R初始化函数并评估。 在一个会话中,发布source("func.R")只是初始化函数。 任何想法?

Python Pandas:同一列的多个聚合

鉴于以下(完全矫枉过正)数据框架的例子 df = pandas.DataFrame({ "date":[datetime.date(2012,x,1) for x in range(1,11)], "returns":0.05*np.random.randn(10), "dummy":np.repeat(1,10) }) 有没有一种现有的内置方式来应用两个不同的聚合函数到同一列,而不必多次调用agg ? 语法错误,但直觉上正确的做法是: # Assume `function1` and `function2` are defined for aggregating. df.groupby("dummy").agg({"returns":function1, "returns":function2}) 显然,Python不允许重复的键。 有没有其他的方式来expression对agg ? 也许一个元组列表[(column, function)]会更好地工作,以允许多个函数应用于同一列? 但它似乎只接受字典。 除此之外,是否还有一个解决方法是定义一个辅助函数,而这个辅助函数只适用于它里面的两个函数? (这将如何与聚合无论如何?)

entry_points / console_scripts和setup.py中的脚本之间的区别?

基本上有两种方法通过setup.py将Python控制台脚本安装到我的path中: setup( … entry_points = { 'console_scripts': [ 'foo = package.module:func', ], } ) 和 setup( … scripts = [ 'scripts/myscript.sh' ] ) 有什么区别? 我看到第一种方法允许我为脚本select好的,特定的名称,但是还有其他的区别吗? 不同的原始目的,兼容性(setuptools,distutils,…?),用法,…? 我很困惑,一个精心制作的答复可以帮助我(也可能是其他人)正确理解这一切。 更新:因为我问了这个问题, PyPA 在这个话题上发表了这些很酷的文档 。

如何在Python 3.5中使用async / await?

#!/usr/bin/env python3 # -*- coding: utf-8 -*- import time async def foo(): await time.sleep(1) foo() 我不能让这个简单的例子来运行: RuntimeWarning: coroutine 'foo' was never awaited foo()

当只使用天时,“datetime.timedelta”和“dateutil.relativedelta.relativedelta”有什么区别?

datetime.timedelta (来自Python的标准库)和dateutil.relativedelta.relativedelta之间的区别是什么? 据我所知, timedelta只支持几天(和几周),而relativedelta增加了对以年,月,周或天来定义的期限的支持,并且定义了年,月或日的绝对值。 (请记住,为了这个问题的目的,我不必担心小时,分钟或秒钟) 考虑到我只使用datetime.date对象,并且只对由天数定义的时间段感兴趣, timedelta和relativedelta什么区别? 有什么区别吗? from datetime import date, timedelta from dateutil.relativedelta import relativedelta i = -1 # This could have been any integer, positive or negative someday = date.today() # Is there any difference between these two lines? otherday = someday + timedelta(days=i) otherday = someday + relativedelta(days=i)

什么用户将Ansible运行我的命令?

背景 我的问题似乎很简单,但它变得非常复杂。 基本上,我真的很厌倦了手动维护我的服务器(尖叫在后台) ,我决定是时候find一种方法,使服务器pipe理员更宜居。 那时候我find了Ansible。 很棒吧? 当然,我打算让自动化的东西制作bash脚本(大声尖叫) 。 有什么问题? 我有很多的麻烦,搞清楚我的个人剧本会运行什么东西。 我也需要能够指定哪些用户将运行特定的任务。 以下是一些具体的用例: 克隆回购作为另一个用户: 我的目的是,它运行我的node.js webapp从另一个用户,我们会叫bill (这只能使用sudo来运行我启动节点服务器的脚本,而不是根或我的用户,可以所有命令都使用sudo)。 要做到这一点,我需要能够让Ansible的git模块克隆我的git回购账单 。 我该怎么做? 了解Ansible将如何获得根源: 据我所知,你可以设置什么用户Ansible将连接到你正在维护的服务器,通过定义“用户”和剧本文件的开始。 下面是我不明白的:如果我通过我的用户名joe告诉它,并通过apt模块更新一个包,它将如何获得root权限? Sudo通常会提示我input密码,我宁愿保持这种状态(为了安全起见)。 最后的要求 我已经search了Ansible文档,做了一些(我认为是彻底的)search,一般只是试图找出自己的,但这些信息继续排除我。 对Ansible来说,我是一个非常新的人物,虽然这很简单,但是如果我能够明确地理解运行的用户,运行的用户以及我可以在不同的时间指定用户的方式,我将会受益匪浅。 提前谢谢你

有效的内存替代Python字典

在我目前的一个项目中,我正在阅读一些文字,看三字组的频率。 在我第一次使用它的时候,我使用了三层深度的默认字典。 换句话说, topDict[word1][word2][word3]返回这些单词在文本中出现的次数, topDict[word1][word2]返回一个字典,其中所有单词出现在单词1和2之后。 这function正常,但它是非常内存密集型的。 在我最初的testing中,它使用了像存储三元组的文本文件20倍的内存,这似乎是一个过多的内存开销。 我的怀疑是,这些字典中的许多字段的创build数量比实际使用的字段多,所以我想用这种方式replace字典中更有记忆效率的其他字典。 我强烈希望有一个解决scheme,允许沿着字典的关键查找。 从我所了解的数据结构来看,使用类似红黑或AVL的平衡二叉search树可能是理想的,但我真的不希望自己实现它们。 如果可能的话,我宁愿坚持使用标准的Python库,但如果他们能够最好地工作,我绝对可以接受其他的select。 那么,有没有人对我有任何build议? 编辑添加: 感谢迄今的回应。 到目前为止,答案中的一些已经build议使用元组,当我将前两个单词压缩成元组时,这些元组并没有太多的用处。 我不愿意把这三个字作为一个关键字,因为我希望能够容易地查看前两个字的所有第三个字。 (即我想要的东西像topDict[word1, word2].keys() )的结果。 我正在玩的当前数据集是维基百科学校的最新版本。 例如,parsing第一千页的结果对于文本文件是11MB,其中每行是三个词并且所有的tab都是分开的。 以字典格式存储文本我现在使用大约185MB。 我知道指针和额外的开销会有一些额外的开销,但差异似乎过大。

Python中的assertAlmostEqual对浮点数集合进行unit testing

Python的unit testing框架中的assertAlmostEqual(x,y)方法testingx和y是否大致相等,假设它们是浮点数。 assertAlmostEqual()的问题是它只能在浮点数上运行。 我正在寻找像assertAlmostEqual()这样的方法,它在浮点,浮点集,浮点字典,浮点元组,浮点元组列表,浮点列表集合等列表上工作。 例如,令x = 0.1234567890 , y = 0.1234567891 。 x和y几乎相等,因为除了最后一个数字外,他们都同意每个数字。 因此, self.assertAlmostEqual(x, y)是True因为assertAlmostEqual()适用于浮点数。 我正在寻找一个更通用的assertAlmostEquals() ,也评估以下调用True : self.assertAlmostEqual_generic([x, x, x], [y, y, y]) 。 self.assertAlmostEqual_generic({1: x, 2: x, 3: x}, {1: y, 2: y, 3: y}) 。 self.assertAlmostEqual_generic([(x,x)], [(y,y)]) 。 有没有这样的方法,还是我自己要实现呢? 澄清: assertAlmostEquals()有一个名为places的可选参数,通过计算舍入到小数位数的差值来比较数字。 默认情况下, places=7 ,因此self.assertAlmostEqual(0.5, 0.4)为False,而self.assertAlmostEqual(0.12345678, 0.12345679)为True。 我推测assertAlmostEqual_generic()应该有相同的function。 如果两个列表中的数字完全相同,则认为它们几乎相等。 正式地, for i […]

你如何获得在模块中定义的所有类,但没有导入?

我已经看到了下面的问题,但是它并没有让我想到我想要的地方: 我如何获得Python中当前模块中的所有类的列表? 特别是,我不想要导入的类,例如,如果我有以下模块: from my.namespace import MyBaseClass from somewhere.else import SomeOtherClass class NewClass(MyBaseClass): pass class AnotherClass(MyBaseClass): pass class YetAnotherClass(MyBaseClass): pass 如果我使用clsmembers = inspect.getmembers(sys.modules[__name__], inspect.isclass)就像链接问题中的接受答案所示,除了在此模块中定义的3之外,它还会返回MyBaseClass和SomeOtherClass 。 我怎样才能得到NewClass , AnotherClass和YetAnotherClass ?

在包装函数之前,我可以修补Python装饰器吗?

我有一个装饰器的function,我试图在Python 模拟库的帮助下进行testing。 我想使用mock.patch来replace真正的装饰器,只是调用函数的模拟“旁路”装饰器。 我无法弄清楚的是如何在真正的装饰器封装函数之前应用这个补丁。 我已经尝试了修补程序目标上的一些不同的变体,并重新sorting修补程序和导入语句,但没有成功。 有任何想法吗?