小编Ala*_*sta的帖子

如何为目录中的所有Python文件运行Pylint

我有

find . -iname "*.py" -exec pylint -E {} ;\
Run Code Online (Sandbox Code Playgroud)

FILES=$(find . -iname "*.py")
pylint -E $FILES
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,第一个命令将为每个Python文件运行pylint,第二个命令将为所有文件运行一次pylint.我希望两个命令都会返回相同的输出,但它们会返回不同的结果.我认为这种差异与导入和F(失败)pylint消息有某种关系,这种情况在导入失败时发生,而不是由pylint -E输出.

有人已经经历过这个并且可以解释为什么差异发生以及运行pylint的最佳方式是什么?

python pylint

39
推荐指数
9
解决办法
3万
查看次数

为什么选择算法O(n)的运行时间?

根据维基百科,选择算法具有运行时间O(n),但我不相信它.谁能解释为什么呢O(n)

在正常的快速排序中,运行时是O(n log n).每次我们分支分成两个分支(比枢轴比枢轴更大,而较小的),我们需要继续处理这两个分支的两侧,而选择算法只需要处理一个分支的一面.我完全理解这些观点.但如果你认为二进制搜索算法的,之后我们选择了中间的元素,我们也在继续寻找一个分支的一面.这样做算法O(1)呢?,当然,二进制搜索算法仍然O(log N)O(1).这与二进制搜索树中的搜索元素也是一样的.我们只寻找一个侧面,但我们仍然认为O(log n)不是O(1).

有人可以解释为什么在选择算法,如果我们继续寻找一个侧面,它可以考虑O(1)代替O(log n)?对我来说,我认为算法是O(n log n),O(N)为了分离,以及O(log n)继续寻找的次数.

algorithm big-o selection

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

Python argparse:metavar和action = store_true在一起

我在Python中使用argparse模块来解析在命令行界面中输入的参数.我对subparser对象进行了以下add_argument调用:

submit_parser.add_argument('-pv','--provision',metavar='PROVISION', dest='PROVISION',
                                 help='provision system',
                                 action='store_true', default=False, required=False)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Traceback (most recent call last):
  File "./scripts/tp4", line 94, in <module> 
    main()
  File "./scripts/tp4", line 74, in main 
    modloader.loadModules(sub_parsers)
  File "/usr/lib/python2.6/site-packages/tp4/cli/Moduleloader.py", line 66, in loadModules 
    registered_modules[module_name].setSubparserArgs(module_sub_parser)
  File "/usr/lib/python2.6/site-packages/tp4/cli/modules/AutotestModule.py", line 135, in setSubparserArgs
    action='store_true', default=False, required=False)
  File "/usr/share/tp4/cli/zip/argparse.zip/argparse.py", line 1302, in add_argument
    TypeError: __init__() got an unexpected keyword argument 'metavar'
Run Code Online (Sandbox Code Playgroud)

如果我删除动作或metavar参数,它可以工作.为什么两者不能在一起?在http://docs.python.org/dev/library/argparse.html的 argparse文档中没有关于此限制的内容.

在此先感谢您的帮助

python argparse

10
推荐指数
1
解决办法
8547
查看次数

自定义记录器类和日志中的正确行号/功能名称

我想将Python记录器包装在一个自定义类中,以嵌入一些特定于应用程序的功能,并隐藏开发人员的设置细节(设置文件输出,日志记录级别等).为此,我使用以下API创建了一个类:

__init__(log_level, filename)
debug(msg)
info(msg)
warning(msg)
error(msg)
Run Code Online (Sandbox Code Playgroud)

Logger.debug/info/warning/etc调用通常在日志中写入进行日志调用的函数和行号.但是,使用我的自定义类,写入日志文件的函数和行号始终相同(对应于自定义类中的debug()/ info()/ warning()/ error()函数).我希望它保存记录msg的应用程序代码行.那可能吗?

提前致谢.

python logging

9
推荐指数
2
解决办法
2580
查看次数

Popen.poll()和Popen.wait()之间的区别

我正在使用以下命令来运行shell命令(创建子进程):

cmd = "ls"
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
Run Code Online (Sandbox Code Playgroud)

然后,我想在它完成时获得它的返回码.我应该用wait()poll()?在我看来,wait()等于poll()在繁忙的等待中封闭.就像是:

while process.poll() == None:
    time.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)

我读过wait()如果stdout/stderr填充缓冲区会产生死锁.process.poll()像上面那样使用也会产生死锁?如果这是真的,我应该process.comunicate()用来解决问题?如今,我只process.comunicate()在我对子流程感兴趣时使用 stdout/stderr.

提前致谢.

python subprocess

7
推荐指数
1
解决办法
6974
查看次数

Python中的全局和单例

我有一些在我的Python应用程序中普遍存在的类,它们应该只有一个全局实例(例如Logger,DbConnection).Python不支持类中的静态变量/方法,因此在这里创建单例的常用Java/C++方法不起作用.我已经找到了在Python中实现单例的替代方法.我想要一个简单的(如果可能的话没有元编程)和干净的实现.这看起来不错:

class MyClass(object):
    def a():
        pass

singleton = MyClass()
Run Code Online (Sandbox Code Playgroud)

使用单例会很简单

import myClass
myClass.singleton.a()
Run Code Online (Sandbox Code Playgroud)

如果对象初始化不那么简单,则可以用创建函数替换直接赋值.

我还可以在模块范围内创建一个getInstance()并始终使用它来获取myObj.

问题1)这可行吗?模块代码(myObj赋值)仅在第一次导入到其他模块时运行,并且每次在某处导入此模块时都不会创建myObj?

我见过的另一种方法是使用全局模块.就像是:

from myClass1 import MyClass1
from myClass2 import MyClass2

myObj1 = MyClass1()
myObj2 = MyClass2()
Run Code Online (Sandbox Code Playgroud)

使用这个:

import globals
globals.myObj1.a()
Run Code Online (Sandbox Code Playgroud)

我倾向于选择第一种选择.

问题2)在两种解决方案之间,你推荐什么?

问题3)第三种解决方案是将诸如Logger之类的广泛对象传递给几个类/函数,但这不是一个很好的解决方案.这里没有提到更好的解决方案吗?

我知道使用全局变量和单例的缺点.但是,拥有全局状态在我的应用程序中不是一个大问题.我更喜欢具有代码清晰度且易于使用的解决方案.

python

6
推荐指数
1
解决办法
2507
查看次数

Python:禁用相对导入

可能重复:
当存在具有相同名称的本地模块时,如何在Python中访问标准库模块?

我正在使用Python 2.6.

我只在我的应用程序中使用绝对导入.现在我有这个:

myapp 
  |
   -- myscript 
   -- json
        |
         -- anotherscript.py
Run Code Online (Sandbox Code Playgroud)

在myscript中,我有:

import json
import myapp.json.anotherscript
Run Code Online (Sandbox Code Playgroud)

由于Python的相对导入机制,导入json不会导入我想要的内置库,而是将我的自定义json包导入当前命名空间.

有没有办法在Python中禁用相对导入,或至少在这种情况下避免使用它?否则,我将不得不将我的包重命名为与jsonutils没有多大意义的其他东西.

提前致谢.

python import

6
推荐指数
1
解决办法
2623
查看次数

Spring:@PostConstruct未被调用

A类:

package myproject.web.factory.components;

@Component
public class AppComponentFactory{
}
Run Code Online (Sandbox Code Playgroud)

B级

package myproject.web.components;
import myproject.web.factory.components.AppComponentFactory;

@Component
public class AdminTabSheet{

   @Autowired
   private AppComponentFactory appComponentFactory;

   public AdminTabSheet() {
   }

   @PostConstruct
   public void init() {
      // does something with appComponentFactory
   }
}
Run Code Online (Sandbox Code Playgroud)

配置XML:

<context:component-scan base-package="myproject.spring" />
Run Code Online (Sandbox Code Playgroud)

WebConfig.java:

package myproject.spring.config;

@Configuration
@ComponentScan(basePackages = { "myproject.web.components"})
public class WebConfig {
Run Code Online (Sandbox Code Playgroud)

我已遵循http://docs.oracle.com/javaee/5/api/javax/annotation/PostConstruct.html中的所有规则:

  • 只有一个方法可以使用此注释进行注释.
  • 除EJB拦截器外,该方法不得有任何参数
  • 方法的返回类型必须是无效的.
  • 该方法绝不能抛出已检查的异常.
  • 应用PostConstruct的方法可以是公共的,受保护的,包私有的或私有的.
  • 方法绝不能是静态的.

有任何想法吗?

java spring

6
推荐指数
1
解决办法
9638
查看次数

IO 密集型任务的多线程处理和 CPU 密集型任务的多处理

https://realpython.com/async-io-python/给出了关于多线程和多处理的介绍,但它没有明确什么是一般有效的或仅在Python环境中有效的。例如,它说:

并发性包括多处理(适合 CPU 密集型任务)和线程(适合 IO 密集型任务)

我之前曾使用其他编程语言(例如 C/C++)开发过并发应用程序,这种说法对我来说似乎很奇怪。为什么多线程不适合 CPU 密集型任务,而多处理通常不适合 IO 密集型任务?据我所知,两者都可以有效地用于这两项任务。在两者之间做出选择取决于其他标准,例如任务粒度、共享状态量和任务之间的执行顺序依赖性以及进程/线程创建成本(进程较高,尤其是在某些操作系统中)。上面的语句是否特定于 Python 环境及其全局锁解释器限制?

python concurrency

6
推荐指数
1
解决办法
5939
查看次数

Maven:经常从远程存储库下载元数据 xml 文件

我正在使用 Maven 来处理 Java 项目。我认为仅在第一次编译时需要互联网连接才能从远程存储库下载所需的库,但每当我编译代码时,我都会收到几条下载消息。像这样的消息:

Downloading: http://repo.maven.apache.org/maven2/org/eclipse/core/resources/maven-metadata.xml
Downloading: http://repository.springsource.com/maven/bundles/external/org/eclipse/core/resources/maven-metadata.xml
Downloading: http://repository.springsource.com/maven/bundles/release/org/eclipse/core/resources/maven-metadata.xml
Downloading: https://oss.sonatype.org/content/repositories/snapshots/org/eclipse/core/resources/maven-metadata.xml
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况以及如何防止这种情况发生?

java jibx maven

5
推荐指数
2
解决办法
7759
查看次数