实际上,我正在尝试实现合并排序算法,但在尝试实例化泛型类型数组时却陷入了相当快的困难.我不完全确定我的计划是否会成功,但现在有趣的部分(或令人沮丧的,取决于你何时问我)是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) 我在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)
两者似乎都按正确的顺序排列.
感谢所有人的帮助.
我有一个像这样开始的函数:
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)
怎么会?是否无法格式化文档字符串?
请原谅我标题中的不良措辞,但这里有一个更长的解释:
我有一个函数,作为参数需要一些函数,用于确定从数据库中检索哪些数据,如下所示:
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"时添加一个异常,但我觉得有更好的方法可以做到这一点.
从模块的外部用户的角度来看,都是必要的吗?
根据我的理解,通过使用下划线正确地加上隐藏函数前缀,它基本上与显式定义相同__all__,但我一直看到开发人员在他们的代码中执行这两项操作.这是为什么?
我有一个python程序,它将文本文件(或者更确切地说是File对象)作为输入.我有多个大文本文件,我想像一个连接文件一样对待,使用输入.不幸的是,由于空间限制,我很难明确地创建连接文件,因此我正在寻找一种优雅的方法来"欺骗"程序,认为它毕竟只是一个文件.也就是说,当迭代完一个文件中的所有行时,我希望它从下一个文件开始,依此类推.建议?
我们正在研究一个相当复杂的 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)
我知道这是一个微不足道的例子,可能看起来有点过度设计,但当模式开始变得非常复杂时,它确实更有意义(至少对我们而言),到处都是数百个交叉引用。现在有解决这个问题的好方法吗?