Python:函数:位置参数

阅读: 评论:0

Python:函数:位置参数

Python:函数:位置参数

Python:函数:位置参数 --- 1、声明只能在默认参数之前,2、最好老老实实的位置对应

  • 简述
    • 1、声明只能在默认参数之前
    • 2、调用最好老老实实与位置对应,不用<变量名=值>(避免不必要的麻烦)
    • 3、常见异常
  • 一、 函数声明时,位置参数与默认参数不可穿插,必须要在默认参数前面。
    • 1、不报错:位置参数在默认参数前面
      • (1)getValue(position1, position2, default1 = "默认")
    • 2、报错:位置参数与默认参数穿插(SyntaxError: non-default argument follows default argument)
      • (1)getValue(default1 = "默认", position1, position2)
      • (2)getValue(position1, default1 = "默认", position2)
      • (3)总结
  • 二、函数调用时,位置参数通过<变量名=值>的方法赋值,可能会与位置对应赋值规范冲突
    • 0、函数体 getValue(position1, position2, default1 = "默认")
    • 1、不报错:位置对应或全用<变量名=值>
      • (1)位置一一对应
      • (2)全用<变量名=值>的方式赋值(顺序随便打乱)
      • (3)结果一致
    • 2、报错:SyntaxError: positional argument follows keyword argument
      • (1)getValue(position1 = "matchPosition2", "matchPosition1")
    • 3、报错:TypeError: getValue() got multiple values for argument 'position1'
      • (1)getValue("matchPosition1", position1 = "matchPosition1")
    • 4、总结
  • 三、函数调用时,通过<变量名=值>的方法赋值,造成可变参数无法赋值
    • 0、函数体 getValue(position1, position2, default1 = "默认", *args)
    • 1、不报错:位置对应 --- getValue("matchPosition1", "matchPosition2", "matchDefault", "matchArgs1", "matchArgs2")
      • 注意,默认值也要对应打出来。这就很不方便。
    • 2、报错:SyntaxError: positional argument follows keyword argument
      • 只要存在<变量名=值>赋值位置参数和默认值参数,就不能有可变参数。
    • 3、总结
  • 四、总结
  • 相关感悟:何为一般关键字参数?
    • 在定义函数时,函数体形参列表中,可变参数(*args)后不带默认值的参数,为调用函数时必须赋值的关键字参数,即一般的关键字参数。
      • 特征
  • 相关感悟:怎么巧用关键字参数隐藏默认值?
    • 弃用默认参数,改用关键字参数含有默认值。申明函数function(position1, *args, keyName1 = "默认关键字参数", **kwargs)

简述

1、声明只能在默认参数之前

函数声明时,位置参数与默认参数不可穿插。
更明确的说,位置参数必须在默认参数前面。
不然会报错,SyntaxError: non-default argument follows default argument

2、调用最好老老实实与位置对应,不用<变量名=值>(避免不必要的麻烦)

通过<变量名=值>的方法赋值,可能会与位置对应赋值冲突
通过<变量名=值>的方法赋值,造成可变参数无法赋值。详细说,要给可变参数赋值,位置参数和默认参数,只能用位置对应的方式赋值,不能用<变量名=值>。

3、常见异常

声明时:SyntaxError: non-default argument follows default argument
调用时:SyntaxError: positional argument follows keyword argument
调用时:TypeError: getValue() got multiple values for argument ‘position1

一、 函数声明时,位置参数与默认参数不可穿插,必须要在默认参数前面。

1、不报错:位置参数在默认参数前面

(1)getValue(position1, position2, default1 = “默认”)

def getValue(position1, position2, default1 = "默认"):print(position1, position2, default1)

2、报错:位置参数与默认参数穿插(SyntaxError: non-default argument follows default argument)

(1)getValue(default1 = “默认”, position1, position2)

def getValue(default1 = "默认", position1, position2):print(position1, position2, default1)

(2)getValue(position1, default1 = “默认”, position2)

def getValue(position1, default1 = "默认", position2):print(position1, position2, default1)

(3)总结

函数声明时,位置参数与默认参数不可穿插。
更明确的说,位置参数必须在默认参数前面。
不然会报错,SyntaxError: non-default argument follows default argument

二、函数调用时,位置参数通过<变量名=值>的方法赋值,可能会与位置对应赋值规范冲突

0、函数体 getValue(position1, position2, default1 = “默认”)

def getValue(position1, position2, default1 = "默认"):print(position1, position2, default1)

1、不报错:位置对应或全用<变量名=值>

(1)位置一一对应

getValue("matchPosition1", "matchPosition2", "matchDefault")
getValue("matchPosition1", "matchPosition2", default1 = "matchDefault")
getValue("matchPosition1", position2 = "matchPosition2", default1 = "matchDefault")
getValue(position1 = "matchPosition1", position2 = "matchPosition2", default1 = "matchDefault")

(2)全用<变量名=值>的方式赋值(顺序随便打乱)

getValue(position1 = "matchPosition1", position2 = "matchPosition2", default1 = "matchDefault")
getValue(position1 = "matchPosition1", default1 = "matchDefault", position2 = "matchPosition2")
getValue(position2 = "matchPosition2", position1 = "matchPosition1", default1 = "matchDefault")
getValue(position2 = "matchPosition2", default1 = "matchDefault", position1 = "matchPosition1")
getValue(default1 = "matchDefault", position1 = "matchPosition1", position2 = "matchPosition2")
getValue(default1 = "matchDefault", position2 = "matchPosition2", position1 = "matchPosition1")

(3)结果一致

matchPosition1 matchPosition2 matchDefault

2、报错:SyntaxError: positional argument follows keyword argument

(1)getValue(position1 = “matchPosition2”, “matchPosition1”)

getValue(position1 = "matchPosition2", "matchPosition1")

3、报错:TypeError: getValue() got multiple values for argument ‘position1’

(1)getValue(“matchPosition1”, position1 = “matchPosition1”)

getValue("matchPosition1", position1 = "matchPosition1")

4、总结

位置参数通过<变量名=值>的方法赋值,可能会与位置对应赋值规范冲突,造成:
语法错误:SyntaxError: positional argument follows keyword argument
重复错误:TypeError: got multiple values for argument ‘position1’

三、函数调用时,通过<变量名=值>的方法赋值,造成可变参数无法赋值

0、函数体 getValue(position1, position2, default1 = “默认”, *args)

def getValue(position1, position2, default1 = "默认", *args):print(position1, position2, default1, args)

1、不报错:位置对应 — getValue(“matchPosition1”, “matchPosition2”, “matchDefault”, “matchArgs1”, “matchArgs2”)

getValue("matchPosition1", "matchPosition2", "matchDefault", "matchArgs1", "matchArgs2")

注意,默认值也要对应打出来。这就很不方便。

解决办法参见:《Python:函数:关键字参数:巧用关键字参数----隐藏默认值 (解答:好多内置函数,修改默认值需要通过“形参变量名=值”的方式) 》

2、报错:SyntaxError: positional argument follows keyword argument

getValue("matchPosition1", "matchPosition2", default1 = "matchDefault","matchArgs1", "matchArgs2")

只要存在<变量名=值>赋值位置参数和默认值参数,就不能有可变参数。

3、总结

要给可变参数赋值,位置参数和默认参数,只能用位置对应的方式赋值,不能用<变量名=值>。

四、总结

声明时候,严格按照顺序;调用时候,位置参数与默认值参数类似,都最好通过位置对应的方式赋值,不用<变量名=值>,拓展性强,避免不必要的错误。

相关感悟:何为一般关键字参数?

参见

在定义函数时,函数体形参列表中,可变参数(*args)后不带默认值的参数,为调用函数时必须赋值的关键字参数,即一般的关键字参数。

特征

可变参数(*args)后
不带默认值

相关感悟:怎么巧用关键字参数隐藏默认值?

参见

弃用默认参数,改用关键字参数含有默认值。申明函数function(position1, *args, keyName1 = “默认关键字参数”, **kwargs)

本文发布于:2024-02-03 23:18:00,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170697351851508.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   位置   参数   Python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23