首页 新闻 搜索 专区 学院

python 关于 关键词参数,可变参数,动态参数的概念

0
悬赏园豆:20 [已解决问题] 解决于 2021-08-26 12:12

首先我定义了一个类

在这里,我不确定 参数 有多少,我定义了动态参数

但是调用的时候一直错误

    isok=_baseController.aothorized(dicts)
TypeError: aothorized() takes 1 positional argument but 2 were given
混在园子里的底层码农的主页 混在园子里的底层码农 | 小虾三级 | 园豆:1406
提问于:2021-08-26 10:13
< >
分享
最佳答案
0

形参没有名字啊,*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),形参中是聚合,*把进来的位置参数存储在一个元组中,把进来的关键字参数存储在一个字典中

收获园豆:10
FilexHu | 菜鸟二级 |园豆:214 | 2021-08-26 11:30

少了 **kw 我使用 *args 参数可以接受到,是一个元祖
我使用 (*,key1,key2) 关键词参数 也接收不到

而且 好像 使用类,这样字弄参数会出问题,我使用方法的话就没有事情

混在园子里的底层码农 | 园豆:1406 (小虾三级) | 2021-08-26 11:33

@Cgrain: python的形参 和实参 是有顺序的,
1.实参顺序:位置参数 --> *args --> 关键字参数 --> kwargs
2.形参顺序:位置参数 --> *args --> 默认值参数 -->
kwargs

python的类创建对象时调用的是构造方法__init__,参数会传递到构造方法中。
将构造方法定义为__init__(self, *args, **kwargs)就可以接收任意参数。

FilexHu | 园豆:214 (菜鸟二级) | 2021-08-26 11:45

@FilexHu:

噢噢噢噢,但是如果 我确实需要 **kw ,前面也必须要定义 *args咯

混在园子里的底层码农 | 园豆:1406 (小虾三级) | 2021-08-26 12:11
其他回答(1)
0

来晚了,一楼全答完了。。。
补充一点吧,函数变量定义也是有顺序的
基本原则是:先位置参数,默认参数,包裹位置,包裹关键字(顺序错了也会报错,例如将默认参数变量定义放在位置参数前)
正例:def func(name, age, sex=1, *args, **kargs):
反例:def func(name, age=1, sex):

收获园豆:10
| 园豆:984 (小虾三级) | 2021-08-26 11:51

另外这个是入参解压的问题
TypeError: aothorized() takes 1 positional argument but 2 were given
你的username 和password没有明确解压过程

支持(0) 反对(0) | 园豆:984 (小虾三级) | 2021-08-26 11:53

@韆: 我懂了


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

加 **传递

清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册