Python教程4.7.1.默认参数值表示以下内容:
重要警告:默认值仅评估一次.当默认值是可变对象(如列表,字典或大多数类的实例)时,这会有所不同.例如,以下函数累积在后续调用中传递给它的参数:
Run Code Online (Sandbox Code Playgroud)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]
在内存管理方面,我不太明白"仅评估一次"的含义.显然,函数的默认值在首次调用函数时被计算一次,并且即使在函数结束后也存储在单独的存储器地址中.(根据我的理解,在函数结束后,应该释放所有局部变量?)
我对么?
是否可以使用Windows上的C在命令提示符下清除输出?
例如,在linux上我可以做到
printf("\033[2J");
Run Code Online (Sandbox Code Playgroud)
但据我所知,Windows无法识别ANSI转义码谢谢.
编辑:我想我还需要在清除之后将光标恢复到下一个输出的0,0 ...
我不明白为什么我不能运行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项目.例如:
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 2中,该函数json.dumps()将确保将所有非ascii字符转义为\uxxxx.
但这不是很混乱,因为它\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) 我正在尝试上传一个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) 我引用ANSI_ISO + 9899-1990,在所有未定义行为列表中 -
- 使用在当前范围中不可见的标识符
为什么使用未定义的变量UB而不是错误?我想知道这背后的原因吗?制作UB不正确的一切是否有效?
我知道大多数编译器都将其视为错误.但为什么标准会这样说呢?
或者标准中没有"错误"的概念?c的语法是.*但是它的某些部分有UB?
我想将大量条目(〜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语句吗?
谢谢您的帮助!
这个问题可能只是另一种不正确地解释操作员的情况.但不久之前,我看到有人发推文关于一个运营商的信息,据称可以用来检查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
但奇怪的是,我还没有找到关于这个运算符的任何文档,我从来没有看到它在任何地方使用过.有人可以解释一下这是如何工作的?
我有一个简单的操作系统(实模式),用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字符.
python ×6
c ×4
python-2.x ×2
sqlalchemy ×2
ansi-escape ×1
bios ×1
bootloader ×1
c89 ×1
integer ×1
json ×1
nasm ×1
owncloud ×1
psycopg2 ×1
python-3.x ×1
sqlacodegen ×1
unicode ×1
webdav ×1
windows ×1
x86 ×1