【问题标题】:Set default value and type for parameter [duplicate]设置参数的默认值和类型[重复]
【发布时间】:2018-11-27 17:42:12
【问题描述】:

我该如何做这样的事情:

def profile(request, pk=0 : int):
    #to do

我需要 pk 是 int (不转换函数)。

像这样:

def profile(request, pk: int):

如果pk 为空 - 将值设置为 0 并将类型设置为 int。

【问题讨论】:

  • 如果您将int 作为参数传递,它将是int,您不需要转换它。
  • 你可以使用 def profile(request, pk: int=0 ): 但只是一个类型提示。表示它不会自动转换。

标签: python function int default


【解决方案1】:

我的代码适用于任何输入类型的 pk:integerstring with integerstring without integer

import re
    def intCheck(pk):
      contains_number = bool(re.search(r'\d', pk))
      if contains_number:
        return int(re.search(r'\d+', pk).group())
      else:
        return 0

def profile(request, pk=0):
    pk = intCheck(pk)
    print(request + " " + str(pk))

profile('request', "232")
profile('request', 123)
profile('request', "no number")

输出:

request 232
request 123
request 0

【讨论】:

    【解决方案2】:

    你不能真正直接在参数字段中指定它,但你可以在函数声明之后立即转换它:

    def profile(request, pk=0):
        pk = int(pk)
        #to do
    

    如果 pk 的传递值无法转换为 int 则会抛出错误

    编辑: 我说得太早了,显然你可以照你做的那样做,只是换个方式:

    def profile(request, pk: int = 0):
        #to do
    

    顺便说一句:我刚刚对“指定参数 python 的类型”进行了快速研究。在提问之前,请先尝试研究类似这样的简单事物,您会更快得到答案:)

    【讨论】:

    • 类型注释将转换运行时传递的任何非整数值。
    • def profile(request, pk: int = 0): print(type(pk)) ->
    【解决方案3】:

    简而言之,你不能保证 python 中的类型。当您设置 pk=0 的默认值时,您将其默认值设为 int,但使用您的函数的人可以轻松调用

    profile("Hello", pk="there")
    

    这将使 pk 类型为 str。如果您绝对需要告诉用户 pk 必须是 int 类型,那么您可以执行以下操作:

    if type(pk) != int:
        raise ValueError('pk must be of type int, got %s instead' % type(pk) )
    

    【讨论】:

      猜你喜欢
      • 2021-12-24
      • 1970-01-01
      • 2015-11-05
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多