当前位置: 首页 > 面试题库 >

如何分辨一个变量是可迭代的但不是字符串

凌钊
2023-03-14
问题内容

我有一个带有参数的函数,该参数可以是单项或双项:

def iterable(arg)
    if #arg is an iterable:
        print "yes"
    else:
        print "no"

以便:

>>> iterable((“ f”,“ f”))
是

>>> iterable([“ f”,“ f”])
是

>>> iterable(“ ff”)
没有

问题是字符串在技术上是可迭代的,因此在尝试时我不能只捕捉ValueError
arg[1]。我不想使用isinstance(),因为这不是一个好习惯(或者有人告诉我)。


问题答案:

使用isinstance(我不明白为什么这是不好的做法)

import types
if not isinstance(arg, types.StringTypes):

请注意StringTypes的使用。它确保我们不会忘记一些晦涩的字符串类型。

从好的方面来说,这也适用于派生的字符串类。

class MyString(str):
    pass

isinstance(MyString("  "), types.StringTypes) # true

另外,您可能想看看上一个问题。

干杯。

注意: 行为在Python
3中更改为StringTypesbasestring并且不再定义。根据您的需要,您可以将它们替换isinstancestr,或将其替换为一个子集元组(str,bytes, unicode),例如对于Cython用户。正如@TheronLuhn提到的那样,您也可以使用six



 类似资料:
  • 有没有办法在for循环中使变量可迭代?我正在尝试制作一个密码生成器,对于for循环,我使用一个输入数字的变量。 当我试图在循环中使用变量时,我得到< code > ' int ' object is not iterable 。

  • 问题内容: if var is ‘stringone’ or ‘stringtwo’: dosomething() 这行不通!我有一个变量,当它是两个值中的一个时,我需要它执行某些操作,但它不会输入if语句。在Java中工作。如何用Python编写? 问题答案: 这不能满足您的期望: 它与: 始终为真,因为它被认为是“真”值。 有两种选择: 或者您可以编写单独的相等性测试, 不要使用,因为比较对象

  • 问题内容: 我读过在Java中不能更改String类型的对象。但是int和char变量可以。为什么?你可以给我一个例子吗? 谢谢。(我是较新的-_-) 问题答案: 正如bzabhi所说,字符串在Java中是不可变的。这意味着字符串对象将永远不会改变。这并不意味着您不能更改字符串变量,只是不能更改字符串的基础内存表示形式。例如: 执行完这些行后,str将指向内存中的新字符串。原始的“ Hello”字

  • 问题内容: 我有一个具有几个命​​令的应用程序。当您键入某个命令时,您必须输入有关某物/某人的其他信息。现在,根据情况,信息必须严格为整数或字符串。 但是,无论您使用raw_input()在Python中键入的内容实际上是一个字符串,无论如何,更具体地讲,我很快会不加尝试地……除非查看变量是否由数字或字符组成? 问题答案: 我认为您有两种选择: 只需尝试将其转换为,但要捕获异常: except V

  • 为什么Java字符串被认为是不可变的?我可以说之后将name值更改为

  • 我对python和编程都是新手,所以我很迷茫。我已经编写了一个“Node”类(如下文底部所示),它实例化了一个二叉搜索树和几个方法,如insert()和elements()(通过按顺序横切树返回元素列表)。我应该使这个类是可迭代的:“iter__(self)应该返回一个NodeIterator,它按照排序顺序从树中返回元素。修改树不应该修改现有的迭代器。”我现在正试图通过在类中插入以下代码来实现这