我注意到,对于透视相机和 3D 形状,setTranslate() 可以在它们的 Z 轴上使用,那么这是否意味着我们使用此方法来操纵 3D 平面并使用 setLayout() 来操纵 2D 平面?
两者似乎都在 3D 平面上移动对象的坐标,因此有什么理由不互换使用它们吗(除了可能是不好的做法)?
我注意到,对于透视相机和 3D 形状,setTranslate() 可以在它们的 Z 轴上使用,那么这是否意味着我们使用此方法来操纵 3D 平面并使用 setLayout() 来操纵 2D 平面?
两者似乎都在 3D 平面上移动对象的坐标,因此有什么理由不互换使用它们吗(除了可能是不好的做法)?
我有这个代码:
import polars as pl
df = pl.DataFrame({'size': [34.2399, 1232.22, -479.1]})
df.with_columns(pl.format('{:,.2f}', pl.col('size')))
但失败了:
ValueError - Traceback, line 3
2 df = pl.DataFrame({'size': [34.2399, 1232.22, -479.1]})
----> 3 df.with_columns(pl.format('{:,.2f}', pl.col('size')))
File polars\functions\as_datatype.py:718, in format(f_string, *args)
717 msg = "number of placeholders should equal the number of arguments"
--> 718 raise ValueError(msg)
ValueError: number of placeholders should equal the number of arguments
如何使用类似格式说明符来格式化float
或列?int
'{:,.2f}'
我正在尝试在新用户注册时将其插入到 MySQL 中的表中。我在 PythonAnywhere 上使用 FlaskApp。
这是我的疑问:
INSERT INTO user_profile (email, user_name, first_foo) VALUES (%s, %s, 0);
这是从我的 flask_app 代码运行的:
def connect_db(query, params):
db_connection= MySQLdb.connect("<username>.mysql.eu.pythonanywhere-services.com","<username>","<password","<db_name>", cursorclass=MySQLdb.cursors.DictCursor)
cursor=db_connection.cursor()
cursor.execute(query, params)
result = cursor.fetchone()
return result
connect_db(query, (email, username,))
这是我的表结构:
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| user_id | int | NO | PRI | NULL | auto_increment |
| email | varchar(50) | YES | UNI | NULL | |
| user_name | varchar(15) | YES | UNI | NULL | |
| first_foo | tinyint(1) | YES | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
不幸的是,我不断收到:
MySQLdb._exceptions.OperationalError: (1048, "Column 'user_id' cannot be null")
我尝试了几个查询,包括:
INSERT INTO user_profile (user_id, email, user_name, first_foo) VALUES (NULL, %s, %s, 0);
INSERT INTO user_profile (user_id, email, user_name, first_foo) VALUES (DEFAULT, %s, %s, 0);
INSERT INTO user_profile (user_id, email, user_name, first_foo) VALUES (0, %s, %s, 0);
但都返回相同的错误。
如果我在 Python Anywhere 上的 MySQL 控制台中运行第一个查询,则查询成功。
在此先感谢您的帮助。
我们的静态代码分析器在一行上报告了不受限制的文档类型的安全问题XElement.Parse
。该方法的输入是某些 API 调用的结果。
根据文档,XDocument.Load
和的默认设置XElement.Load
是禁止 DTD 处理。尝试使用(外部)DTD 加载 xml 会导致运行时异常,表明出于安全原因,本文档中禁止使用 DTD。
我可以将相同的 XML 字符串传递给 XML.Parse。但在这种情况下不会抛出任何异常。文档表明它是在标准之上实现的XmlReader.Create
,所以我预计会出现相同的异常。
是否XElement.Parse
进行 DTD 处理,还是只是忽略 xml 声明和 DTD 信息?或者换句话说:我可以将问题标记为误报吗,还是应该更新代码并使用 XmlReader 并明确禁止 DTD 处理?
var xml = @"<?xml version=""1.0"" standalone=""no""?>
<!DOCTYPE serviceResponse SYSTEM ""serviceResponse.dtd"">
<serviceResponse>
<item>
<name>item 1</name>
</item>
</serviceResponse>";
var stringReader = new StringReader(xml);
var xmlReader = XmlReader.Create(stringReader);
XElement.Load(xmlReader);
抛出:
[System.Xml.XmlException: For security reasons DTD is prohibited in this XML document. To enable DTD processing set the DtdProcessing property on XmlReaderSettings to Parse and pass the settings into XmlReader.Create method.]
但这运行没有问题:
var xml = @"<?xml version=""1.0"" standalone=""no""?>
<!DOCTYPE serviceResponse SYSTEM ""serviceResponse.dtd"">
<serviceResponse>
<item>
<name>item 1</name>
</item>
</serviceResponse>";
XElement.Parse(xml);
我正在阅读文档boost::asio
并发现了这个例子:
void foo(boost::asio::yield_context yield)
{
size_t n = socket.async_read_some(buffer, yield);
// ...
}
我很困惑:
async_read_some
就不会阻塞。我看到两种boost::asio
实现方式:
socket.async_read_some
被调用时,此函数本身会调用事件循环中的一个函数,该函数尝试查找任何已准备好处理的事件并尝试调用这些回调。setjmp
/ longjmp
magic 为该函数注册一个回调,并在稍后返回。这两个选项似乎都不起作用:
...
boost_internal_magic
async_read_some
foo
...
main
因为我们还没有从 foo 返回。但是如果所有函数都使用 调用,yield_context
我不知道我们如何实际注册回调,因为没有代码点可以跳转到函数调用。
asyncio
是在同一线程上运行多个并发“代理”或“协同程序”或其他东西。每个代理都需要自己的堆栈,因此这似乎也行不通。如何boost::asio::yield_context
将函数转换为可注册的回调?具有相同功能的最小无依赖 C++ 代码是什么样的?
我有一个自定义的enum
,,MyEnum
其中的一些元素具有不同的名称但相同的值。
from enum import Enum
class MyEnum(Enum):
A = 1
B = 2
C = 3
D = 1 # Same value as A
因此,list(MyEnum)
仅返回部分成员的名称(每个值的名字):
>>>list(MyEnum)
[<MyEnum.A: 1>, <MyEnum.B: 2>, <MyEnum.C: 3>]
显然,list(MyEnum.__members__)
返回所有名称:
>>>list(MyEnum.__members__)
['A', 'B', 'C', 'D']
但是,如果我尝试覆盖__iter__()
我的枚举的方法,则覆盖似乎会失败:
class MyEnum(Enum):
A = 1
B = 2
C = 3
D = 1 # Same value as A
@classmethod # an attempt to override list(MyEnum) that doesn't change anything
def __iter__(cls):
return iter(list(cls.__members__))
显然list(MyEnum)
从来没有达到过习俗__iter__()
(比如说,print()
在我们的习俗中返回之前添加一个__iter__()
)。
这是为什么?
我如何覆盖默认行为list(MyEnum)
以便获得所有不同的名称?
我想使用“函数”选项卡中的“参数”值在 IDA Pro 中高效地查找特定函数。但是,对于以下从 IDA 反编译中获得的代码示例:
__int64 __fastcall sub_49FB60(__int64 a1)
{
sub_484690(a1 + 208, 0LL);
sub_484690(a1 + 112, 0LL);
return sub_484690(a1 + 16, 0LL);
}
_QWORD *__fastcall sub_4A0050(_QWORD *a1, __int64 a2)
{
sub_4A3CB0(a1);
*a1 = off_979AD8;
a1[13] = a2;
return a1;
}
__int64 __fastcall sub_4D3D20(__int64 a1, __int64 a2, unsigned __int8 a3)
{
__int64 v5; // rcx
*(_QWORD *)a1 = a2;
v5 = *(_QWORD *)(*(int *)(*(_QWORD *)a2 + 4LL) + a2 + 72);
if ( v5 )
(*(void (__fastcall **)(__int64))(*(_QWORD *)v5 + 8LL))(v5);
*(_BYTE *)(a1 + 8) = sub_4D3BC0(*(_QWORD *)a1, a3);
return a1;
}
所有这些函数的“参数”值都是 00000010。最初,我认为它可能表示参数大小的总和,但计算结果不匹配。“参数”字段实际上代表什么?
此外,所提供的代码示例中的“参数”值代表什么?
__int64 __fastcall sub_52AFD0(unsigned int **a1, unsinged int a2, __int64 a3)
{
unsinged int v3;
unsinged int v4;
unsinged int v6;
unsinged __int i;
v6 =-1;
for ( i = a2 / 8ui64; i; --i)
{
v3 = **a1 ^ v6;
++*a1;
v4 = **a1;
v6 = *(_DWORD *)(a3 + 4i64 * (v4 >> 24)));
}
return v6;
}
我有一个很长的命令行字符串,我想注释一些参数/开关并描述它们的作用以及可以用它们进行哪些调整。以下简化的批处理文件不起作用,但它或多或少是我想要做的:
executable^
-switch1=3^ rem should be 3 or 5, three means xxx and 5 means yyy
-argument1=some-file.txt^
-file-format=csv^ rem output file format, supported are csv and xml
-out=result rem written file, file extension is copied from file format
我创建了一个简单的脚本来测试将注释与拆分命令字符串组合的语法,但我找不到可行的解决方案:
rem WORKS, no space after caret
echo aaa ^
bbb
rem does not work, space after caret
echo aaa ^
bbb
rem WORKS space in the next line
echo aaa ^
bbb
echo(
echo and now with rem-comments
echo(
rem does not work
echo aaa ^rem comment
bbb
rem does not work
echo aaa ^&rem comment
bbb
rem does not work
echo aaa ^ rem comment
bbb
rem does not work
echo aaa ^ &rem comment
bbb
echo(
echo and with double-colon-comments
echo(
:: does not work
echo aaa ^:: comment
bbb
:: does not work
echo aaa ^&:: comment
bbb
:: does not work
echo aaa ^ :: comment
bbb
:: does not work
echo aaa ^ &:: comment
bbb
插入符号后的任何字符似乎都会破坏它,因此在插入符号后可能根本无法添加内联注释?有人有想法/解决方案吗?
我有两张桌子,TableA
&TableB
所有表格数据均可在此处获取:db<>fiddle
我想要用特定tableA
的数据更新。tableB
A_id
因此,我编写了更新的查询A_id=2
如下:
UPDATE TableA
SET
total_count = (SELECT COUNT(A_id) AS total_count
FROM TableB WHERE A_id = 2),
pass_count = (SELECT COUNT(CASE WHEN(isPassed = 'Y') THEN 1 END) as pass_count
FROM TableB WHERE A_id = 2),
fail_count = (SELECT COUNT(CASE WHEN(isPassed = 'N') THEN 1 END) as fail_count
FROM TableB WHERE A_id = 2)
WHERE A_id = 2;
并检查TableA
其更新数据是否正确。
但是,上述查询对于每个列更新都有 3 个不同的子查询。
因此,我想编写更新后的查询,如下所示:
WITH T0 AS (
SELECT A_id,
COUNT(A_id) AS TOTAL_SCENARIOS_COUNT,
COUNT(CASE WHEN(isPassed = 'Y') THEN 1 END) as PASS_SCENARIOS_COUNT,
COUNT(CASE WHEN(isPassed = 'N') THEN 1 END) as FAIL_SCENARIOS_COUNT
from RT_TEST_RUN_SCENARIO
GROUP BY A_id
HAVING A_id = 4779
)
UPDATE tableA
SET
tableA.total_count = t0.total_count,
tableA.pass_count = t0.pass_count,
tableA.fail_count = t0.fail_count
FROM tableA INNER JOIN T0
ON tableA.A_id = T0.A_id
还有其他方法可以更新吗TableA
?
注意:所有表格数据/查询都可以在这里找到:db<>fiddle