为参数设置默认值和类型

Set default value and type for parameter

我怎样才能做这样的事情:

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

我需要 pk 为 int(不进行函数转换)。

像这样:

def profile(request, pk: int):

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

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

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

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

,则会抛出错误

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

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

顺便说一句:我刚刚对 "specify type of argument python" 进行了快速研究。在提问之前,请先尝试研究像这样简单的事情,你会更快得到答案:)

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

我的代码适用于 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