我正在使用第三方库函数,它从文件中读取一组关键字,并且应该返回一个值元组.只要至少有两个关键字,它就会正确执行此操作.但是,在只有一个关键字的情况下,它返回一个原始字符串,而不是一个大小为1的元组.这特别有害,因为当我尝试做类似的事情时
for keyword in library.get_keywords():
# Do something with keyword
Run Code Online (Sandbox Code Playgroud)
,在单个关键字的情况下,for迭代迭代字符串的每个字符,这在运行时或其他情况下不会引发异常,但对我来说却完全没用.
我的问题是双重的:
显然,这是库中的一个错误,这是我无法控制的.我怎样才能最好地解决它?
其次,一般来说,如果我正在编写一个返回元组的函数,那么确保使用一个元素的元组的正确生成的最佳实践是什么?例如,如果我有
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
Run Code Online (Sandbox Code Playgroud)
我明白了
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
Run Code Online (Sandbox Code Playgroud)
my_tuple当只有一个元素时,修改函数以实际返回元组的最佳方法是什么?我是否明确需要检查大小是否为1,并使用(value,)语法单独创建元组?这意味着任何有可能返回单值元组的函数都必须这样做,这似乎是hacky和重复.
这个问题有一些优雅的通用解决方案吗?
假设我在这样的列表中有一个元组:
>>> t = [("asdf", )]
Run Code Online (Sandbox Code Playgroud)
我知道列表总是包含一个1元组.目前我这样做:
>>> dummy, = t
>>> value, = dummy
>>> value
'asdf'
Run Code Online (Sandbox Code Playgroud)
是否有更短更优雅的方式来做到这一点?