小编Gra*_*ham的帖子

为什么数据类的类属性声明中不能具有可变的默认值?

似乎喜欢的事,很可能已被问过,但搜索的一个小时左右的时间没有结果。将默认列表参数传递给数据类看起来很有希望,但这并不是我想要的。

这是问题所在:当尝试将可变值分配给class属性时,会出现错误:

@dataclass
class Foo:
    bar: list = []

# ValueError: mutable default <class 'list'> for field a is not allowed: use default_factory
Run Code Online (Sandbox Code Playgroud)

我从错误消息中收集了应该使用以下内容的信息:

@dataclass
class Foo:
    bar: list = field(default_factory=list)
Run Code Online (Sandbox Code Playgroud)

但是为什么不允许可变的默认值?是否要强制避免可变的默认参数问题

python python-3.x

15
推荐指数
5
解决办法
3165
查看次数

为什么循环导入会使用`isinstance`导致对象标识出现问题?

在隔离一个bug几个小时后,我想出了以下MCVE示例来演示我遇到的问题:

a.py:

from b import get_foo_indirectly

class Foo:
    pass

if __name__ == '__main__':
    print("Indirect:", isinstance(get_foo_indirectly(), Foo))
    print("Direct:", isinstance(Foo(), Foo))
Run Code Online (Sandbox Code Playgroud)

b.py:

def get_foo_indirectly():
    from a import Foo
    return Foo()
Run Code Online (Sandbox Code Playgroud)

a.py的预期输出是:

Indirect: True
Direct: True
Run Code Online (Sandbox Code Playgroud)

实际输出是:

Indirect: False
Direct: True
Run Code Online (Sandbox Code Playgroud)

此外,如果我创建一个单独的模块c.py,输出是按预期的:

from a import Foo
from b import get_foo_indirectly

if __name__ == '__main__':
    print("Indirect:", isinstance(get_foo_indirectly(), Foo))
    print("Direct:", isinstance(Foo(), Foo))
Run Code Online (Sandbox Code Playgroud)

显然,isinstance进口机械之间的相互作用并不像我预期的那样.好像使用循环进口让我很难受.为什么?这是Python的预期行为吗?

请注意,这对我遇到此行为的实际上下文非常简单; 模块a和b都是大模块,而b是分开的,因为它有一个与a不同的目的.现在我已经看到了循环进口的后果,我可能会将它们结合起来,也许会降低b中一些冗长的行为.

python python-3.x

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

学习GWT有用吗?

我开发Web应用程序,在我的工作中,到目前为止,每当发生一些JS或CSS怪癖时,我一直在与各种浏览器进行战斗.我相信使用GWT将从我从这个描述中理解的东西中获得巨大帮助:

今天编写Web应用程序是一个单调乏味且容易出错的过程.开发人员可以将90%的时间花在浏览器怪癖上.此外,构建,重用和维护大型JavaScript代码库和AJAX组件可能既困难又脆弱.Google Web Toolkit(GWT)允许开发人员使用Java编程语言快速构建和维护复杂但高性能的JavaScript前端应用程序,从而减轻了这一负担.

关于GWT的一般意见是什么?学习和使用它有多容易?

编辑:我是一名Java开发人员!

java gwt

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

正在写`if(foobar ==("this"||"that"))`来检查foobar是否等于任何主要语言支持的"this"或"that"?

我有一个微弱的记忆,能够用这样的语言写一个if语句:

if (foobar == ("this" || "that"))
Run Code Online (Sandbox Code Playgroud)

代替:

if (foobar == "this" || foobar == "that")
Run Code Online (Sandbox Code Playgroud)

后者更冗长,因此对我来说不那么美观.

以前的公约是否支持任何主要语言?有没有理由不支持这一点?

programming-languages if-statement

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

多线程矩阵乘法

我编写了一个多线程矩阵乘法.我相信我的方法是正确的,但我不是百分百肯定.关于线程,我不明白为什么我不能只运行一个(new MatrixThread(...)).start()而不是使用ExecutorService.

此外,当我对多线程方法与经典方法进行基准测试时,经典方法快得多......

我究竟做错了什么?

矩阵类:

import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

class Matrix
{
   private int dimension;
   private int[][] template;

   public Matrix(int dimension)
   {
      this.template = new int[dimension][dimension];
      this.dimension = template.length;
   }

   public Matrix(int[][] array) 
   {
      this.dimension = array.length;
      this.template = array;      
   }

   public int getMatrixDimension() { return this.dimension; }

   public int[][] getArray() { return this.template; }

   public void fillMatrix()
   {
      Random randomNumber = new Random();
      for(int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

java multithreading

5
推荐指数
2
解决办法
688
查看次数

将Backus-Naur形式语法转换为.Net正则表达式

有没有办法将以下Backus-Naur形式(BNF)语法转换为.Net正则表达式?(我并没有停留在BNF,但我认为这可能是解释我想要做的事情的最佳方式).

<field> ::= "<<" <fieldname> <options> ">>"

<options> ::= "" | "(" <option> ")"

<option> ::= "" | 
             <option> <non-paren> | 
             <option> <escaped-character>

<escaped-character> ::= "\\" | "\)"

<non-paren> ::= any character but paren

<fieldname> ::= any string that doesn't contain "(" or ">>"
Run Code Online (Sandbox Code Playgroud)

我很接近,但我无法弄清楚如何应对逃避\).这将捕获命名组中的fieldnameoption:

<<(?<fieldname>.\*?)(\((?<option>.*?)\))?>>
Run Code Online (Sandbox Code Playgroud)

编辑

事实证明,我对BNF语法比我想象的更生气.

我试图得到的是括号是特殊字符.在"选项"部分中,它们必须通过斜杠进行转义.(还必须转义斜线).

.net regex bnf

4
推荐指数
2
解决办法
6365
查看次数

学习用于游戏编程的C++的资源

我是一个相对较新的C++新手,并在游戏行业工作了几个月.我希望重新回到这个行业,并了解一个人需要成为一名非常优秀的C++程序员(主要是因为他们开始制作游戏的竞争力).我想知道网上是否有任何非常好的网站可以帮助解决这个问题.基本上我正在寻找能够帮助我掌握C++概念的东西,并通过练习编程实例帮助我成为一名优秀的程序员.

c++ game-development

4
推荐指数
5
解决办法
1422
查看次数

是否有新的编程语言列表?

有没有人知道列出新脚本/编程语言(或旧语言)的网站?我不是在谈论现有语言的新版本,只是大多数人都没有听说过的新版本或旧版本.即使他们不是好语言......?

programming-languages scripting-language

4
推荐指数
2
解决办法
422
查看次数

确定何时暂停HTML5音频或使用jQuery完成跟踪

我正在制作一个HTML5音频标签,我想在歌曲结束时触发一个事件.这有可能与jQuery?

我的jQuery代码是:

      $(document).ready(function(){

var music = new Audio("sample.mp3");
$('#play').click(function(){
    music.play();
});

$('#pause').click(function(){
 music.pause();
});

         });
Run Code Online (Sandbox Code Playgroud)

我的HTML5是:

<input type="button" value="Play" id="play" />
<input type="button" value="Pause" id=pause" />
Run Code Online (Sandbox Code Playgroud)

audio jquery html5

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

使用包在多个模块之间拆分Python类

我在python中编写了一些代码作为一个类,但是现在我正在尝试将它作为一个包进行分发,并且我在弄清楚不同部分应该如何组合时遇到了一些麻烦.

所以,正如我最初编写代码时,我有一个包含一些函数的类,其中包含一些__init__函数.我现在已将这些函数中的每一个拆分为自己的以函数名称命名的文件,但我不确定将init函数放在何处,因为它需要参数.一个例子如下.

原始格式:

class className(object):

    def __init__(self, arg1, arg2):
         self.arg1 = arg1
         self.arg2 = arg2

    def func1(self):

    def func2(self, arg3):
Run Code Online (Sandbox Code Playgroud)

使用:

import name

a = name.className(arg1, arg2)
a.func1()
a.func2(arg3)
Run Code Online (Sandbox Code Playgroud)

现在文件树是:

Name/
    /className
        __init__.py
        func1.py
        func2.py
Run Code Online (Sandbox Code Playgroud)

并包括其他功能.我想保持与原始相同的基本使用模式.

现在,我的问题是该__init__功能应该去哪里?在__init__.py文件里面?别的地方?另一个问题是我想在__init__.py文件中放入一些导入; 我知道他们应该进入__init__.py文件,但我不知道它们与__init__函数的关系.任何帮助表示赞赏.

python

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