如何bytes
在Python 3中"声明"一个空变量?
我试图接收块的字节,然后将其更改为utf-8字符串.但是,我不确定如何声明将保存整个字节序列的初始变量.调用此变量msg
.我不能声明它None
,因为你不能添加一个bytes
和一个NoneType
.我不能将它声明为unicode字符串,因为那时我将尝试添加bytes
到字符串.此外,随着接收程序的发展,它可能会让我陷入一系列仅包含部分字符的字节.我不能没有msg
声明,因为msg
在转让之前会被引用.以下是有问题的代码
def handleClient(conn, addr):
print('Connection from:', addr)
msg = ?
while 1:
chunk = conn.recv(1024)
if not chunk:
break
msg = msg + chunk
msg = str(msg, 'UTF-8')
conn.close()
print('Received:', unpack(msg))
Run Code Online (Sandbox Code Playgroud) 在这段代码中:
#include <iostream>
using std::cout;
class Foo {
public:
Foo(): egg(0) {}
Foo(const Foo& other): egg(1) {}
int egg;
};
Foo bar() {
Foo baz;
baz.egg = 3;
return baz;
}
int main(void) {
Foo spam(bar());
cout << spam.egg;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是3
,虽然我预期它1
.
这意味着不会在行中调用复制构造函数Foo spam(bar())
.
我想这是因为bar
函数没有返回引用.
你能解释一下初始化时真正发生了spam
什么吗?
如果这是一个愚蠢的问题,我会提前道歉.
谢谢!
c++ constructor reference copy-constructor return-value-optimization
在进行二进制文件写入时,我在python中打包和解包二进制浮点数时遇到了一些麻烦.这是我做的:
import struct
f = open('file.bin', 'wb')
value = 1.23456
data = struct.pack('f',value)
f.write(data)
f.close()
f = open('file.bin', 'rb')
print struct.unpack('f',f.read(4))
f.close()
Run Code Online (Sandbox Code Playgroud)
我得到的结果如下:
(1.2345600128173828,)
Run Code Online (Sandbox Code Playgroud)
附加数字是怎么回事?这是一个舍入误差吗?这是如何运作的?
我有一份清单 ['1 2 4 5 0.9', '1 2 4 5 0.6', '1 2 4 5 0.3', '1 2 4 5 0.4']
我还有另一个清单: [0.9, 0.3, 0.7, 0.8]
我想用第二个列表和第一列表元素包括什么在第二个列表则元素被删除,因此第一个列表结束这样的:
[1 2 4 5 0.6', '1 2 4 5 0.4']
Run Code Online (Sandbox Code Playgroud) 我在编辑器中编写了以下代码,但无法编译,它会发出警告:
cannot convert 'std::basic_string<char, std::char_traits<char>,
std::allocator<char> to 'const char*' in assignment|
||=== Build finished: 1 errors, 0 warnings ===|
Run Code Online (Sandbox Code Playgroud)
码:
#include <iostream>
//#inclide <algorithm>
#include <numeric>
#include <vector>
using namespace std;
int main()
{
std::vector<std::string> v;
v.push_back(string("a"));
v.push_back(string("b"));
v.push_back(string("c"));
string num = accumulate(v.begin(),v.end(),"");
std::cout << num;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它不能编译,请有人帮帮我.谢谢:)
我偶然发现了有关用于's 优化的幻数 0x07EFEFEFF 的利用的答案,以下strlen
是最佳答案所说的内容:
看看魔法位。第 16、24 和 31 位为 1。第 8 位为 0。
- 第 8 位代表第一个字节。如果第一个字节不为零,则此时第 8 位变为
1
。否则就是0
。- 第 16 位代表第二个字节。一样的逻辑。
- 第 24 位代表第三个字节。
- 第 31 位代表第四个字节。
不过,如果我计算result = ((a + magic) ^ ~a) & ~magic
用a = 0x100
,我发现result = 0x81010100
,这意味着根据上面回答者,第二个字节a
等于0,这显然是错误的。
我错过了什么?
谢谢!
引自Advanced Programming in the UNIX Environnement
(第505页)第13.6节:
我们需要截断该文件,因为守护进程的前一个实例可能有一个比我们大的进程ID,并且字符串长度更长.例如,如果守护进程的前一个实例是进程ID 12345,而新实例是进程ID 9999,那么当我们将进程ID写入文件时,我们将在文件中留下99995.截断文件会阻止前一个守护程序中的数据显示为应用于当前守护程序.
这个评论是在这个功能上做出的:
already_running(void)
{
int fd;
char buf[16];
fd = open(LOCKFILE, O_RDWR|O_CREAT, LOCKMODE);
if (fd < 0) {
syslog(LOG_ERR, "can't open %s: %s", LOCKFILE, strerror(errno));
exit(1);
}
if (lockfile(fd) < 0) {
if (errno == EACCES || errno == EAGAIN) {
close(fd);
return(1);
}
syslog(LOG_ERR, "can't lock %s: %s", LOCKFILE, strerror(errno));
exit(1);
}
ftruncate(fd, 0);
sprintf(buf, "%ld", (long)getpid());
write(fd, buf, strlen(buf)+1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不明白这种行为是如何可能的,以及文件截断如何防止这种行为发生.有人可以解释一下吗?
谢谢回答!
反正是否支持python中的结构并且它不支持普通的关键字struct?
例如:
struct node
{
unsigned dist[20];
unsigned from[20];
}rt[10];
Run Code Online (Sandbox Code Playgroud)
我如何将其转换为python结构?
我对以下结果感到惊讶,使用Python 2.7.4
:
>>> id(5)
5068376
>>> id(5)
5068376
Run Code Online (Sandbox Code Playgroud)
当评估表达式5时,创建一个具有5068376标识的新对象.现在,我希望重复相同的语句将创建另一个新对象,其标识将是唯一的,因为简单地评估表达式不会产生任何对对象和对象的引用应该是垃圾回收.
这并不是解释器重用相同的内存地址:
>>> id(6)
5068364
>>> id(5)
5068376
Run Code Online (Sandbox Code Playgroud)
什么给出了什么?翻译是否对文字进行幕后绑定?
我有以下代码段:
class A:
def __init__(self):
self.state = 'CHAT'
def method1(self):
self.state = 'SEND'
def printer(self):
print self.state
class B(A):
def method2(self):
self.method1()
print self.state
ob_B = B()
ob_A = A()
ob_B.method2()
ob_A.printer()
Run Code Online (Sandbox Code Playgroud)
这给了我输出:
SEND
CHAT
Run Code Online (Sandbox Code Playgroud)
我想要它打印:
SEND
SEND
Run Code Online (Sandbox Code Playgroud)
也就是说,当通过调用 self.method1 修改 self.state 时,我希望它修改A 实例中B.method2
已经存在的值。self.state = 'CHAT'
我怎样才能做到这一点?
I just read about the IEEE 754 standard in order to understand how single-precision and double-precision floating points are implemented.
So I wrote this to check my understanding:
#include <stdio.h>
#include <float.h>
int main() {
double foo = 9007199254740992; // 2^53
double bar = 9007199254740993; // 2^53 + 1
printf("%d\n\n", sizeof(double)); // Outputs 8. Good
printf("%f\n\n", foo); // 9007199254740992.000000. Ok
printf("%f\n", bar); // 9007199254740992.000000. Ok because Mantissa is 52 bits
printf("%f\n\n", DBL_MAX); // ??
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Output:
8
9007199254740992.000000 …
Run Code Online (Sandbox Code Playgroud) 获得最大值和最小值之间距离的最简洁方法是什么?
例
max = 1 min = -1 -> dist = 2
max = 2 min = 1 -> dist = 1
max = -1 min = -2 -> dist = 1
Run Code Online (Sandbox Code Playgroud)