【有书共读05】《Python编程》读书笔记07
函数的操作
传递列表
向函数传递列表有时候非常有用,这种列表有可能包含的是名字、数字或更复杂的对象(如字典),将列表传递给函数后,函数就能直接访问其内容
来看一个简单的例子
def greet_users(names): for name in names: msg = 'Hello, ' + name.title() + '!' print(msg) usernames = ['Wana' , 'Xioali', 'Sandy'] greet_users(usernames)
在函数中修改列表
如果我们将列表的值传入函数中,并期望可以在函数中修改它的值,只需要将列表名称传入函数中即可。
就如同上一个例子(当然刚才的例子并没有列表的值进行更改,但是它是可以更改的!!!)
再来一个例子:
#coding:utf-8 def liking(names): names.append('Banana') names.append('Apple') names.append('Orange') likes = [] #这时的列表likes是个空列表 liking(likes) #通过函数对列表进行操作 print(likes) #likes发生改变:['Banana', 'Apple', 'Orange']
禁止函数修改列表
但是有些时候,我们需要禁止函数修改列表,这时候只需要向函数中传递列表的副本即可
通过列表的切片表示法来创建副本
(同样是上面的例子,只是把实参稍微改动一下= ̄ω ̄=)
#coding:utf-8 def liking(names): names.append('Banana') names.append('Apple') names.append('Orange') likes = [] #这时的列表likes是个空列表 liking(likes[:]) '''注意这里我们传入的是一个列表的副本''' print(likes) #likes没有发生改变:[]
传递列表的两种方式一定要分清,并且要看情况使用。
传递任意数量的实参
在很多时候,我们预先不知道函数需要接受多少个实参,幸好python支持从调用语句中收集任意数量的实参。
还是先看一个简单的例子
#coding:utf-8 def make_pizza(*toppings): '''打印顾客点的所有配料''' print(toppings) pass make_pizza('aaaaa') make_pizza('bbbbb' , 'ccccc' , 'ddddd') '''输出结果 ('aaaaa',) ('bbbbb', 'ccccc', 'ddddd') '''
我们来看一看这个小程序:
形参名*toppings中的星号让Python创建一个名为toppings的空元组,并且将收到的所有值都封装到这个元组中。
当然,像这样的的任意数量的参数最好是同种类的参数,否则是比较难以处理的。
结合使用位置实参和任意数量实参
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后
#coding:utf-8 def make_pizza(size , *toppings): '''概述索要制作的pizza''' print("\nMaking a " + str(size) + '-inch pizza with the following toppions:') for topping in toppings: print("~" + topping) pass make_pizza(2,'aaaaa') make_pizza(4,'bbbbb' , 'ccccc' , 'ddddd')
使用任意数量的关键字形参
有时候,需要接受任意数量的实参,但预想不知道传递给函数的回事什么样的信息。在这种情况下,可将函数编写成能够接受任意数量的键-值对————调用语句提供了多少就接受多少 。
def build_profile(first , last , **user_info): #创建一个空字典 profile={} #将前两个关键字存入字典中 profile['first_name'] = first profile['last_name'] = last #将任意数量的关键字实参传入字典中 for key, value in user_info.items(): profile[key] = value #函数返回值是字典 return profile user_profile = build_profile('alert', 'einstein' , lacation = 'princeton' , field = 'physics') print(user_profile)
形参**user_info中的两个星号让python创建一个名为user_info的字典,并将接收到的所有形式为名称-值对都封装到这个字典中。我们可以像访问字典一样访问user_info中的键-值对。
#Python#