小编Ela*_*zar的帖子

如何将python dict对象转换为java等效对象?

我需要将python代码转换为等效的java代码.Python通过提供许多快捷功能,使开发人员的生活变得非常轻松.但是现在我需要将它迁移到Java.我想知道java中dict对象的等价物是什么?我尝试过使用HashMap,但生活很糟糕.首先考虑一下,

#  Nodes is a dictionary -> Key : (Name, Strength)
for node, (name, strength) in nodes.items():
    nodes[node] = (name, new_strength)
Run Code Online (Sandbox Code Playgroud)

那么如何将其转换为Java呢?对于初学者我使用HashMap对象,所以,

Map<Integer, List> nodesMap = new HashMap<Integer,List>();
/* For iterating over the map */
Iterator updateNodeStrengthIterator = nodesMap.entrySet().iterator(); 
while(updateNodeStrengthIterator.hasNext()){ }    
Run Code Online (Sandbox Code Playgroud)

我的问题是获取包含名称和强度的List部分,然后更新Strength部分.有没有可行的方法呢?我应该考虑一些不同的数据结构吗?请帮忙.

python java dictionary hashmap

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

NameError:未定义名称'python'

我在Windows命令行中遇到此错误,进行了广泛的搜索,但无法得到一个完美的答案.请在下面找到错误并帮助解决.

python
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'python' is not defined
>>>
Run Code Online (Sandbox Code Playgroud)

提前致谢,

python nameerror

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

如何从文件中逐字节读取

我想从binnary文件读取4个第一个字节,这是一个song.wav类型.在.wav文件中,4个第一个字节必须是52-46-49-49,我必须读取它们以便稍后检查它们是否为真.

问题是我在fread线上有一个编译恐怖,它说invalid conversion from "unsigned char" to "void", initialzing argument 1 of 'size_t fread(void*,size_t,size_t,FILE*)而且我不知道它意味着什么.

我在上一个主题中看到,如果我想逐字节读取,这就是必须完成fread的方式.如果有人知道我如何逐字节读取并将它们存储在一个很棒的数组中.谢谢.

void checksong(char *argv[]){
    FILE *myfile;
    int i;
    unsigned char k[4];
    myfile=fopen(argv[2],"r");
    i=0;
    for(i=0; i<4; i++){
       fread(k[i],1,1,myfile);
    }
    for(i=0; i<4; i++){
       printf("%c\n", k[i]);
    }                                  
    return ;
}
Run Code Online (Sandbox Code Playgroud)

c

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

Python中的函数模式/谓词匹配

我希望能够分派函数的不同实现,不仅基于第一个参数的类型,而且基于任意谓词.目前我必须这样做:

def f(param):
    try:
        if param > 0:
            # do something
    except TypeError:
        pass
    try:
        if all(isinstance(item, str) for item in param):
            # do something else
    except TypeError:
        raise TypeError('Illegal input.')
Run Code Online (Sandbox Code Playgroud)

这是我希望能够做到的精神:

@generic
def f(param):
    raise TypeError('Illegal input.')  # default

@f.when(lambda param: param > 0)
def f_when_param_positive(param):
    # do something

@f.when(lambda param: all(isinstance(item, str) for item in param))
def f_when_param_iterable_of_strings(param):
    # do something else
Run Code Online (Sandbox Code Playgroud)

它类似于Python 3 singledispatch,但singledispatch只支持对类型的调度,而不支持任意谓词.

TL; DR:是否有一个库允许基于任意谓词(不仅是参数的类型)的基于谓词的函数调度?

python dynamic-dispatch libraries

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

用元类实现单例

下面的代码是我如何使用元类实现单例,并且它运行良好

class Test_MetaClass(type):

    def __init__(cls, name, bases, dict):
        super(Test_MetaClass, cls).__init__(cls, bases, dict)
        cls._instance = None
        print 'Test_MetaClass __init__'

    def __call__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super(Test_MetaClass, cls).__call__(*args, **kwargs)
        print 'Test_MetaClass __call__'
        return cls._instance


class A(object):
    __metaclass__ = Test_MetaClass
    def __init__(self):
        print 'A __init__ triggered'

a = A()
b = A()
Run Code Online (Sandbox Code Playgroud)

输出:

Test_MetaClass __init__
A __init__ triggered
Test_MetaClass __call__
Test_MetaClass __call__
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么b = A()直接去Test_MetaClass.__call__和忽略__init__

python metaclass python-2.x

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

C中的"with"宏

我正在寻找一个类似于with-construct的宏.用法应该是这样的:

with (lock(&x), unlock(&x)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

它可能对其他一些用途有用.

我想出了这个宏:

#define __with(_onenter, _onexit, v) \
    for (int __with_uniq##v=1; __with_uniq##v > 0; )\
        for (_onenter; __with_uniq##v > 0; _onexit) \
            while (__with_uniq##v-- > 0)

#define _with(x, y, z) __with(x, y, z)
#define with(_onenter, _onexit) _with(_onenter, _onexit, __COUNTER__)
Run Code Online (Sandbox Code Playgroud)

它有3个嵌套循环,因为它应该:

  1. 初始化循环计数器(当然只有C99)
  2. 可能初始化变量_onenter(例如with (int fd=open(..), close(fd)))
  3. 允许break在代码块内部.(continue也是允许的.宏可以调整到assert()它)

我在XV6操作系统的代码上使用它,它看起来非常有用.

我的问题是 - 这样一个宏的最大问题是什么?我的意思是,除了仅仅使用C宏(特别是实现新的控制流构造的宏).

到目前为止已发现这些缺点/问题:

  1. 不支持returngoto(但它可以goto在内核代码中保存一些内容)
  2. 不支持错误(例如fd < 0).我认为这个是可以解决的.
  3. 仅限gnu89/c99及以上版本(循环计数器.不需要唯一的变量技巧)
  4. 比简单的锁定解锁效率低一些.我认为这是微不足道的.

还有其他问题吗?有没有更好的方法在C中实现类似的构造?

c with-statement c-preprocessor

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

如何从定义的根目录获取文件的相对路径?

我有以下内容,

base_dir = 'blog_images'
dir_to_serve = os.path.abspath(settings.MEDIA_ROOT + base_dir)

images = []
allowed_types = ('.jpg', '.jpeg', '.png', '.gif')
for  root, dirs, files in os.walk(dir_to_serve,topdown=False):
    for image_file in files:
        if image_file.endswith((allowed_types)):
            images.append(image_file)
Run Code Online (Sandbox Code Playgroud)

我的目录结构如下;

media --> blog_images --> <year> --> <month> --> <date> --> files
Run Code Online (Sandbox Code Playgroud)

使用 os.walk() 我能够获取每个目录的根目录等,但我想要完成的是构建一个年/月/日期的字典键,然后列出该键下的图像。例如,2013 年有月份、日期,然后是每天的图像,以便我可以在模板中按日期访问它们。

如何获取该循环中文件相对于 blog_images 的相对路径?如何构建在模板中使用的字典?我应该关注哪些功能?

python

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

如果传入无效值,则抛出异常

我有一个类,现在我正在更改setter以在传入无效值时抛出异常.它需要:

  • 答:(dueDay必须介于1和31之间,且dueMonth必须介于1和12之间.)异常显示不在setter方法中处理.
  • B.更改主要方法,TodoItem以便它向用户询问任务,截止日期和到期月份,并将此信息存储为新信息TodoItem.
  • C.更改构造函数,以便将其称为新的setter方法.如果抛出异常,则应在main方法中处理.应告知用户他们输入无效的日期或月份,并要求提供正确的日期或月份.

我的班级是:

(我已经更改了setter以抛出异常,但是,它不起作用,我想我应该更改main函数的构造函数,但是我不知道该怎么做.)

public class TodoItem {

    private String task;
    private int dueMonth;
    private int dueDay;
    private boolean isDone;

    // class variables
    private static int numItems;
    private static int numDone;

    // constructor
    public TodoItem(String taks,int day,int month) {
        this.task = task;
        dueDay = day;
        dueMonth = month;
        isDone = false;

        numItems++;
    }

    // second constructor
    public TodoItem(String task) {
        this.task = task;
        isDone = false;

        numItems++;
    }

    public static …
Run Code Online (Sandbox Code Playgroud)

java exception throw

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

python 中的 __pre_init__ 功能?

我想让字符串比较不区分大小写。为此,我想创建一个只有一个字符串字段的不可变类。在构造函数中,我想在将值分配给字段之前调用 lower() 。

我想尽可能多地使用标准类,如命名元组或数据类。使用该__post_init__函数(参见例如如何在Python中的数据类中使用__post_init__方法)感觉就像是一种黑客攻击。这也让我想知道在我在函数中更改它后该字段是否仍然冻结__post_init__

但是,我找不到__pre_init__功能。有没有更好的办法?

python

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

ImportError: 无法从 'umap' 导入名称 'UMAP' (c:\users\user\anaconda3\lib\site-packages\umap\__init__.py)

我已经遵循了这篇文章中的提示。

问题是我运行这行代码时出现错误:

from bertopic import BERTopic

关于如何解决该问题有什么建议吗?

python-3.x

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