xticks用法 - python描点




测试一个变量是一个列表还是元组 (8)

Python使用“鸭子打字”,即如果一个变量kwaks像一只鸭子,它肯定是一只鸭子。 在你的情况下,你可能希望它是可迭代的,或者你想访问某个索引处的项目。 你应该这样做:即在try块中for var:var[idx]的对象,并且如果发生异常,它不是鸭子...

在Python中,测试变量是否包含列表或元组的最佳方法是什么? (即集合)

Isinstance是否像这里所建议的那样邪恶? http://www.canonical.org/~kragen/isinstance/

更新:我想区分列表与字符串的最常见的原因是当我有一个无限深的嵌套树/数据结构的列表的列表的列表的字符串等,我正在探索与递归算法,我需要知道我何时击中了“叶子”节点。


使用isinstance没有任何问题,只要它不是多余的。 如果一个变量只应该是一个列表/元组,然后记录接口,并使用它。 否则,支票是完全合理的:

if isinstance(a, collections.Iterable):
    # use as a container
else:
    # not a container!

这种类型的检查确实有一些很好的用例,比如标准字符串startswith / endswith方法(尽管这些都是在CPython的C中使用显式检查来实现的,以查看它是否是元组),但有多种方式解决这个问题,正如您链接到的文章中提到的那样)。

显式检查通常比尝试将对象用作容器并处理异常要好 - 这可能会导致代码部分或不必要地运行时出现各种问题。


在Python 2.8中, type(list) is list返回false
我会建议以这种可怕的方式比较类型:

if type(a) == type([]) :
  print "variable a is a list"

(至少在我的系统上,在Mac OS X Yosemite上使用anaconda)


如何: hasattr(a, "__iter__")

它告诉返回的对象是否可以作为生成器迭代。 默认情况下,元组和列表可以,但不能是字符串类型。


如果您只需要知道是否可以将foo[123]表示法与变量一起使用,则可以使用hasattr(foo, '__getitem__') )检查是否存在__getitem__属性(这是您通过索引访问时要调用的python) hasattr(foo, '__getitem__')


将参数记录为需要成为序列,并将其用作序列。 不要检查类型。


>>> l = []
>>> l.__class__.__name__ in ('list', 'tuple')
True

if type(x) is list:
    print 'a list'
elif type(x) is tuple:
    print 'a tuple'
else:
    print 'neither a tuple or a list'




list