设置参数的默认值和类型

时间:2018-06-18 20:18:55

标签: python function int default

我该怎么做:

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

我需要pk为int(不在函数中转换)。

像这样:

def profile(request, pk: int):

如果pk为空 - 将值设置为0并键入int。

3 个答案:

答案 0 :(得分:0)

简而言之,你无法保证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) )

答案 1 :(得分:0)

我的代码适用于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 :(得分:-1)

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

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

如果pk的传递值无法转换为int

,则会抛出错误

编辑: 我说得太早了,显然你可以像你一样做,只是改变一切:

def profile(request, pk: int = 0):
    #to do
BTW:我刚刚对“指定参数python类型”进行了快速研究。在提出问题之前,请先尝试研究这样简单的事情,你会得到更快的答案:)