小编cod*_*ape的帖子

导入内部函数是pythonic吗?

PEP 8说:

  • 导入总是放在文件的顶部,就在任何模块注释和文档字符串之后,以及模块全局变量和常量之前.

在发生时,我违反了PEP 8.有时我会在函数中导入内容.作为一般规则,如果导入仅在单个函数中使用,则执行此操作.

任何意见?

编辑(我觉得导入函数的原因可能是一个好主意):

主要原因:它可以使代码更清晰.

  • 在查看函数的代码时,我可能会问自己:"什么是函数/类xxx?" (在函数内部使用xxx).如果我在模块的顶部有我的所有导入,我必须去那里查看xxx是什么.这在使用时更是一个问题from m import xxx.看到m.xxx这个功能可能会告诉我更多.具体取决于m:它是一个众所周知的顶级模块/包(import m)吗?或者它是一个子模块/包(from a.b.c import m)?
  • 在某些情况下,使用接近使用xxx的额外信息("什么是xxx?")可以使函数更容易理解.

python conventions

112
推荐指数
8
解决办法
4万
查看次数

用Python解析SQL

我想在非关系数据存储之上创建一个SQL接口.非关系数据存储,但以关系方式访问数据是有意义的.

我正在研究使用ANTLR生成一个AST,它将SQL表示为关系代数表达式.然后通过评估/遍历树来返回数据.

我之前从未实现过解析器,因此我想就如何最好地实现SQL解析器和求值程序提出一些建议.

  • 上述方法听起来不错吗?
  • 我应该研究其他工具/库吗?像PLYPyparsing.
  • 指向可以帮助我的文章,书籍或源代码的指标表示赞赏.

更新:

我使用pyparsing实现了一个简单的SQL解析器.结合对我的数据存储实现关系操作的Python代码,这非常简单.

正如我在其中一条评论中所说,演习的重点是将数据提供给报告引擎.为此,我可能需要实现ODBC驱动程序.这可能是很多工作.

python sql parsing pyparsing

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

使用twitter bootstrap禁用下拉菜单项

我使用标记来使用Twitter Bootstrap显示下拉菜单.

<ul class="nav pull-right">
    <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Menu <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="#">Menu item 1...</a></li>
            <li class="divider"></li>
            <li><a href="#">Menu item 2...</a></li>
            <li><a href="#">Menu item 3</a></li>
        </ul>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我希望能够使菜单项显示为禁用,即没有悬停效果,可能还有不同的文本修饰,以使用户可以看到禁用状态.

完成此任务的最佳方法是什么?是否有一个现有的bootstrap css类我可以添加到<li>or <a>元素?

css twitter-bootstrap

34
推荐指数
5
解决办法
7万
查看次数

py.test如何以及在哪里找到固定装置

py.test在哪里以​​及如何寻找灯具?我在同一文件夹中的2个文件中有相同的代码.当我删除conftest.py时,找不到运行test_conf.py的cmdopt(也在同一个文件夹中.为什么没有搜索到sonoftest.py?

# content of test_sample.py
def test_answer(cmdopt):
    if cmdopt == "type1":
        print ("first")
    elif cmdopt == "type2":
        print ("second")
    assert 0 # to see what was printed
Run Code Online (Sandbox Code Playgroud)

conftest.py的内容

import pytest

def pytest_addoption(parser):
    parser.addoption("--cmdopt", action="store", default="type1",
        help="my option: type1 or type2")

@pytest.fixture
def cmdopt(request):
    return request.config.getoption("--cmdopt")
Run Code Online (Sandbox Code Playgroud)

sonoftest.py的内容

import pytest

def pytest_addoption(parser):
    parser.addoption("--cmdopt", action="store", default="type1",
        help="my option: type1 or type2")

@pytest.fixture
def cmdopt(request):
    return request.config.getoption("--cmdopt")
Run Code Online (Sandbox Code Playgroud)

文档说

http://pytest.org/latest/fixture.html#fixture-function

  1. pytest因test_前缀而找到test_ehlo.测试函数需要一个名为smtp的函数参数.通过查找名为smtp的夹具标记函数来发现匹配夹具功能.
  2. 调用smtp()来创建实例.
  3. 调用test_ehlo()并在测试函数的最后一行失败.

python fixtures pytest

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

在python中,将system命令的输出作为字符串

在python中,我可以使用os或subprocess运行一些系统命令.问题是我无法将输出作为字符串.例如:

>>> tmp = os.system("ls")
file1 file2
>>> tmp
0
Run Code Online (Sandbox Code Playgroud)

我有一个旧版本的子进程没有函数check_out,我更喜欢一个不需要更新该模块的解决方案,因为我的代码将运行在我没有完全管理员权限的服务器上.

这个问题似乎微不足道,但我找不到一个简单的解决方案

python shell command-line

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

实体框架核心:记录单个数据库上下文实例的查询

使用EF Core(或任何ORM)我想跟踪ORM在我的软件中进行某些操作期间对数据库的查询次数.

我之前在Python下使用过SQLAlchemy,在这个堆栈上,这很容易设置.我通常有一个单元测试,它针对一个场景的查询数量,针对内存中的SQLite数据库进行断言.

现在我想使用EF Core做同样的事情,并查看了Logging文档.

在我的测试设置代码中,我按照文档说的那样做:

using (var db = new BloggingContext())
{
    var serviceProvider = db.GetInfrastructure<IServiceProvider>();
    var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
    loggerFactory.AddProvider(new MyLoggerProvider());
}
Run Code Online (Sandbox Code Playgroud)

但我遇到的问题我怀疑是以下结果(也来自文档):

您只需要使用单个上下文实例注册记录器.注册后,它将用于同一AppDomain中上下文的所有其他实例.

我在测试中看到的问题表明我的记录器实现是在多个上下文中共享的(这与我阅读它们时的文档一致).并且因为a)我的测试运行器在并行运行测试并且b)我的整个测试套件创建了数百个db上下文 - 它不能很好地工作.

问题/问题:

  • 我想要的是什么?
  • 即我可以使用仅用于该db上下文实例的db上下文注册记录器吗?
  • 还有其他方法可以完成我想要做的事情吗?

c# logging unit-testing xunit entity-framework-core

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

在多个监视器上使用vim

我有三台显示器.

我通常在每个监视器上运行一个最大化的xterm,连接到同一个GNU屏幕会话.

可以用类似的模型用于vim吗?是否可以运行三个vims,它们共享相同的"vim会话":

  • 每个vim窗口显示不同的vim选项卡
  • 所有窗口共享的vim设置
  • 没有得到"交换文件......已经存在!" 如果我在两个选项卡上打开相同的文件错误消息.

vim gnu-screen

22
推荐指数
1
解决办法
7974
查看次数

如何使用python的networkx模块从节点列表生成完全连接的子图

我需要从networkx生成一个完全连接的子图,从我想要连接的节点列表开始.基本上,我希望传递给函数的列表中的所有节点都相互连接.

我想知道是否有任何内置函数来实现这一点(我还没有找到)?或者我应该考虑一些算法?

非常感谢你.

python networkx

20
推荐指数
3
解决办法
7826
查看次数

Doctest和相对进口

我在使用doctest和相对导入时遇到了麻烦.简单的解决方案就是摆脱相对进口.还有其他人吗?

假设我有一个名为example的包,包含2个文件:

example/__init__.py

"""
This package is entirely useless.
>>> arnold = Aardvark()
>>> arnold.talk()
I am an aardvark.
"""

from .A import Aardvark

if __name__ == "__main__":
    import doctest
    doctest.testmod()
Run Code Online (Sandbox Code Playgroud)

例如/ A.py

class Aardvark(object):
    def talk(self):
        print("I am an aardvark.")
Run Code Online (Sandbox Code Playgroud)

如果我现在尝试

python example/__init__.py
Run Code Online (Sandbox Code Playgroud)

然后我得到了错误

Traceback (most recent call last):
  File "example/__init__.py", line 8, in <module>
    from .A import Aardvark
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)

python doctest

19
推荐指数
1
解决办法
2512
查看次数

最好的Cassandra库/ Python包装器?

我发现了lazyboypycassa - 也许还有其他人.我见过许多推荐lazyboy的网站.恕我直言项目似乎已经死了,请参阅https://www.ohloh.net/p/compare?project_0=pycassa&project_1=lazyboy

那么新项目的最佳选择是什么?谢谢.

python cassandra pycassa

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