上一章我们学习了函数的基本用法,以及结合了前面的知识做了一些回顾性的例题。本章我们继续学习函数,用更多的例题让你深入理解函数。
向函数传递列表
def get_list(names): for name in names: # 定义这个变量是为了打印名字的时候首字母可以大写 l_name = f"你好,{name}" print(l_name.title()) # 这里定义一个列表 user_name = ['tom','tim','bob'] # 调用函数,使用列表的值 get_list(user_name)
话不多说,我们首先上了一个例子,这个例子中l_name这里,小伙伴有疑问就自己动手试试,不要这个l_name变量看看能不能首字母大写哦,也可以试试其他的方法首字母大写哦。这里只是告诉各位可以这么来写,并无其他用途,它就等价于print(f"你好,{name.title()}")。
在函数中修改列表
def full_animals(animals,make_animals): # 循环动物列表 while animals: # 使用列表方法方法,一个个移除 new = animals.pop() print(f"被运走的动物有:{new}") # 将移除的重新添加到新的动物列表中 make_animals.append(new) # 循环遍历添加进去的动物 # def make_full_animals(make_animals): for every_animals in make_animals: print(f"被添加进来的动物有:{every_animals}") animals = ['cat','dog','bird','snake'] make_animals = [] full_animals(animals,make_animals) # make_full_animals(make_animals)
这个示例就涉及到我们之前学习的列表的,如果你可以看懂,说明学的还是很OK的。
我们也可以添加一个函数,添加在for循环前面哦,不过清安这里注释掉了,你可以自己尝试一下。这里小伙伴们可能看着有点犯迷糊,看我将它分解为不是函数体制的,小伙伴一对比就明白了。
animals = ['cat', 'dog', 'bird', 'snake'] make_animals = [] # 循环这个动物列表 while animals: # 使用列表方法方法,一个个移除 new = animals.pop() print(f"被运走的动物有:{new}") # 将移除的重新添加到新的动物列表中 make_animals.append(new) for every_animals in make_animals: print(f"被添加进来的动物有:{every_animals}")
传递任意数量的实参
首先我们需要明白的一点是什么样的格式才能进行任意数量的实参传递呢,看例子吧:
def new_name(*name): print(name) new_name('张三','李四','王五')
我们定义了一个带有*号的形参,这个形参的意思就是会让python创建一个名为name的空元组,如何通过调用函数将实参写入空元组中。
小伙伴也可以换一种输出方式:用for循环一个个输出出来
def new_name(*name): for names in name: print(names) new_name('张三','李四','王五')
这个就不解释了,小伙伴应该秒懂,不懂得看我for循环介绍哦。实参我们是可以组合起来用的哦。
这里的*name在后面学习过程种我们会看到不同的用法,这里是组成一个元组,后面还有会解包等用法。
位置实参与任意数量实参
def new_name(year,*name): for names in name: print(f"我的名字叫{names},今年{year}岁了") new_name(12,'张三','李四','王五')
这里值得注意的地方就只是传参的位置了,不管是默认形参还是任意数量形参,都只能放在形参的最后面哦
任意数量的关键字实参
这个就比较有趣,并且比较的重要了,它的方式是**,意思组建一个空字典哦,并且写法也有一些不一样。
def new_name(first_name,last_name,**names): # 这里的[]里面的内容可以随意写什么样的字符串哦 names['first_name'] = first_name #1 names['last_name'] = last_name #2 # 将值返回到列表,这里的意思就是此路不同,就此打住 return names # 这里有两种传值方式 new_names = new_name('zhang','san',lisi = 'lisi',wangwu = 'wangwu') print(new_names) # {'lisi': 'lisi', 'wangwu': 'wangwu', 'first_name': 'zhang', 'last_name': 'san'}
解惑:names是创建一个空字典,实则我们这里定义的函数new_name只有两个形参first_name,last_name,往下看#1跟#2这里是字典传值的方式。不明白的可得好好复习了。
我们呢给定实参的时候有两种方式,一种是直接给定形参的值,这是位置实参传值,后面的才是关键字实参传值。
new_names中以=相连接的实参直接传到names字典中,然后传到对应的键值对里。这里不要理解的太复杂,就是类似于重写了键,值是正常通过first_name,last_name传递的。然后重新组建了字典。
注:**names也可以理解为python在收集任意数量的关键字实参,这里在后面也会学习到。