在写python函数时,要注意区分参数类型,现总结如下:

1、无参数

# 1、无参数
def f1():
    print("无需传入参数。")

# 调用方法
f1()

执行结果:

无需传入参数。



2、位置参数

按函数原型参数所在位置传入数值

# 2、位置参数(按函数原型参数所在位置传入数值)
def f2(value):
    print("value = ", value)

# 调用方法
f2(5)

def f3(int_value, string_value):
    print("整型参数为:", int_value, "字符串参数为:", string_value)

# 调用方法
f3(6, "abcd")

执行结果:

value = 5
整型参数为: 6 字符串参数为: abcd



3、关键字参数

指定关键字传入数值,顺序可以颠倒

3、关键字参数(指定关键字传入数值,顺序可以颠倒)
def f4(int_value, string_value):
    print("整型参数为:", int_value, "字符串参数为:", string_value)

# 调用方法
f4(int_value=10, string_value="ABC")
f4(string_value="DEF", int_value=6)

执行结果:

整型参数为: 10 字符串参数为: ABC
整型参数为: 6 字符串参数为: DEF



4、默认值参数

如果不传入参数,就会自动赋默认值,参数个数由函数原型确定

# 4、默认值参数(如果不传入参数,就会自动赋默认值,参数个数由函数原型确定)
def f5(value=6):
    print("value = ", value)

# 调用方法
f5()  # 不传参
f5(4)  # 使用位置参数指定传参
f5(value=4)  # 使用关键字参数指定传参

def f6(value1=5, value2="abcd"):
    print("value1 = ", value1, "value2 = ", value2)

# 调用方法
f6()  # 不传参
f6(4)  # 使用位置参数传一个
f6(4, "ABC")  # 使用位置参数全部传参
f6(value2="fgh")  # 使用关键字参数指定传参一个
f6(value1=4, value2="hello")  # 使用关键字参数全部传参

执行结果:

value = 6
value = 4
value = 4
value1 = 5 value2 = abcd
value1 = 4 value2 = abcd
value1 = 4 value2 = ABC
value1 = 5 value2 = fgh
value1 = 4 value2 = hello



5、不定长参数

传参个数由调用方法确定

# 5、不定长参数(传参个数由调用方法确定)
# 以*开头的为元组形式,以**开头的为字典形式
def f7(value1, *value2):
    print("确定参数value1 = ", value1)
    print("不确定参数value2 = ", value2)

# 调用方法
# f7()  # 报错,至少传参一个
f7(5)  # 使用位置参数传一个
f7(5, 60, 70, 80)  # 使用位置参数传两个
f7(value1=10)  # 使用关键字参数传一个

def f8(value1, **value2):
    print("确定参数value1 = ", value1)
    print("不确定参数value2 = ", value2)

# 调用方法
# f8()  # 报错,至少传参一个
f8(5)  # 使用位置参数传一个
f8(5, name="ZML", age=19, sex="Male")  # 使用位置参数传两个
f8(value1=10, name="ZML", age=19, sex="Male")  # 使用关键字参数和位置参数传两个

执行结果:

确定参数value1 = 5
不确定参数value2 = ()
确定参数value1 = 5
不确定参数value2 = (60, 70, 80)
确定参数value1 = 10
不确定参数value2 = ()
确定参数value1 = 5
不确定参数value2 = {}
确定参数value1 = 5
不确定参数value2 = {‘name’: ‘ZML’, ‘age’: 19, ‘sex’: ‘Male’}
确定参数value1 = 10
不确定参数value2 = {‘name’: ‘ZML’, ‘age’: 19, ‘sex’: ‘Male’}



6、强制关键字传入

单独使用*号,*号后面的参数必须为关键字参数,之前的不受影响

# 6、强制关键字传入(单独使用*号,*号后面的参数必须为关键字参数,之前的不受影响)
def f9(value1, value2, *, value3):
    print("参数value1 = ", value1, ",参数value2 = ", value2, ",关键字参数value3 = ", value3)

# 调用方法
# f9(1, 2, 3)  # 报错
f9(3, 4, value3=9)
f9(0, value3=10, value2=7)
f9(value3=10, value2=6, value1=9)

执行结果:

参数value1 = 3 ,参数value2 = 4 ,关键字参数value3 = 9
参数value1 = 0 ,参数value2 = 7 ,关键字参数value3 = 10
参数value1 = 9 ,参数value2 = 6 ,关键字参数value3 = 10



7、强制位置传入

单独使用/号,/号前面的参数必须为位置参数,之后的不受影响

def f10(value1, value2, /, value3):
    print("位置参数value1 = ", value1, ",位置参数value2 = ", value2, ",参数value3 = ", value3)


# 调用方法
f10(1, 2, 3)
# f10(value1=3, value2=8, value3=7)  #报错
f10(4, 6, value3=9)

执行结果:

位置参数value1 = 1 ,位置参数value2 = 2 ,参数value3 = 3
位置参数value1 = 4 ,位置参数value2 = 6 ,参数value3 = 9



8、/和*的混合使用

# 8、/和*的混合使用
def f11(value1, value2, /, value3, value4, *, value5, value6):
    print("位置参数value1 = ", value1, ",位置参数value2 = ", value2, ",参数value3 = ", value3\
          , ",参数value4 = ", value4, ",关键字参数value5 = ", value5, ",关键字参数value6 = ", value6)

# 调用方法
f11(3, 4, 6, value4=10, value5=9, value6=14)
f11(3, 4, 6, 10, value5=9, value6=14)
f11(3, 4, value3=6, value4=10, value5=9, value6=14)

执行结果:

位置参数value1 = 3 ,位置参数value2 = 4 ,参数value3 = 6 ,参数value4 = 10 ,关键字参数value5 = 9 ,关键字参数value6 = 14
位置参数value1 = 3 ,位置参数value2 = 4 ,参数value3 = 6 ,参数value4 = 10 ,关键字参数value5 = 9 ,关键字参数value6 = 14
位置参数value1 = 3 ,位置参数value2 = 4 ,参数value3 = 6 ,参数value4 = 10 ,关键字参数value5 = 9 ,关键字参数value6 = 14