小编Ant*_*ala的帖子

Python函数:可选参数计算一次?

Python教程4.7.1.默认参数值表示以下内容:

重要警告:默认值仅评估一次.当默认值是可变对象(如列表,字典或大多数类的实例)时,这会有所不同.例如,以下函数累积在后续调用中传递给它的参数:

def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
print f(3)
Run Code Online (Sandbox Code Playgroud)

这将打印

[1]
[1, 2]
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

在内存管理方面,我不太明白"仅评估一次"的含义.显然,函数的默认值在首次调用函数时被计算一次,并且即使在函数结束后也存储在单独的存储器地址中.(根据我的理解,在函数结束后,应该释放所有局部变量?)

我对么?

python

3
推荐指数
1
解决办法
589
查看次数

在Windows上使用C清除命令提示符

是否可以使用Windows上的C在命令提示符下清除输出?

例如,在linux上我可以做到

printf("\033[2J");
Run Code Online (Sandbox Code Playgroud)

但据我所知,Windows无法识别ANSI转义码谢谢.

编辑:我想我还需要在清除之后将光标恢复到下一个输出的0,0 ...

c windows ansi-escape

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

如何运行sqlacodegen?

我不明白为什么我不能运行sqlacodegen.我希望用它来从我现有的PostgreSQL数据库创建一个SQLAlchemy模型.它不会运行.

当我打字sqlacodegen --help求助时,我得到:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for unary -: '_Helper'
Run Code Online (Sandbox Code Playgroud)

基本说明在这里.

python sqlalchemy sqlacodegen

3
推荐指数
1
解决办法
6874
查看次数

是否应该添加额外的图层以支持__repr__?

我正在研究一个主要返回闭包而不是传统的基于类的方法的Python项目.例如:

def term(token):
    def fn(text):
        return (...)
    return fn
Run Code Online (Sandbox Code Playgroud)

可以想象,调试和测试闭包是一个噩梦,特别是如果我在整个代码中使用相同的名称来封闭.例如:

>>> term('t')
<function fn at 0x...>
Run Code Online (Sandbox Code Playgroud)

所以我尝试将它包装在一个类中以__repr__从namedtuple中获取特殊处理:

def rr(cls, attrs):
    T = namedtuple(cls, attrs)

    class G(object):
        __slots__ = ()

        def __init__(self, repr_message, callable):
            self.callable = callable
            self.repr_message = repr_message

        def __call__(self, *args, **kwargs):
            return self.callable(*args, **kwargs)

        def __repr__(self):
            return self.repr_message

    K = type(cls, (G,), {})

    def wrapper(fn):
        def init(*args, **kwargs):
            t = T(*args, **kwargs)
            return K(
                repr(t),
                fn(*args, **kwargs),
            )
        return init
    return wrapper
Run Code Online (Sandbox Code Playgroud)

这样:

>>> rr('Term', ['token'])(term)('$') …
Run Code Online (Sandbox Code Playgroud)

python python-2.x

3
推荐指数
1
解决办法
137
查看次数

为什么json.dumps使用"\ uxxxx"转义非ascii字符

在Python 2中,该函数json.dumps()将确保将所有非ascii字符转义为\uxxxx.

Python 2 Json

但这不是很混乱,因为它\uxxxx是一个unicode字符,应该在unicode字符串中使用.

输出json.dumps()是a str,它是Python 2中的字节字符串.因此它不应该将字符转义为\xhh

>>> unicode_string = u"\u00f8"
>>> print unicode_string
ø
>>> print json.dumps(unicode_string)
"\u00f8"
>>> unicode_string.encode("utf8")
'\xc3\xb8'
Run Code Online (Sandbox Code Playgroud)

python unicode json python-2.x

3
推荐指数
1
解决办法
5193
查看次数

使用python请求将0字节文件上传到owncloud会挂起

我正在尝试上传一个0字节的文件,其中包含对owncloud的请求.我想为此使用类似文件的对象.通常我会这样做:

file_obj = io.BytesIO(b'')
response = requests.put('http://localhost/remote.php/webdav',
                                    auth=('xxx', 'xxx'),
                                    data=file_obj)
Run Code Online (Sandbox Code Playgroud)

但它冻结了.如果我中断进程,我会看到它与堆栈跟踪挂起的位置:

Traceback (most recent call last):
  File "/home/julian/cc/client/.venv/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 376, in _make_request
    httplib_response = conn.getresponse(buffering=True)
TypeError: getresponse() got an unexpected keyword argument 'buffering'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/julian/cc/client/cc/storage/webdav.py", line 360, in <module>
    main()
  File "/home/julian/cc/client/cc/storage/webdav.py", line 351, in main
    data=file_obj)
  File "/home/julian/cc/client/.venv/lib/python3.5/site-packages/requests/api.py", line 120, in put
    return request('put', url, data=data, **kwargs)
  File "/home/julian/cc/client/.venv/lib/python3.5/site-packages/requests/api.py", line 53, in request
    return session.request(method=method, …
Run Code Online (Sandbox Code Playgroud)

python webdav transfer-encoding python-requests owncloud

3
推荐指数
1
解决办法
742
查看次数

为什么使用不在范围UB中的标识符而不是错误

我引用ANSI_ISO + 9899-1990,在所有未定义行为列表中 -

  • 使用在当前范围中不可见的标识符

为什么使用未定义的变量UB而不是错误?我想知道这背后的原因吗?制作UB不正确的一切是否有效?

我知道大多数编译器都将其视为错误.但为什么标准会这样说呢?

或者标准中没有"错误"的概念?c的语法是.*但是它的某些部分有UB?

c c89 undefined-behavior language-lawyer

3
推荐指数
1
解决办法
106
查看次数

如何在sqlalchemy中使用psycopg2.extras?

我想将大量条目(〜600k)上传到PostgreSQL DB的一个简单表中,每个条目有一个外键,一个时间戳和3个浮点数。但是,每个条目要花费60毫秒才能执行此处所述的核心批量插入操作,因此整个执行过程将花费10个小时。我发现,这是executemany()方法的性能问题,但是已经用psycopg2 2.7中execute_values()方法解决了。

我运行的代码如下:

#build a huge list of dicts, one dict for each entry
engine.execute(SimpleTable.__table__.insert(),
               values) # around 600k dicts in a list
Run Code Online (Sandbox Code Playgroud)

我看到这是一个普遍的问题,但是我还没有设法在sqlalchemy本身中找到解决方案。有什么方法可以告诉sqlalchemy execute_values()在某些情况下调用吗?还有其他方法可以实现巨大的插入而无需自己构造SQL语句吗?

谢谢您的帮助!

python sqlalchemy psycopg2 python-3.x

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

整数溢出测试运算符?(+)

这个问题可能只是另一种不正确地解释操作员的情况.但不久之前,我看到有人发推文关于一个运营商的信息,据称可以用来检查C中的整数溢出.即&+(&符号加)运算符,它可以像这样使用:

#include <stdio.h>
#include <stdint.h>

int main()
{
    uint32_t x, y;

    x = 0xFFFFFFFF;
    y = 1;

    if (x &+ y) {
        printf("Integer overflow!\n");
    } else {
        printf("No overflow\n");
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它看起来确实像人们期望的那样工作,GCC 6在使用这些参数进行编译时不会给我任何警告或错误: gcc -Wall -Wextra -Werror of.c

但奇怪的是,我还没有找到关于这个运算符的任何文档,我从来没有看到它在任何地方使用过.有人可以解释一下这是如何工作的?

c integer integer-overflow

3
推荐指数
1
解决办法
110
查看次数

扩展的ASCII字符在int 10h中不起作用

我有一个简单的操作系统(实模式),用NASM(只有bootloader)编写,大多数用C编写.

我想打印这个字符:ñ,我使用这个函数使用int 10h将字符打印到屏幕:

void putch(char chr)
{
    __asm__ __volatile__ ("int $0x10"
                          :
                          : "a" ((0x0e<<8) | chr),
                            "b" (0x0000));
}

void println(char *str)
{
    while (*str)
        putch(*str++);
}
Run Code Online (Sandbox Code Playgroud)

现在,我尝试打印ñ:

println("ñ\r\n");
Run Code Online (Sandbox Code Playgroud)

但是当我编译并执行时(在qemu和VB框中),字符"ñ"被忽略.我用CP-437编码保存了源代码,但问题仍然存在.这也会影响所有扩展的ASCII字符.

c x86 bios nasm bootloader

3
推荐指数
1
解决办法
122
查看次数