python提高篇函数的使用2

上节课我们学习Python的函数基本构成和函数调用。本节课我们来学习函数其他知识。

今天我们来讲解函数的参数问题。

位置参数

位置参数就是参数的位置已经定好,参数传递需要按照这个顺序传递,不然会出现驴村不对马嘴情况。看下面的例子。

def people(name,age):
    print('姓名:',name,'年龄:',age)
people('张三',18)
people(18,'李四')
# 姓名: 张三 年龄: 18
# 姓名: 18 年龄: 李四

上面例子中我们看到,位置参数传递参数时一定要注意位置问题。

序列参数

什么是序列,我们之前学过的列表,元组,字典都叫做序列。我们看下面例子序列是如何传递参数的。

def people(name,age):
    print('姓名:',name,'年龄:',age)
people(*['张三',17])
people(*('李四',18))
people(**{'age':19,'name':'王五'})

# 姓名: 张三 年龄: 17
# 姓名: 李四 年龄: 18
# 姓名: 王五 年龄: 19

看上面例子,列表和元组传递参数时候,我们在它们前面加一个*****,这样就可以实现序列传递参数了,我们再来看一下字典的传递参数。字典的传递在字典的前面使用******。有一点需要注意,列表和元组传递参数时候也需要注意顺序问题,而字典不需要顺序,本身字典就是无序的。

关键字参数

关键字参数是为了防止参数顺序问题给我们带来不必要的烦恼。使用字典传递可以防止参数顺序错乱。但是写起来比较麻烦,我们可以使用下面的例子

def people(name,age):
    print('姓名:',name,'年龄:',age)

people(age=18,name='张三')
# 姓名: 张三 年龄: 18

这种参数传递方式,可以理解为name只接收参数name,age只接收age。防止了参数接收错误的问题。

默认参数

函数的有些参数我们可以提前设置好一些参数,这个参数可以改变,也可以重新传递。看下面例子

def people(age,name='张三'):
    print('姓名:',name,'年龄:',age)
people(18)
people(19,'李四')
# 姓名: 张三 年龄: 18
# 姓名: 李四 年龄: 19

设置默认参数时候往往是为了减少重复代码,充分利用数据。

动态参数/万能参数

当我们不确定参数的个数和类型时候,我们就要用到这种参数,只要有参数我就接收,我们看下面例子

def people(*args,**kwargs):
    print(args)
    print(kwargs)

people(1, 2, 3, name="张三", age=18)
# (1, 2, 3)
# {'name': '张三', 'age': 18}

上面的例子我们看到,args只接收非关键字参数,不管什么我全要,并且转换成元组形式。**kwargs*只接收关键字参数,并且转换成字典。

混合使用

上面的几种参数基本可以满足我们实际项目中的大部分场景,这需要多练习深入理解。下面我们讲一下拓展的部分。我们将上面几种参数混合使用。

def people(a, b, *args, sex="李四", **kwargs):
    print(a)
    print(b)
    print(args)
    print(sex)
    print(kwargs)

people(1, 2, "a", "b", sex="男", name="张三")

上面的实例是混合使用情况,相对比较复杂,你可以打印一下尝试着理解一下。下节课我们带来结果的讲解,以及为什么这样写。

码字不易,欢迎大家在评论区留言,收藏。或者加入群聊群聊一起进步学习。