python3函数传值的一些建议

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38165374/article/details/69791809

python3函数传值的一些建议

一 位置参数的传值
1.位置参数必须按照被调用的函数定义的形参的准确位置和数量传值。
传入方式1:非关键字传入,需要按照形参的顺序依次传入。
注意点:例子中输出的结果与传入参数的顺序有关,当参数的个数与定义形参的个数不一致的时候会抛出TypeError错误。
def function(value1, value2):
    print("value1:%d"%value1)
    print("value2:%d"%value2)

if __name__ == "__main__":
    function(10, 5) 

输出结果:
value1:10
value2:5

传入方式2:关键字传入,格式为"形参的名字=实参",这种方式可以不用按照定义的形参的顺序传入,但是数量依然要一致。
def function(value1, value2):
    print("value1:%d"%value1)
    print("value2:%d"%value2)

if __name__ == "__main__":
    function(value2 = 10, value1 = 5)

输出结果:
value1:5
value2:10

二 默认参数(缺省参数)的传值
1.当不确定传入什么参数的时候可以设置一个默认参数,调用函数的时候不传值会使用默认参数,传值会给默认参数重新赋值,默认参数必须放在 所有位置参数后面。
注意点:不要使用可变类型的参数作为默认参数,否则在调用函数的时候会出现问题。
现在要求传入1到2个参数(一个参数或是传入一个值和列表),都可以返回一个添加了这个值的列表,这时就可以使用默认参数来实现,但是例子中为什么传入值之后得到的不是我需要的结果?原因就是使用了可变类型作为默认参数。
1 def function(value, li=[]):
2       li.append(value)
3       return li
4
5
6 if __name__ == "__main__":
7     list1 = function(10)
8     list2 = function(123, [])
9     list3 = function('a')
10    print("list1:%s"%list1)
11    print("list2:%s"%list2)
12    print("list3:%s"%list3)
输出结果:
list1:[10, 'a']
list2:[123]
list3:[10, 'a']
例子解析:代码从上往下执行,执行第7行的时候给函数传入了一个数字10,函数的第二个参数会使用默认的参数li=【】这个空列表,经过函数的处理之后将数字10添加到了列表li中,变量list1指向了函数返回的列表li,此时的list1和li的值都为【10】,执行第8行向函数里面传入123和一个空列表,这时函数接受了两个参数,就不会使用默认参数,处理的结果是将123添加到了传入的空列表中,并返回这个传入的列表的引用,此时的list2的值为【123】,执行第9行的时候传入了一个字符串"a",所以在处理的时候还会使用默认参数li的这个列表,但是列表是可变元素,在执行第7行的时候添加了一个10,所以在这次执行的时候会继续向这个列表中添加"a",所以list3的结果是【10, "a"】,此时list3也指向了函数返回的列表li,也就是说list1和list3这两个变量都指向了li这个列表,由于列表是可变类型,所以在第10到12行打印的时候list1和list2的输出结果相同。

三.不定长参数的传递
1.非关键字不定长参数的传递(元组)
不确定传入的参数数量的时候可以使用非关键字不定长参数,格式为*ages,传入的参数以元组保存。
注意点:不定长参数必须定义在位置参数和默认参数的后面,否则可能会出现传错参数的情况

def function(value, *ages):
    print("value:%d" % value)
    print("ages:%s" % (str(ages)))

if __name__ == "__main__":
    function(10, 11, 12, 13)
输出结果:
value:10
ages:(11, 12, 13)
2.关键字不定长参数的传递(字典)
当传入的参数是成对出现的,即传入的参数有关键字,但是数量不确定,可以使用字典来保存,格式为**kwages,
传入的第一个值为字典的key,第二个值为字典的value。
注意点:关键字不定长参数必须放在所有参数的最后面
def function(value1, value2, **kwages):
    print("value1:%d"%value1)
    print("value2:%d"%value2)
    print("kwages:%s"%(str(kwages)))

if __name__ == "__main__":
    function(10, 5, name="zhangsan")

输出结果:
value1:10
value2:5
kwages:{'name': 'zhangsan'}
函数定义形参的顺序:位置参数->默认参数->非关键字不定长参数->关键字不定长参数。

猜你喜欢

转载自blog.csdn.net/qq_38165374/article/details/69791809