首先我定义了一个类
在这里,我不确定 参数 有多少,我定义了动态参数
但是调用的时候一直错误
isok=_baseController.aothorized(dicts)
TypeError: aothorized() takes 1 positional argument but 2 were given
形参没有名字啊,*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict。
1.实参顺序:位置参数 --> *args --> 关键字参数 --> **kwargs
2.形参顺序:位置参数 --> *args --> 默认值参数 -->**kwargs
3.组合运用:无论是实参还是形参,样式不是固定的,可以组合用,只要保证顺序按照以上规则即可.
4.万能形参:def func(*args,**kwargs)
5.传参方式:实参(位置传参,关键字传参,混合传参),形参(位置传参,默认值参数,动态参数(*args,**kwargs))
6.聚合打散:实参中和**是打散(list,tuple,set,str,**dic),形参中和是聚合,*把进来的位置参数存储在一个元组中,把进来的关键字参数存储在一个字典中
少了 **kw
我使用 *args
参数可以接受到,是一个元祖
我使用 (*,key1,key2)
关键词参数 也接收不到
而且 好像 使用类,这样字弄参数会出问题,我使用方法的话就没有事情
@Cgrain: python的形参 和实参 是有顺序的,
1.实参顺序:位置参数 --> *args --> 关键字参数 --> kwargs
2.形参顺序:位置参数 --> *args --> 默认值参数 -->kwargs
python的类创建对象时调用的是构造方法__init__,参数会传递到构造方法中。
将构造方法定义为__init__(self, *args, **kwargs)就可以接收任意参数。
@FilexHu:
噢噢噢噢,但是如果 我确实需要 **kw ,前面也必须要定义 *args咯
来晚了,一楼全答完了。。。
补充一点吧,函数变量定义也是有顺序的
基本原则是:先位置参数,默认参数,包裹位置,包裹关键字(顺序错了也会报错,例如将默认参数变量定义放在位置参数前)
正例:def func(name, age, sex=1, *args, **kargs):
反例:def func(name, age=1, sex):
另外这个是入参解压的问题
TypeError: aothorized() takes 1 positional argument but 2 were given
你的username 和password没有明确解压过程
@韆: 我懂了
class TrainFanYi():
def __init__ (self,**kw):
print(kw)
def langdetectGet(self):
""" 根据输入的值获取当前输入的是什么语言 """
pass
#req.post(url=self.__baseAPI)
if __name__ =="__main__":
baseAPI="https://fanyi.baidu.com"
dictD={"baseAPI":baseAPI}
train=TrainFanYi(**dictD)
while True:
inputStr=input("请输入你要翻译的值:")
if(inputStr=="exit"):
break
加 **传递