动态处理python字符串或列表
numberofrow, 它的值是在表单字段中动态设置的。动态处理python字符串或列表
现在因为numberofrow是在多个表中, 当我接收从形式变量,
如果只有一个numerofrow,其字符串,用于离。 numberofrow = 01
如果多于一个numberofrow,它的一个列表,例如。 numberofrow = [01,02,04]
现在我如何区分是否它的列表或字符串在我的Python代码?使用
在想,
if type(numberofrow).__name__=='list':
#do this
else:
#do this
感谢, 阳光。
为此目的,有一个内置称为isinstance。你可以用它来检查一个对象是否是这个类的一个实例(和你的解决方案相比,在这个测试中也考虑了超类)。
if isinstance(numberofrow, list):
# do this
else:
# do that
是很常见的像做isinstance(numberofrow, basestring)
。 basestring是Python 2中的两种字符串类型的超类 - str和unicode - 测试将匹配它们两个。
或者,您也可以提供可能的类/元素的元组,如isinstance(numberofrow, (list, tuple))
。如果实例是列表实例或元组,则此测试将成功。
你可以做你说什么,但更好的方法是:
if isinstance(numberofrow, list):
# do this
else:
# do that
另一种方法是使用对象为一个字符串,出问题的时候改变自己的行为:
try:
validated = numberofrow.isdigit()
except AttributeError:
# must be a list?
# do something else
else:
# must be a string
# do the string thing
如果它的行为像一个字符串,那么它是否是一个字符串并不重要。
因为代码很大,所以 有可能,如果numberofrow是字符串,将它转换成一个列表,使用与numberofrow相同的变量名称,然后做其余的编码? – sunny 2010-08-18 05:37:13
@sunny,这是一个好主意。这是亚历克斯谈论的数据总是列表的好处。所以,就像你说的,如果它是一个字符串,把它变成一个列表。你必须小心,因为字符串在许多方面都像列表一样行事(都是序列并具有该接口)。 – 2010-08-18 05:55:34
@ Eric,我是这样工作的。 @Alex,我正在使用plone框架。 感谢所有的解决方案。 – sunny 2010-08-18 06:02:53
您使用什么框架从表单中获取该值?一个明智的人肯定会提供一种方法来返回总是一个列表 - 具体地说,如果该值已被输入一次,一个项目列表(并且可能,如果该值没有被输入,则是一个空列表)。
例如,具有良好的老cgi,你会使用FieldStorage
实例的getlist
方法 - 的form.getlist('numberofrow')
代替form.getvalue('numberofrow')
象你所说的,返回一个字符串或列表,它的行为 - 这将解决你所有的问题更加简单和优雅!
重复http://*.com/questions/3227552/what-is-the-pythonic-way-of-differentiating-between-a-string-and-a-list? – Johnsyweb 2010-08-18 05:37:48