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

检测序列参数的正确方法?

卓云
2023-03-14
问题内容

我想编写一个接受参数的函数,该参数可以是序列或单个值。值的类型为str,int等,但我
希望将其限制为硬编码列表。换句话说,我想知道参数X是一个序列还是必须转换为序列的对象,以避免以后出现特殊情况。我可以做

type(X) in (list, tuple)

但是可能还有我不知道的其他序列类型,也没有通用的基类。

-N。

编辑 :请参阅下面的“答案”,了解其中大多数答案对我没有帮助的原因。也许您有更好的建议。


问题答案:

上述所有方式的问题在于,str被视为一个序列(可迭代,具有 getitem 等),但通常被视为单个项目。

例如,一个函数可以接受一个参数,该参数可以是文件名或文件名列表。函数从后一个检测第一个的最Pythonic方法是什么?

根据修订后的问题,听起来您想要的是更多类似的东西:

def to_sequence(arg):
    ''' 
    determine whether an arg should be treated as a "unit" or a "sequence"
    if it's a unit, return a 1-tuple with the arg
    '''
    def _multiple(x):  
        return hasattr(x,"__iter__")
    if _multiple(arg):  
        return arg
    else:
        return (arg,)

>>> to_sequence("a string")
('a string',)
>>> to_sequence( (1,2,3) )
(1, 2, 3)
>>> to_sequence( xrange(5) )
xrange(5)

不能保证可以处理 所有 类型,但是可以很好地处理您提到的情况,并且应该对大多数内置类型都适用。

使用它时,请确保接收此输出的任何人都可以处理可迭代对象。



 类似资料:
  • 问题内容: 这可能是一个愚蠢的问题,但是我想使用Modernizr JS库检测一些浏览器属性,以确定要显示或不显示什么内容。 我有一个名为Pano2VR的应用程序,它可以同时输出HTML5和SWF。我需要用于iOS设备用户的HTML5。 但是,IE根本不呈现此“ HTML5”输出。看来他们的输出使用CSS3 3D变换和WebGL,IE9中显然不支持一种或多种。 因此,对于那些用户,我需要显示Fla

  • 在上面的请求中,我希望访问参数,以查找特定的transection对象和其他一些值。所以基本上我有三种方法来做到这一点。 1.我可以使用 2.我可以使用 谢谢

  • null 什么做法更好,更“真实”?我喜欢第一个,但再次,不确定我该如何选择Epsilon。

  • 当我们要安装一个后台数据库为 SQLServer 的数据库前台程序时,很多时候无可避免地要涉及到对 SQLServer 后台数据库的初始化设置操作,如何使用 NSIS 对用户输入的连接信息进行验证,然后利用这些连接信息进行数据库操作呢,如下脚本简单的实现了一个数据库连接测试的功能。 引用脚本的内容: /*----------------------------------------- SQLS

  • 我正在编写一个可序列化的类,它接受多个参数,包括一个函数: 存储在成员变量中,因此需要可序列化。如果分配给它们的类型是可序列化的,则Javalambda是可序列化的。如果使用lambda创建,那么确保在构造函数中传递的是可序列化的最佳方法是什么? > 创建一个可序列化函数,并使用该函数: 问题: 现在,

  • 问题内容: 因此,我遵循了Python的《超级被认为有害》,并去测试他的例子。 但是,示例1-3应该显示正确的调用方式,当处理期望使用不同参数的方法时,平坦化不起作用。 这是我得到的: 看来它本身违反了文档中提到的最佳实践之一,即使用的方法必须接受和。 现在,很明显,奈特先生希望他的例子能奏效,这在最近的Python版本中是否有所改变?我检查了2.6和2.7,但两者均失败。 那么解决这个问题的正确