标签: python

如何检查变量是否存在?

我想检查变量是否存在.现在我正在做这样的事情:

try:
   myVar
except NameError:
   # Do something.
Run Code Online (Sandbox Code Playgroud)

还有其他方法没有例外吗?

python variables exception

849
推荐指数
9
解决办法
91万
查看次数

什么是Python中的"命名元组"?

阅读Python 3.1中更改,我发现了一些......意外的:

sys.version_info元组现在是一个命名元组:

我之前从未听说过命名元组,我认为元素可以用数字(如元组和列表)或键(如dicts)索引.我从没想过他们可以两种方式编入索引.

因此,我的问题是:

  • 什么叫元组?
  • 怎么用?
  • 为什么/何时应该使用命名元组而不是普通元组?
  • 为什么/何时应该使用普通元组而不是命名元组?
  • 是否有任何类型的"命名列表"(命名元组的可变版本)?

python tuples namedtuple

843
推荐指数
9
解决办法
32万
查看次数

2D阵列中的峰值检测

我正在帮助一家兽医诊所测量狗爪下的压力.我使用Python进行数据分析,现在我不得不试图将爪子分成(解剖学)子区域.

我制作了每个爪子的2D阵列,它由爪子随时间加载的每个传感器的最大值组成.这是一个爪子的例子,我用Excel绘制了我想要"检测"的区域.这些是传感器周围的2×2个盒子,具有局部最大值,它们一起具有最大的总和.

替代文字

所以我尝试了一些实验并决定只查找每列和每行的最大值(由于爪子的形状,不能在一个方向上查看).这似乎可以很好地"检测"单独脚趾的位置,但它也标记了相邻的传感器.

替代文字

那么告诉Python哪些最大值是我想要的最好的方法是什么?

注意:2x2正方形不能重叠,因为它们必须是单独的脚趾!

我也采用2x2作为方便,欢迎任何更高级的解决方案,但我只是一个人类运动科学家,所以我既不是真正的程序员也不是数学家,所以请保持"简单".

这是一个可以加载版本np.loadtxt


结果

所以我尝试了@jextee的解决方案(见下面的结果).正如你所看到的,它在前爪上很有效,但后腿的效果不太好.

更具体地说,它无法识别出第四个脚趾的小峰值.这显然是循环看起来自上而下朝向最低值的事实所固有的,而不考虑这是什么.

有谁知道如何调整@jextee的算法,以便它也可以找到第4个脚趾?

替代文字

由于我还没有处理任何其他试验,我不能提供任何其他样品.但我之前提供的数据是每只爪子的平均值.该文件是一个数组,其最大数据为9个爪子,它们与盘子接触的顺序.

该图像显示了它们如何在空间上展开.

替代文字

更新:

我已经为任何感兴趣的人建立了一个博客,我已经设置了一个包含所有原始测量值的SkyDrive.所以对于要求更多数据的人来说:给你更大的力量!


新更新:

所以在我得到关于爪子检测爪子分类的问题的帮助后,我终于能够检查每个爪子的脚趾检测!事实证明,除了像我自己的例子中那样大小的爪子之外,它在任何东西上都不能很好地工作.事后看来,任意选择2x2是我自己的错.

这是一个错误的例子:钉子被识别为脚趾,"脚跟"如此宽,它被识别两次!

替代文字

爪子太大,因此在没有重叠的情况下采用2x2尺寸会导致一些脚趾被检测到两次.相反,在小型犬中,它经常无法找到第五个脚趾,我怀疑它是由2x2区域太大引起的.

对我的所有测量结果进行了当前的解决方案之后,我得出了令人吃惊的结论:几乎所有的小型犬都没有找到第5个脚趾,并且对于大型犬的50%以上的影响它会发现更多!

显然我需要改变它.我自己的猜测是将neighborhood小型狗的体型改为小型犬,大型犬则更大.但是generate_binary_structure不会让我改变数组的大小.

因此,我希望其他人有更好的建议来定位脚趾,也许脚趾区域尺寸与爪子尺寸一致?

python image-processing

843
推荐指数
18
解决办法
9万
查看次数

错误:无法找到vcvarsall.bat

我试图安装Python包dulwich:

pip install dulwich
Run Code Online (Sandbox Code Playgroud)

但我得到一个神秘的错误信息:

error: Unable to find vcvarsall.bat
Run Code Online (Sandbox Code Playgroud)

如果我尝试手动安装包,也会发生同样的情况:

> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat
Run Code Online (Sandbox Code Playgroud)

python windows pip failed-installation setup.py

842
推荐指数
18
解决办法
87万
查看次数

检查变量是否为整数

如何检查变量是否为整数?

python

838
推荐指数
17
解决办法
118万
查看次数

如何按键对字典进行排序?

这将是一个很好的方式,从去{2:3, 1:89, 4:5, 3:0}{1:89, 2:3, 3:0, 4:5}
我检查了一些帖子,但他们都使用返回元组的"已排序"运算符.

python sorting dictionary

838
推荐指数
22
解决办法
112万
查看次数

我如何获得Python程序的执行时间?

我在Python中有一个命令行程序需要一段时间才能完成.我想知道完成跑步所需的确切时间.

我看过这个timeit模块,但它似乎只适用于小代码片段.我想要整个计划的时间.

python time

831
推荐指数
30
解决办法
94万
查看次数

在Python中创建单例

这个问题不是讨论单身人士设计模式是否可取,反模式,还是任何宗教战争,而是讨论如何以最蟒蛇的方式在Python中最好地实现这种模式.在这种情况下,我将"最pythonic"定义为表示它遵循"最小惊讶原则".

我有多个类可以成为单例(我的用例是记录器,但这并不重要).当我可以简单地继承或装饰时,我不希望在添加gumph的几个类中混乱.

最好的方法:


方法1:装饰者

def singleton(class_):
    instances = {}
    def getinstance(*args, **kwargs):
        if class_ not in instances:
            instances[class_] = class_(*args, **kwargs)
        return instances[class_]
    return getinstance

@singleton
class MyClass(BaseClass):
    pass
Run Code Online (Sandbox Code Playgroud)

优点

  • 装饰器的添加方式通常比多重继承更直观.

缺点

  • 虽然使用MyClass()创建的对象将是真正的单例对象,但MyClass本身是一个函数,而不是一个类,因此您无法从中调用类方法.也是为了m = MyClass(); n = MyClass(); o = type(n)();那时m == n && m != o && n != o

方法2:基类

class Singleton(object):
    _instance = None
    def __new__(class_, *args, **kwargs):
        if not isinstance(class_._instance, class_):
            class_._instance = object.__new__(class_, *args, **kwargs)
        return class_._instance

class MyClass(Singleton, …
Run Code Online (Sandbox Code Playgroud)

python singleton metaclass decorator base-class

829
推荐指数
14
解决办法
29万
查看次数

什么是标准的Python文档字符串格式?

我在Python中看到过几种不同的写作文档字符样式,是官方还是"同意"的风格?

python documentation coding-style docstring

826
推荐指数
7
解决办法
37万
查看次数

Python的super()如何与多重继承一起工作?

我是Python面向对象编程的新手,我很难理解super()函数(新样式类),尤其是涉及多重继承时.

例如,如果你有类似的东西:

class First(object):
    def __init__(self):
        print "first"

class Second(object):
    def __init__(self):
        print "second"

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__()
        print "that's it"
Run Code Online (Sandbox Code Playgroud)

我没有得到的是:Third()该类是否会继承构造函数方法?如果是,那么将使用super()运行哪一个?为什么?

如果你想运行另一个怎么办?我知道它与Python方法解析顺序(MRO)有关.

python multiple-inheritance

825
推荐指数
14
解决办法
30万
查看次数