小编Ale*_*lex的帖子

如何在python中重定向函数的打印输出

可能重复:
我可以将python中的stdout重定向到某种字符串缓冲区吗?

我在python中有一个函数,可以在标准输出中输出内容

def foo():
    print("some text")
Run Code Online (Sandbox Code Playgroud)

我想将此函数中正在打印的文本"重定向"为变量,即"包装"此函数或其他任何内容,以便将文本存储在变量中:

text = wrapper(foo)
Run Code Online (Sandbox Code Playgroud)

有没有一种强大的方法来临时更改sys.stdout或打开变量作为一个FileObject或其他什么?

python printing stdout function

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

如何在模块路径中导入标准库而不是同名模块

我有以下目录结构

main_code.py
libs/
    __init__.py
    mylib.py
    time.py
Run Code Online (Sandbox Code Playgroud)

main_code.py刚刚进口mylib:

from libs import mylib
Run Code Online (Sandbox Code Playgroud)

mylib.py只是导入time:

import time
print time
Run Code Online (Sandbox Code Playgroud)

现在它证明了mylib.py导入libs/time.py不是内置的标准库time.有没有办法获得"正常"行为,即mylib.py导入内置标准库time,而不改变time.py?这是否是"正常"行为?我必须重命名time.py吗?在这个问题上,是否有比PEP8更多的风格指南建议?

python import naming-conventions python-2.7

5
推荐指数
1
解决办法
164
查看次数

classmethods的装饰器的一些问题

我有一段代码,我想在其中使用装饰器classmethod,如下所示:

import functools

def mydeco(function):
    @classmethod
    def wrapper(cls):
        return function(cls) 
    return functools.update_wrapper(wrapper, function)
    # return wrapper

class BaseClass(object):
    @classmethod
    @mydeco
    def foo(cls):
        return "42" 

print BaseClass.foo()
Run Code Online (Sandbox Code Playgroud)

当我注释掉@mydeco代码行时,即42打印文本。当包含这个装饰器时,我有几个问题:

如何正确地做到这一点,即,在给定的示例中,原始函数被返回而不被更改。

  • 当使用更复杂的调用return functools.update_wrapper(wrapper, function)来保留一些原始函数时,我得到了错误

    AttributeError: 'classmethod' object has no attribute '__module__'
    
    Run Code Online (Sandbox Code Playgroud)

我不确定这个错误是否与第一个问题有关,但对我来说它看起来是一个不同的问题。欢迎任何解决这些问题的具体建议。

上面的例子并没有真正“做”某事,它只是展示我遇到的问题的最小可能的例子。

python decorator class-method python-2.7

5
推荐指数
1
解决办法
1446
查看次数

如何消除相等运算符的python3弃用警告?

虽然标题可以解释为三个问题,但实际问题很容易描述.在Linux系统上我安装了python 2.7.3,并希望收到有关python 3不兼容性的警告.因此,我的代码片段(tester.py)看起来像:

#!/usr/bin/python -3

class MyClass(object):    
    def __eq__(self, other):
        return False
Run Code Online (Sandbox Code Playgroud)

当我执行此代码片段(被认为只是为了显示问题,而不是我在项目中使用的实际代码片段)时

./tester.py
Run Code Online (Sandbox Code Playgroud)

我收到以下弃用警告:

./tester.py:3: DeprecationWarning: Overriding __eq__ blocks inheritance of __hash__ in 3.x
  class MyClass(object):
Run Code Online (Sandbox Code Playgroud)

我的问题:如何更改此代码段以消除警告,即使其与版本3兼容?我想以正确的方式实现相等运算符,而不仅仅是抑制警告或类似的东西.

python deprecated python-2.7

5
推荐指数
1
解决办法
1648
查看次数

如何使用串联声明 PHP 类常量?

在 PHP5 类中,我想声明一个常量,如下所示:

class MyClass
{
    const sEOLChars = chr(13) . chr(10);
Run Code Online (Sandbox Code Playgroud)

会产生错误 ( Parse error: syntax error, unexpected '(', expecting ',' or ';')。怎样做才正确呢?

php class constants

5
推荐指数
1
解决办法
864
查看次数

使用preg_match_all在php中正则表达式

我想创建一种匹配字符串的方法

abc(xyz)
abc
abc(xyz)[123]
Run Code Online (Sandbox Code Playgroud)

其中每个支架是一个可选单元.我最想要的就是这样

preg_match_all('complicated regex', $mystring, $matches);
Run Code Online (Sandbox Code Playgroud)

$matches返回以下内容:

  • 如果$mystring= abc(xyz)[123]R$matches=array(0 => "abc", 1=> "xyz", 2=> "123", 3=> "R")
  • 如果$mystring= abc(xyz)R$matches=array(0 => "abc", 1=> "xyz", 2=> "", 3=> "R")
  • 如果$mystring= abc[123]R$matches=array(0 => "abc", 1=> "", 2=> "123", 3=> "R")
  • 如果$mystring= abc(xyz)[123]$matches=array(0 => "abc", 1=> "xyz", 2=> "123", 3=> "")
  • 如果$mystring= abc$matches=array(0 => "abc", 1=> "", 2=> "", 3=> "")

我希望你明白这一点.我尝试如下:

preg_match_all("/([a-z]*)(\([a-zA-Z]\))?(\[\w\])?/", "foo(dd)[sdfgh]", …
Run Code Online (Sandbox Code Playgroud)

php regex

5
推荐指数
1
解决办法
225
查看次数

有哪些工具可用于可视化类内依赖项(例如 PHP)?

我正在寻找一种易于使用的工具,它可以将类的“内部工作”可视化,例如用 PHP 编写。我想看到的是不同的类方法,以及它们之间的关系(方法 A 调用方法 B 等)。有没有这样的工具来创建这样的图表?在进一步的步骤中,也许有一个工具也可以将类的“内部工作”(以逆向工程的方式)可视化,即工作流的真实情况,即所有if-else决策等,在什么情况下调用什么方法?

如果有人可以向我推荐这样的工具(最好是 PHP 和 Python),我将不胜感激。

php python code-analysis

5
推荐指数
1
解决办法
750
查看次数

如何在setuptools设置中添加命令钩子?

我正在使用setuptools版本0.9.6并想要setup按照此处此处显示的说明添加命令挂钩.我创建了一个MyCommand派生自setuptools.Command同一setup.py文件的类,我试图添加这个钩子如下:

setup(
  # ...
  entry_points = {
    "distutils.commands": [
      "my_command = MyCommand"]}
)
Run Code Online (Sandbox Code Playgroud)

但是,该命令my_command无法识别,即python setup.py my_command出错

error: invalid command 'my_command'
Run Code Online (Sandbox Code Playgroud)

也许我需要以不同的方式参考我的命令?或者使用的0.9.6版本有变化setuptools吗?怎么做对了?

python setuptools setup.py python-2.7

5
推荐指数
1
解决办法
1448
查看次数

在 python 中匹配正则表达式的随机数据生成器

在 python 中,我正在寻找 python 代码,我可以使用它来创建与任何正则表达式匹配的随机数据。例如,如果正则表达式是

\d{1,100}
Run Code Online (Sandbox Code Playgroud)

我想要一个随机数列表,随机长度在 1 到 100 之间(均匀分布)

有一些可用的“正则表达式反相器”(请参阅​​此处)可以计算所有可能的匹配,这不是我想要的,而且非常不切实际。例如,上面的示例有超过 10^100 个可能的匹配项,这些匹配项永远无法存储在列表中。我只需要一个函数来随机返回匹配项。

也许已经有一个可用的软件包可以用来完成此任务?我需要一个函数来为任何正则表达式创建匹配字符串,而不仅仅是给定的一个或其他正则表达式,但可能是 100 个不同的正则表达式。我只是无法自己对它们进行编码,我希望函数提取模式以返回一个匹配的字符串。

python regex random

5
推荐指数
1
解决办法
4811
查看次数

如何正确地将十六进制字符串转换为C中的字节数组?

我需要将包含十六进制值作为字符的字符串转换为字节数组。尽管这里已经作为第一个答案已经回答了,但出现以下错误:

warning: ISO C90 does not support the ‘hh’ gnu_scanf length modifier [-Wformat]
Run Code Online (Sandbox Code Playgroud)

由于我不喜欢警告,因此遗漏hh只会产生另一个警告

warning: format ‘%x’ expects argument of type ‘unsigned int *’, but argument 3 has type ‘unsigned char *’ [-Wformat]
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何正确执行此操作?为了完成,我再次在此处发布示例代码:

#include <stdio.h>

int main(int argc, char **argv)
{
    const char hexstring[] = "deadbeef10203040b00b1e50", *pos = hexstring;
    unsigned char val[12];
    size_t count = 0;

     /* WARNING: no sanitization or error-checking whatsoever */
    for(count = 0; count < sizeof(val)/sizeof(val[0]); count++) {
        sscanf(pos, …
Run Code Online (Sandbox Code Playgroud)

c arrays type-conversion

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