【有书共读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#
全部评论
支持
点赞
送花
回复
分享
发布于 2018-06-09 01:17

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务