小编Jim*_*y C的帖子

使用Array.newInstance()创建新的泛型类型数组

实际上,我正在尝试实现合并排序算法,但在尝试实例化泛型类型数组时却陷入了相当快的困难.我不完全确定我的计划是否会成功,但现在有趣的部分(或令人沮丧的,取决于你何时问我)是merge()方法的第二行.newInstance()方法需要知道它应该启动哪个类,但即使arr1.getClass()编译完全正常,它也不会在运行时运行.

public void mergeSort(T[] arr) {

    T[] merged = merge(Arrays.copyOfRange(arr, 0, arr.length/2), Arrays.copyOfRange(arr, arr.length/2+1, arr.length-1));

}

@SuppressWarnings({"unchecked"})
public T[] merge(T[] arr1, T[] arr2) {
    // A new array of type T that will contain a merged version of arr1 and arr2
    T[] merged = (T[]) Array.newInstance(arr1.getClass(), arr1.length+arr2.length);

    int i1 = 0, i2 = 0;
    for (int i = 0; i < arr1.length + arr2.length; i++) {
        if (arr1[i1].compareTo(arr2[i2]) < 0) {
            merged[i] = arr1[i1];
            i1++;
        } else {
            merged[i] = …
Run Code Online (Sandbox Code Playgroud)

java mergesort

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

IPython使用与shell不同的$ PATH环境

我在IPython REPL中调用pip时遇到了一些问题,过了一段时间我发现IPython没有使用与我的shell相同的$ PATH环境.

$ echo $PATH
/Users/jimmy/dev/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/texbin

$ ipython
In [1]: !echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/texbin:/Users/jimmy/dev/anaconda/bin
Run Code Online (Sandbox Code Playgroud)

它确实似乎扰乱了路径顺序,我不太清楚什么是错的.

我正在使用通过oh-my-zsh安装的ZSH作为shell,如果有帮助的话.

这是sys.path()回报:

['',
 '/Users/jimmy/dev/anaconda/bin',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages/sparsesvd-0.2.2-py2.7-macosx-10.5-x86_64.egg',
 '/Users/jimmy/dev/projects/pyresult',
 '/Users/jimmy/dev/work/gavagai/userdata',
 '/Users/jimmy/dev/work/gavagai/gavapi',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python27.zip',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/plat-darwin',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/plat-mac',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/lib-tk',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/lib-old',
 '/Users/jimmy/dev/anaconda/python.app/Contents/lib/python2.7/lib-dynload',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages/runipy-0.1.0-py2.7.egg',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages/setuptools-3.6-py2.7.egg',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages/PIL',
 '/Users/jimmy/dev/anaconda/lib/python2.7/site-packages/IPython/extensions',
 '/Users/jimmy/.ipython']
Run Code Online (Sandbox Code Playgroud)

这就是os.environ['PATH']回报:

'/Users/jimmy/dev/anaconda/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/texbin'
Run Code Online (Sandbox Code Playgroud)

两者似乎都按正确的顺序排列.

感谢所有人的帮助.

python bash shell zsh ipython

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

为什么我不能将格式函数与docstrings一起使用?

我有一个像这样开始的函数:

def apply_weighting(self, weighting):
    """
    Available functions: {}
    """.format(weightings)
Run Code Online (Sandbox Code Playgroud)

我想要的是docstring打印可用加权函数的字典.但是在检查函数时,它声明没有可用的文档字符串:

In [69]: d.apply_weighting?
Type:       instancemethod
String Form:<bound method DissectSpace.apply_weighting of <dissect.DissectSpace instance at 0x106b74dd0>>
File:       [...]/dissect.py
Definition: d.apply_weighting(self, weighting)
Docstring:  <no docstring>
Run Code Online (Sandbox Code Playgroud)

怎么会?是否无法格式化文档字符串?

python docstring

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

将它们作为变量传递时,我可以更改函数参数吗?

请原谅我标题中的不良措辞,但这里有一个更长的解释:

我有一个函数,作为参数需要一些函数,用于确定从数据库中检索哪些数据,如下所示:

def customer_data(customer_name, *args):
    # initialize dictionary with ids
    codata = dict([(data.__name__, []) for data in args])
    codata['customer_observer_id'] = _customer_observer_ids(customer_name)

    # add values to dictionary using function name as key
    for data in args:
        for coid in codata['customer_observer_id']:
            codata[data.__name__].append(data(coid))
    return codata
Run Code Online (Sandbox Code Playgroud)

这使得对函数的调用看起来像这样:

customer_data('customername', target_parts, source_group, ...)
Run Code Online (Sandbox Code Playgroud)

其中一个函数使用额外参数定义:

def polarization_value(customer_observer_id, timespan='day')
Run Code Online (Sandbox Code Playgroud)

我想要的是一种以巧妙的方式更改时间跨度变量的方法.一个显而易见的方法是在customer_observer中包含一个关键字参数,并在调用的函数名称为"polarization_value"时添加一个异常,但我觉得有更好的方法可以做到这一点.

python function

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

我是否应该定义__all__,即使我在模块中使用下划线作为隐藏函数和变量的前缀?

从模块的外部用户的角度来看,都是必要的吗?

根据我的理解,通过使用下划线正确地加上隐藏函数前缀,它基本上与显式定义相同__all__,但我一直看到开发人员在他们的代码中执行这两项操作.这是为什么?

python

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

将多个文本文件视为一个大文件

我有一个python程序,它将文本文件(或者更确切地说是File对象)作为输入.我有多个大文本文件,我想像一个连接文件一样对待,使用输入.不幸的是,由于空间限制,我很难明确地创建连接文件,因此我正在寻找一种优雅的方法来"欺骗"程序,认为它毕竟只是一个文件.也就是说,当迭代完一个文件中的所有行时,我希望它从下一个文件开始,依此类推.建议?

python

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

在 GraphQL 中是否可以在对象类型级别上使用解析器?

我们正在研究一个相当复杂的 GraphQL 模式,其中我们有几个属于各种微服务的对象类型,其中每个对象类型都有一个我们可以查询的自然 API 端点。因此,如果可以直接为某些对象类型定义特定的解析器,则将非常方便,执行如下操作:

const typeDefs = gql`
    type Query {
      getBook(bookId: ID!): BookPayload
    }

    type BookPayload {
        book: Book
        userErrors: UserError
    }

    type Book {
      id: ID!
      title: String
      author: String
    }
`;

const resolvers = {
    Query: {
        getBook: (parent, args, context, info) => {
            return {
                book: { id: args.bookId }
        }
    },
    Book: (parent) => {  // this object type level resolver doesn't seem to work
        return {
            id: parent.id,
            ...fetchBookMetadata(parent.id)
        };
    }
};
Run Code Online (Sandbox Code Playgroud)

我知道这是一个微不足道的例子,可能看起来有点过度设计,但当模式开始变得非常复杂时,它确实更有意义(至少对我们而言),到处都是数百个交叉引用。现在有解决这个问题的好方法吗?

javascript apollo graphql apollo-server

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