Python:关于可变参数的一问题

为什么在调用可变参数kwargs的时候,要用关键字参数的方法来传递参数?kwargs输出的不是一个字典吗?
而且为什么如图调用的时候,可以出现不加引号的汉字并且不会报错啊,汉字难道不是属于字符串的一种吗?

img

而且为什么写完之后没有检查出错误,但是运行的时候又会出现红色的字体呢?而且出现了红色之后还是能够输出结果来,好奇怪(用的软件是VScode)

你说得每个字都是中文,就是连起来以后我一句都看不懂。
可变参数当然要用关键字(或者叫系统保留变量)来传递,这就是规定,记住就好,在初学阶段,不用去明白原理(中听的话),换句不中听的话就是说了你也听不懂(哈哈哈),就死记硬背即可。
kwargs的确是用来传递字典变量的,但你代码中用的是for k,v in kwargs:已经遍历了,并且是分别输出key和value了。
你并没有直接调用不加引号的汉字,如果你觉得有,请指明你觉得是哪句代码。汉字当然是字符串的一种。
你仔细看看红字错误,报的和本文件毫无关系。你运行时并没有红字异常,你的运行代码在控制台最后一行命令才是。

pycharm中无红字

img

  • 这篇博客: Python函数的参数类型(位置参数、关键字参数、默认值参数、不定长参数)中的 3.2 ** kwargs:字典 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 例1:创建一个可以接受任意数量关键字参数的函数:

    def myFunction(**kwargs):
        for kw in kwargs:
            print(kw, '-', kwargs[kw])
    
    if __name__ == "__main__":
        myFunction(a = 24, b = 87, c = 3, d = 46)
        """程序运行结果:
        a - 24
    	b - 87
    	c - 3
    	d - 46
        """
    

    例2:电脑售价的案例:

    def myFunction(**computers):
        for kw in computers:
            print(kw, '-', computers[kw])
    
    if __name__ == "__main__":
        myFunction(dell = 1299.50, asus = 1870.00, hp = 1990.50)
        """程序运行结果:
        dell - 1299.5
    	asus - 1870.0
    	hp - 1990.5
        """
    

    例3:

    def myFunction(x, y, **kwargs):
        print(x)
        print(y)
        for key, value in kwargs.items():
            print(key, '-', value)
    
    if __name__ == "__main__":
        myFunction("ABC", "MNO", a = 24, b = 87, c = 3, d = 46)
        """程序运行结果:
        ABC
    	MNO
    	a - 24
    	b - 87
    	c - 3
    	d - 46
        """
    

    例4:实发工资=基本工资-缴纳个税金额-缴纳社保费用

    def pay(basic, **kvargs):
        # 分别获取tax个人税与social社保费
        tax = kvargs.get('tax')
        social = kvargs.get('social')
        # 实发工资=基本工资-缴纳个税金额-缴纳社保费用
        pay = basic - tax - social
        return pay
    
    print('实发工资是{}'.format(pay(8000, tax=500, social=1500))) # 实发工资是6000