python中怎么设定函数形参的类型
python这种语言里能不能在定义函数时直接设定参数(parameter)的数据类型,比如int,float==?同时还要写出参数名字,这两个能同时实现么?谢谢~...
python这种语言里能不能在定义函数时直接设定参数(parameter)的数据类型,比如int,float==?同时还要写出参数名字,这两个能同时实现么?
谢谢~ 展开
谢谢~ 展开
2个回答
2013-09-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)
#这个可以用修饰器来完成
#但是一般不会限制参数类型
#给你个思路:
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)
展开全部
Python中函数参数的传递是通过“赋值”来传递的。
但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题”,也就说没有回答怎么赋值的问题。
函数参数的使用可以分为两个方面,一是函数参数如何定义,二是函数在调用时的参数如何解析的。而后者又是由前者决定的。
函数参数的定义有四种形式:
1. F(arg1,arg2,...)
2. F(arg2=<value>,arg3=<value>...)
3. F(*arg1)
4. F(**arg1)
但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题”,也就说没有回答怎么赋值的问题。
函数参数的使用可以分为两个方面,一是函数参数如何定义,二是函数在调用时的参数如何解析的。而后者又是由前者决定的。
函数参数的定义有四种形式:
1. F(arg1,arg2,...)
2. F(arg2=<value>,arg3=<value>...)
3. F(*arg1)
4. F(**arg1)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询