小编Sam*_*uns的帖子

Python 3如何'声明'一个空的`bytes`变量

如何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)

python variables byte variable-assignment python-3.x

25
推荐指数
1
解决办法
4万
查看次数

为什么不调用复制构造函数?

在这段代码中:

#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

10
推荐指数
1
解决办法
418
查看次数

在python中打包和解包二进制浮点数

在进行二进制文件写入时,我在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)

附加数字是怎么回事?这是一个舍入误差吗?这是如何运作的?

python file-io struct binaryfiles

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

如果元素中包含某个字符串,请将其删除

我有一份清单 ['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)

python list

4
推荐指数
1
解决办法
119
查看次数

为什么c ++累积第三个参数类型导致编译失败

我在编辑器中编写了以下代码,但无法编译,它会发出警告:

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)

我不知道为什么它不能编译,请有人帮帮我.谢谢:)

c++

4
推荐指数
1
解决办法
169
查看次数

了解用于 strlen 优化的幻数 0x07EFEFEFF

我偶然发现了有关用于's 优化的幻数 0x07EFEFEFF 的利用的答案,以下strlen是最佳答案所说的内容:

看看魔法位。第 16、24 和 31 位为 1。第 8 位为 0。

  • 第 8 位代表第一个字节。如果第一个字节不为零,则此时第 8 位变为1。否则就是0
  • 第 16 位代表第二个字节。一样的逻辑。
  • 第 24 位代表第三个字节。
  • 第 31 位代表第四个字节。

不过,如果我计算result = ((a + magic) ^ ~a) & ~magica = 0x100,我发现result = 0x81010100,这意味着根据上面回答者,第二个字节a等于0,这显然是错误的。

我错过了什么?

谢谢!

c assembly bit-manipulation strlen

4
推荐指数
1
解决办法
253
查看次数

了解文件截断

引自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)

我不明白这种行为是如何可能的,以及文件截断如何防止这种行为发生.有人可以解释一下吗?

谢谢回答!

c unix linux truncate file

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

在python中复制struct

反正是否支持python中的结构并且它不支持普通的关键字struct

例如:

struct node
{
  unsigned dist[20];
  unsigned from[20];
}rt[10];
Run Code Online (Sandbox Code Playgroud)

我如何将其转换为python结构?

python struct

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

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)

什么给出了什么?翻译是否对文字进行幕后绑定?

python literals name-binding

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

如何从Python中的另一个类访问类变量?

我有以下代码段:

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'我怎样才能做到这一点?

python class class-variables

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

Understanding DBL_MAX

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)

c floating-point double double-precision

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

两个数字之间的距离/绝对误差

获得最大值和最小值之间距离的最简洁方法是什么?

  1. 最大值始终大于最小值(在1d轴上更靠右,而不是绝对值).
  2. 只要满足条件1,最大值和最小值可以是符号的任意组合(正和负)

max =  1  min = -1  ->  dist = 2 
max =  2  min =  1  ->  dist = 1 
max = -1  min = -2  ->  dist = 1
Run Code Online (Sandbox Code Playgroud)

python numpy distance

-2
推荐指数
1
解决办法
3081
查看次数