小编dir*_*obs的帖子

在__new__中使用object .__ new__的缺点是什么?

编码异常类,我遇到了这个错误:

TypeError: object.__new__(A) is not safe, use Exception.__new__()

这里有一个类似的问题: TypeError:object .__ new __(int)不安全,使用int .__ new __().所以__new__因以下原因而被弃用:

[Python-Dev] __new__弃用

Guido van Rossum

"这条消息意味着它所说的内容.:-)调用object.__new__()多个类参数是没有意义的 ,任何这样做的代码都只是将这些args转移到一个黑洞中."

但我在3.3中发出的"不安全"的警告是可怕的.我试着理解使用的含义object.__new__,让我们考虑一下这个例子:

>>> class A(Exception):
...     def __new__(cls, *args):
...             return object.__new__(A)
...
>>> A()
TypeError: object.__new__(A) is not safe, use Exception.__new__()
Run Code Online (Sandbox Code Playgroud)

悲惨地失败.另一个例子:

>>> class A(object):
...     def __new__(cls, *args):
...             return object.__new__(A)
...
>>>
>>> A()
<__main__.A object at 0x0000000002F2E278>
Run Code Online (Sandbox Code Playgroud)

工作良好.虽然,object就像Exception他们的角色一样,它是一个内置类,但它们共享内置类的特性.现在Exception,第一个例子提出TypeError,但是 …

python

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

为什么class.__weakref__不是None,而instance.__weakref__是None?

__weakref__与弱引用有关。我了解弱引用背后的整个想法以及我可以在哪里使用它们。我唯一不明白的事情如下所述:

实例本身没有属性__weakref__,与类不同,因此实例继承 __weakref__自类,这意味着A.__weakref__应该与以下内容相同 A().__weakref__

>>> class A: pass
...
>>> A().__dict__            # Each instance starts out as an empty namespace 
{}
>>> A.__weakref__ is None; 
False
>>> A().__weakref__ is None   #But this is True!
True 
Run Code Online (Sandbox Code Playgroud)

为什么whileA.__weakref__不是while实例继承自类?Noneinstance.__weakref__None__weakref__

python weak-references python-internals

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

如何避免&lt;defunct&gt;进程?

我从主控主机到从属主机进行 ZFS 远程复制,其中我有一个在主控主机上运行的 Perl 脚本。

对于每个文件系统,它会 ssh 到远程主机并以侦听模式启动 mbuffer,然后脚本继续发送数据。成功后 mbuffer 应自行退出。

问题

通过 ssh 在远程主机上启动 mbuffer 然后能够继续执行脚本是相当困难的。我最终做了你可以在下面看到的事情。

问题是,在脚本退出之前,它会<defunct>为每个文件系统留下一个进程。

问题

是否可以避免这些<defunct>流程?

sub mbuffer {
    my ($id, $zfsPath) = @_;

    my $m = join(' ', $mbuffer, '-I', $::c{port});
    my $z = join(' ', $zfs, 'receive', , $zfsPath);
    my $c = shellQuote($ssh, $::c{slaves}{$id}, join('|', $m, $z));

    my $pm = Parallel::ForkManager->new(1);
    my $pid = $pm->start;
    if (!$pid) {
        no warnings;  # fixes "exec" not working
        exec($c);
        $pm->finish;
    }

    sleep 3; …
Run Code Online (Sandbox Code Playgroud)

linux ssh perl fork zombie-process

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

改变Python的语法

在Cpython的Grammar文件夹下,有一个文件Grammar,它指定了Python编程语言的主要语法.修改这个会改变编程语言的主要语法吗?

python grammar

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

__next__和__str__是否由内部等效的next和str函数调用?

从学习python book第5版:

第421页,脚注2:

从技术上讲,for循环调用内部等价物I.__next__,而不是next(I)这里使用的,尽管两者之间几乎没有任何区别.您的手动迭代通常可以使用任一呼叫方案.

这到底是什么意思?这是否意味着在循环或任何内置迭代上下文中I.__next__由C函数而不是str内置函数调用for

页面914:

__str__首先尝试print操作和str内置函数(内部等效print运行).它通常应返回用户友好的显示.

除了书之外,我从书中理解,Python是否在内部调用__str____next__使用C函数?

python python-internals

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

如何使用 Python 代码理解动态范围?

我是一名来自 Python 背景的程序员,通常使用词法范围,我想了解动态范围。网上查了下,还是不太明白。例如,我读过这个页面,这让我觉得事情变得容易多了,尤其是代码片段:

#In Dynamic scoping:         
    const int b = 5;        
    int foo()               
    {                       
       int a = b + 5;
       return a;
    }

    int bar()
    {
       int b = 2;
       return foo();
    }

    int main()
    {
       foo(); // returns 10
       bar(); // returns 7
       return 0;
    }


#In lexical scoping:         
    const int b = 5;        
    int foo()               
    {                       
       int a = b + 5;
       return a;
    }

    int bar()
    {
       int b = 2;
       return foo();
    }

    int …
Run Code Online (Sandbox Code Playgroud)

python scope

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

当消息到达服务器而没有在java中读取流时,会发生什么?

如果我有一台服务器和一台客户端,我在两者之间打开了一个套接字:

1.客户端是否有可能有一个printWriter流,以便将内容写入套接字,但服务器在同一时间内不会有一个bufferReader?

  1. 如果1的答案为是,如果该客户端将向服务器发送消息(当前没有读取流),则该消息将发生什么,直到服务器将创建读取流并读取消息?

谢谢

java sockets client client-server server

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

为什么添加UTF-8编码的两个字节不能给出字符的代码点?

首先,我对UTF-8编码方案如何工作的理解可能是错的,因为我刚刚开始使用unicode.我遇到的一个有趣的网页说:

但是,有一种与ASCII兼容的Unicode字符编码方案.它被称为UTF-8.在UTF-8下,0到127之间字符编号的字节编码是单字节的二进制值,就像ASCII一样.但是,对于128到65535之间的字符数,使用多个字节.如果第一个字节的值介于128和255之间,则会将其解释为指示要遵循的字节数.后面的字节编码单个字符编号.字符编码中的所有字节也具有128到255之间的值,因此在0到127之间的单字节字符和作为多字节字符表示的一部分的字节之间永远不会有任何混淆.

例如,拉丁语1和Unicode中字符编号为233的字符é由传统Latin 1编码中的值为233的单个字节表示,但表示为两个字节,其值为195和169(以UTF为单位) -8.

在我的解释和理解中,因为字符é在unicode(233)中的值大于128,所以它由两个字节表示.这两个字节的值介于128和255之间,以区分仅需要一个字节的ASCII字符,技术上使用7位.乙UT斯达康如何才能达到使用存储在两个字节的值195和169的数量233?或者从两个字节中获取233的过程是什么?显然,如果我们添加两个值(两个字节),我们得到195 + 169 = 364 ,这与字符é,233 的代码点不同.我在这里缺少什么?

*我完全理解一些字符需要更多字节来表示,但这是另一个故事.

unicode encoding utf-8

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

为什么os.system()在放入for循环时不会运行?

我有以下(伪)代码:

import os

for s in settings:
    job_file = open("new_file_s.sh", "w")
    job_file.write("stuff that depends on s")
    os.system(command_that_runs_file_s)
Run Code Online (Sandbox Code Playgroud)

不幸的是,发生的事情是对应的文件s = settings[0]没有执行,但随后s = settings[1]执行.显然,os.system()不喜欢运行最近使用的文件open(),特别是在for循环的同一次迭代中.

对我来说,修复是确保os.system()在for循环的先前迭代中初始化任何执行的文件:

import os

# Stagger so that writing happens before execution:
job_file = open("new_file_settings[0].sh", "w")
job_file.write("stuff that depends on settings[0]")

for j in range(1, len(settings)):
    job_file = open("new_file_settings[j].sh", "w")
    job_file.write("stuff that depends on settings[j]")

    # Apparently, running a file in the same iteration of a for loop is …
Run Code Online (Sandbox Code Playgroud)

python subprocess os.system

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