我使用的是第三方库函数,它从文件中读取一组关键字,并应该返回一组值。只要至少有两个关键字,它就可以正确地执行此操作。但是,如果只有一个关键字,则返回原始字符串,而不是大小为1的元组。这尤其有害,因为当我试图做
for keyword in library.get_keywords():
# Do something with keyword
,在单个关键字的情况下,for
连续迭代字符串的每个字符,这在运行时或其他情况下不会引发异常,但对我来说完全没有用处。
我的问题有两个:
很明显这是库中的一个bug,我无法控制。我怎样才能最好地解决这个问题?
第二,一般来说,如果我正在编写一个返回元组的函数,那么确保一个元素的元组被正确生成的最佳实践是什么?例如,如果我有
def tuple_maker(values):
my_tuple = (values)
return my_tuple
for val in tuple_maker("a string"):
print "Value was", val
for val in tuple_maker(["str1", "str2", "str3"]):
print "Value was", val
我明白了
Value was a
Value was
Value was s
Value was t
Value was r
Value was i
Value was n
Value was g
Value was str1
Value was str2
Value was str3
当只有一个元素时,修改函数my_tuple
以实际返回元组的最佳方法是什么?我是否需要显式地检查大小是否为1,并使用(value,)
语法分别创建元组?这意味着任何有可能返回一个单值元组的函数都必须这样做,这看起来既繁琐又重复。
这个问题有什么好的解决办法吗?
如果是字符串或元组,则需要以某种方式测试类型。我会这样做:
你的
tuple_maker
并不像你想象的那样。对tuple maker
的一个等价定义是你看到的是
tuple_maker("a string")
返回一个字符串,而tuple_maker(["str1","str2","str3"])
返回一个字符串列表;两者都不返回元组!Python中的元组是由逗号而不是方括号定义的。因此
(1,2)
是包含值1
和2
的元组,而(1,)
是包含单个值1
的元组。如其他人所指出,要将值转换为元组,请使用
tuple
。对于您的第一个问题,我不确定这是否是最好的答案,但我认为您需要检查自己返回的值是字符串还是元组并相应地执行操作。
至于第二个问题,任何变量都可以通过在其旁边放置一个
,
而变成一个单值元组:把这两个想法放在一起:
注意:通常情况下,使用isinstance或任何其他需要在运行时检查对象类型的逻辑形式是不好的。但对于这个问题我看不出任何办法。
相关问题 更多 >
编程相关推荐