Python编程语言有哪些鲜为人知但有用的功能?
在闲置浏览命名空间的同时,我注意到一个名为" Ellipsis " 的奇怪物体,它似乎没有或做任何特殊的事情,但它是一个全局可用的内置.
在搜索之后,我发现它被Numpy和Scipy用于切片语法的一些模糊变体......但几乎没有别的.
这个对象是否专门用于支持Numpy + Scipy?省略号是否具有任何通用含义或用途?
D:\workspace\numpy>python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> Ellipsis
Ellipsis
Run Code Online (Sandbox Code Playgroud) 我刚刚获得了一些python脚本的奇怪输出:
[[(7, 6), (6, 4), (7, 2)], [...], [...], [...], [(7, 6), (8, 4), (7, 2)], [...], [...], [...], [...], [...], [...], [...]]
Run Code Online (Sandbox Code Playgroud)
输出应该是元组列表的列表.但我不知道为什么会出现.
这是什么意思?
我不认为它是一个空列表,因为空列表是[].这些可能是重复的吗?
我在一个函数中使用argspec,该函数将另一个函数或方法作为参数,并返回一个这样的元组:
(("arg1", obj1), ("arg2", obj2), ...)
Run Code Online (Sandbox Code Playgroud)
这意味着传递函数的第一个参数是arg1,它的默认值为obj1,依此类推.
这是一个问题:如果它没有默认值,我需要一个占位符值来表示这一点.我不能使用None,因为那时我无法区分无默认值和默认值是None.对于False,0,-1等也是如此.我可以使它成为一个单元素的元组,但是然后用于检查它的代码将是丑陋的,我不能轻易将它变成一个字典.所以我想我会创建一个非类似的非对象,这就是我想出来的:
class MetaNoDefault(type):
def __repr__(cls):
return cls.__name__
__str__ = __repr__
class NoDefault(object):
__metaclass__ = MetaNoDefault
Run Code Online (Sandbox Code Playgroud)
现在("arg1", NoDefault)表明arg1没有默认值,我可以做类似的事情if obj1 is NoDefault:.元类使它打印为NoDefault而不是<class '__main__.NoDefault'>.
有没有理由不这样做?有更好的解决方案吗?
我知道如何采取x[:,:,:,:,j,:](采取第4维的第j个切片).
如果维度在运行时已知,并且不是已知的常量,是否有办法做同样的事情?
它叫什么?我不知道如何搜索它; 我试着用谷歌把它称为省略号.我不是指在交互式输出中使用点来表示没有显示完整数组,但是正如我正在查看的代码中那样,
xTensor0[...] = xVTensor[..., 0]
从我的实验来看,它似乎与:索引中的功能相似,但代表多个:,x[:,:,1]相当于x[...,1].
我想要numpy.array从NxM到NxMx3的映射a ,其中三个元素的向量是原始条目的函数:
lambda x: [f1(x), f2(x), f3(x)]
Run Code Online (Sandbox Code Playgroud)
但是,像numpy.vectorize不允许更改尺寸的事情.当然,我可以创建一个零数组并创建一个循环(这就是我现在正在做的事情),但它既没有Pythonic也没有效率(就像Python中的每个循环一样).
有没有更好的方法在numpy.array上执行元素操作,为每个条目生成一个向量?
有人可以帮忙吗,Python 中 Ellipse 的用途是什么,并提供一些示例以及何时使用它?
我对此进行了一些搜索,它可以与函数一起使用:
def add():
...
Run Code Online (Sandbox Code Playgroud)
并在列表中进行切片。
import numpy
n = numpy.arange(16).reshape(2, 2, 2, 2)
print(n)
print('----------------')
print(n[1,...,1])
[[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]]
[[[ 8 9]
[10 11]]
[[12 13]
[14 15]]]]
----------------
Ellipsis:[[ 9 11]
[13 15]]
Run Code Online (Sandbox Code Playgroud)