python中怎么设定函数形参的类型

python这种语言里能不能在定义函数时直接设定参数(parameter)的数据类型,比如int,float==?同时还要写出参数名字,这两个能同时实现么?
谢谢~

#Python 2.5
#这个可以用修饰器来完成
#但是一般不会限制参数类型
#给你个思路:

def argfilter(*types):
def deco(func): #这是修饰器
def newfunc(*args): #新的函数
if len(types)==len(args):
correct = True
for i in range(len(args)):
if not isinstance(args[i], types[i]): #判断类型
correct = False
if correct:
return func(*args) #返回原函数值
else:
raise TypeError
else:
raise TypeError
return newfunc #由修饰器返回新的函数
return deco #返回作为修饰器的函数

@argfilter(int, str) #指定参数类型
def func(i, s): #定义被修饰的函数
print i, s

#之后你想限制类型的话, 就这样:
#@argfilter(第一个参数的类名, 第二个参数的类名, ..., 第N个参数的类名)
#def yourfunc(第一个参数, 第一个参数, ..., 第N个参数):
# ...
#
#相当于:
#def yourfunc(第一个参数, 第一个参数, ..., 第N个参数):
# ...
#yourfunc = argfilter(第一个参数的类名, 第二个参数的类名, ..., 第N个参数的类名)(yourfunc)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-25
python的函数定义不需要指定参数的数据类型,而是在runtime实时分析。如果你实在需要指定,可以使用默认值的方式,比如def a(x,y=3),或者在函数内部验证类型是否是你需要的类型,type(x)返回x的数据类型。
第2个回答  2020-02-17
直接写个名字就行。python的一切默认都是对象,参数没使用前,是没有类型的。甚至函数写不写行参都无所谓。
第3个回答  2019-05-18
#Python
2.5
#这个可以用修饰器来完成
#但是一般不会限制参数类型
#给你个思路:
def
argfilter(*types):
def
deco(func):
#这是修饰器
def
newfunc(*args):
#新的函数
if
len(types)==len(args):
correct
=
True
for
i
in
range(len(args)):
if
not
isinstance(args[i],
types[i]):
#判断类型
correct
=
False
if
correct:
return
func(*args)
#返回原函数值
else:
raise
TypeError
else:
raise
TypeError
return
newfunc
#由修饰器返回新的函数
return
deco
#返回作为修饰器的函数
@argfilter(int,
str)
#指定参数类型
def
func(i,
s):
#定义被修饰的函数
print
i,
s
#之后你想限制类型的话,
就这样:
#@argfilter(第一个参数的类名,
第二个参数的类名,
...,
第N个参数的类名)
#def
yourfunc(第一个参数,
第一个参数,
...,
第N个参数):
#
...
#
#相当于:
#def
yourfunc(第一个参数,
第一个参数,
...,
第N个参数):
#
...
#yourfunc
=
argfilter(第一个参数的类名,
第二个参数的类名,
...,
第N个参数的类名)(yourfunc)
第4个回答  2009-09-25
python 的动态优越性就在于,x在设为int后,还能重新赋值为float,你要直接定类型的话比如int ,则:x = 0(或任意一个int数),就ok了,其他类型同理,若x = 0 后,你又想给x赋float值,则:x=0.0(或任意一个float数)即可
相似回答