为参数设置默认值和类型
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 的任何输入类型: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
我怎样才能做这样的事情:
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 的任何输入类型: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