【问题标题】:python casting variables with type as argument以类型为参数的python转换变量
【发布时间】:2018-03-07 15:42:30
【问题描述】:

是否有一个转换函数可以同时转换变量和类型?如:

cast_var = cast_fn(original_var, type_to_cast_to)

我想用它作为一种有效的方式来循环遍历从字符串解析的输入参数列表,有些需要转换为 int、bool、float 等...

【问题讨论】:

  • 你到底想投什么?
  • 您能否添加更多关于您希望如何使用它的信息?否则,我很想给你发一个:“看看astype”,它可以在numpy.ndarrays上使用..
  • 为什么不直接这样做呢? a = '5', b = int(a)?
  • 当类型参数本身可以直接用作某种工厂函数时,为什么还需要单独的函数。
  • @pstatix:对,或者一般来说是cast_var = type_to_cast_to(original_variable)。在 Python 中,我认为不需要存在 OP 要求的函数。

标签: python types casting


【解决方案1】:

所有 Python 类型都是可调用的

new_val = int(old_val)

所以不需要特殊功能。实际上,您所要求的实际上只是一个 apply 函数

new_val = apply(int, old_val)

存在于 Python 2 中,但从 Python 3 中删除,因为它从来没有必要;任何可以作为第一个参数传递给apply 的表达式始终可以与调用“operator”一起使用:

apply(expr, *args) == expr(*args)

【讨论】:

  • 我喜欢apply() 是一个函数,而不仅仅是一些语法。函数是一等对象,可以传递,但不能传递语法。例如,我有时将@apply 用于应该在导入时运行的初始化函数。 (我知道这有点 hacky,而且我也知道我可以在 Python 3 中简单地定义自己的 apply()。)
  • @SvenMarnach 你可以改用types.FunctionType.__call__ :)
  • 是的,可以分配给apply,但apply() 的重点是方便。我想知道为什么甚至没有operator.call()
  • 我通常不将调用语法视为运算符,但我没有强有力的论据来支持这种观点。对于他们的 python-ideas 邮件列表来说,这听起来像是一个有效的建议;将reduce 重新定位到functools 模块似乎是一个很好的先例。
  • (看起来有一些相关的讨论last summer;不确定有什么结果。有人提到functools.apply,好像它已经存在,尽管它似乎不存在。那将是另一个想法。)
【解决方案2】:

简短回答: 这有效:

>>> t = int
>>> s = "9"
>>> t(s)

或者一个完整的例子:

def convert(type_id, value):
    return type_id(value)

convert(int, "3")  # --> 3
convert(str, 3.0)  # --> '3.0'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2017-09-20
    • 2020-06-19
    相关资源
    最近更新 更多