我该怎么做:
def profile(request, pk=0 : int):
#to do
我需要pk
为int(不在函数中转换)。
像这样:
def profile(request, pk: int):
如果pk
为空 - 将值设置为0并键入int。
答案 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的任何输入类型:integer
,string with integer
,string 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类型”进行了快速研究。在提出问题之前,请先尝试研究这样简单的事情,你会得到更快的答案:)