小编Sha*_*ger的帖子

是否可以使“type”的输出返回不同的类?

所以免责声明:这个问题激起了我的好奇心,我问这个纯粹是出于教育目的。我想这对于 Python 专家来说是一个更大的挑战!

是否可以使type(foo)return 的输出与实际实例类不同?即它可以冒充冒名顶替者并通过诸如此类的检查吗type(Foo()) is Bar

@juanpa.arrivillaga提出了在实例上手动重新分配的建议__class__,但这会改变所有其他方法的调用方式。例如

class Foo:
    def test(self):
        return 1

class Bar:
    def test(self):
        return 2


foo = Foo()
foo.__class__ = Bar
print(type(foo) is Bar)
print(foo.test())

>>> True
>>> 2
Run Code Online (Sandbox Code Playgroud)

期望的输出是True, 1。即返回的类type与实例不同,并且仍然调用真实类中定义的实例方法。

python types metaclass

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

Python3除法:当没有余数时返回int,当有余数时返回浮点数?

在python3中,整数除法的工作方式与python 2.7.3不同.有没有办法确保在除法后没有余数的数字作为int返回,而在除法后有余数的数字作为浮点数返回?

我希望能够检查:

if (instanceof(x/n, int)):
    # do something
Run Code Online (Sandbox Code Playgroud)

python3中发生以下情况:

>>> 4 / 2
2.0
>>> 5 / 2
2.5
Run Code Online (Sandbox Code Playgroud)

有没有办法让分裂这样做?

>>> 4 / 2
2
>>> 5 / 2
2.5
Run Code Online (Sandbox Code Playgroud)

python floating-point python-3.x

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

python 2 vs python 3 类与 __iter__

我试图弄清楚如何让这个类在 Python 3 中工作,它在 Python 2 中工作。这是来自 D. Beasley 的生成器教程。我是 Python 新手,只是在网上学习教程。

蟒蛇 2

class countdown(object):
    def __init__(self, start):
        self.count = start
    def __iter__(self):
        return self
    def next(self):
        if self.count <= 0:
            raise StopIteration
        r = self.count
        self.count -= 1
        return r

c = countdown(5)

for i in c:
    print i,
Run Code Online (Sandbox Code Playgroud)

Python 3,不工作。

class countdown(object):
    def __init__(self, start):
        self.count = start
    def __iter__(self):
        return self
    def next(self):
        if self.count <= 0:
            raise StopIteration
        r = self.count
        self.count -= 1
        return …
Run Code Online (Sandbox Code Playgroud)

python iterator python-2.7 python-3.x

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

在Python中生成一个没有分叉的进程

我正在使用Python(2.7)和pymongo(3.3),我需要生成一个子进程来异步运行一个作业.不幸的是pymongo不像这里描述的那样是fork-safe (我需要在生成子进程之前与db进行交互).

我运行了一个实验subprocess.Popen(使用shellset to True然后False)和multiprocessing.Process.据我所知,他们都分叉父进程来创建子进程,但只multiprocessing.Process导致pymongo打印它已检测到分叉进程的警告.

我想知道这样做的pythonic方式是什么.似乎也许os.system会为我做这件事,但subprocess被描述为一个预定的替代品,os.system所以我想知道我是否遗漏了一些东西.

python subprocess python-2.x pymongo python-multiprocessing

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

带有无符号和有符号整数的 C++ 算术类型转换

代码:

#include<iostream>
using std::cout; using std::endl;

int main()
{
    unsigned int i = 5;
    int x = -3;

    cout << "(i + x) = " << (i + x) << endl;

    cout << "Set x to -6" << endl;
    x = -6;

    cout << "(i + x) = " << (i + x) << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

(i + x) = 2
Set x to -6
(i + x) = 4294967295
Run Code Online (Sandbox Code Playgroud)

在这个例子中,(i + x) 返回的结果类型是一个无符号整数,但是,我认为通过算术类型转换,应该“提升”有符号整数(在这种情况下为变量“x”)在操作发生之前转换为无符号整数。这一定不是这种情况,因为 (i + x) 的第一个结果是 (5 …

c++ integer-promotion

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

pysmb 递归删除文件夹子文件夹和文件

我有一个共享文件夹,根目录下有一个文件夹,其中包含子文件夹和文件。

我找不到如何使用子文件夹和文件递归删除根目录下的文件夹。

请问我有什么帮助。

谢谢

python python-3.x

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

如何在python中打印C格式

一个python新手问题:

我想用带有参数列表的 c 格式在 python 中打印:

agrs = [1,2,3,"hello"]
string = "This is a test %d, %d, %d, %s"
Run Code Online (Sandbox Code Playgroud)

如何使用 python 打印:

这是一个测试 1, 2, 3, 你好

谢谢。

python printf string-formatting

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

itertools groupby对象无法正确输出

我试图使用itertools.groupby帮助我按正或负属性对整数列表进行分组,例如:

输入

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

将返回

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

但是,如果我:

import itertools

nums = [1,2,3, -1,-2,-3, 1,2,3, -1,-2,-3]
group_list = list(itertools.groupby(nums, key=lambda x: x>=0))
print(group_list)
for k, v in group_list:
    print(list(v))
>>>
[]
[-3]
[]
[]
Run Code Online (Sandbox Code Playgroud)

但是,如果我没有list()groupby对象,它将可以正常工作:

nums = [1,2,3, -1,-2,-3, 1,2,3, -1,-2,-3]
group_list = itertools.groupby(nums, key=lambda x: x>=0)
for k, v in group_list:
    print(list(v))
>>>
[1, 2, 3]
[-1, -2, -3]
[1, 2, 3]
[-1, -2, -3]
Run Code Online (Sandbox Code Playgroud)

我不明白的是,groupby对象是由一对键和_grouper对象组成的迭代器,对list()groupby对象的调用不应该消耗该_grouper对象吗?

即使消耗掉了,我又如何[-3]从第二个元素中得到呢?

python grouping iterator python-itertools

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

如何使用write()函数将结构写入文件?

我想使用write()函数将struct对象写入文件.它必须是那个功能.

我在终端的输入是:./ main.c output.dat John Doe 45

当我运行程序并打开output.dat时,有一堆字母没有意义.请帮我.

我在output.dat文件中想要的输出是:John Doe 45

我的代码:

struct Person{
  char* name;
  char* lastName;
  char* age;
};

int main(int argc, char** argv){

    struct Person human;
    /* get the argument values and store them into char*         */
    char* fileName = argv[1];
    char* name = argv[2];
    char* lastName = argv[3];
    char* age = argv[4];

    /* set the values of human object */
    human.name = name;
    human.lastName = lastName;
    human.age = age;

    /* open the file */ …
Run Code Online (Sandbox Code Playgroud)

c c++ posix file-descriptor

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

为什么我的阵列没有正确清空?

所以我将这个主数组保存在一个时间数组中。然后,我使用'\ 0'来“删除”其内部的主数组。在这一点上,如果我打印主数组,它将只打印空白。但是,如果那样的话,我使用for喜欢主数组=时间数组。x = 0 x <4 x ++时,它确实从另一个数组复制了四件事,但同时也打印了我执行“ \ 0”之前的内容

香港专业教育学院尝试了一段时间的柜台,但也没有工作。香港专业教育学院以前使用\ 0,它的工作idk为什么现在不工作

for(int y = 0; y <= strlen(numeros); y++){
    numeros[y] = '\0';
}

printf("%s\n", numeros);

for(int z = 0; z <= 4; z++){
    numeros[z] = numerosTemp[z];
}
    printf("%s\n", numeros);
Run Code Online (Sandbox Code Playgroud)

我的预期结果只是numerosTemp数组的前四个字母,但是它包含了我在\ 0之前曾经拥有的所有内容。但是在\ 0之后的printf中,它只会打印空白,所以我不明白为什么会这样

c arrays c-strings

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