Python中的函数(4)

一、传递列表

你经常会发现,向函数传递列表很有用,这种列表包含的可能是名字、数字或者更复杂的对象(如字典)。

将列表传递给函数后,函数就能直接访问其内容。

栗子:假设有一个用户列表,我们要和其中每一位用户打招呼。如何用代码实现,可以看下面的代码:

1 def greet_users(names):
2     """给列表中的每位用户打招呼"""
3     for name in names:
4         msg = "Hello, " + name.title() + " !"
5         print(msg)
6 
7 usernames = ['joe','jasy','nacy']  
8 greet_users(usernames)

console:

解释:我们将greet_users 定义成一个接受一个名字列表,并将其存储在形参names中,这个函数遍历收到的列表,

并对其中的每位用户都打印一条问候语句。在line 7,我们定义了一个名字列表 usernames,然后调用greet_users(),

并将这个列表传递给它。输出的信息也完全符合我们的预期,每位用户都看到了一条问候语句,每当你想问候一组用

户时就可以调用这个函数。

二、在函数中修改列表

在将列表传递给函数后,函数就可以对其进行修改。在函数中 对这个列表的修改是永久性的,这让你能够高效地处理

大量的数据。

栗子:假如有一些用户已注册某网站但未验证,我们需要将他们全部验证,验证过的用户则会从未验证的列表中删除加入

已验证的列表中。如下:

 1 def print_username(unverify_users,verify_users):
 2     """模拟打印每个已验证的用户"""
 3     while unverify_users :
 4         current_user = unverify_users.pop()
 5         
 6         # 模拟打印验证用户过程
 7         print("Verifing user : " + current_user)
 8         verify_users.append(current_user)
 9         
10 def show_verify_users(verify_users):
11     """打印类表中所有的用户"""
12     for username in verify_users:
13         print(username)
14         
15 
16 unv_users = ['joe','jhson','nacy']
17 v_users = []
18 
19 print_username(unv_users,v_users)
20 show_verify_users(v_users)

console:

解释:我们创建了两个列表,一个是未验证的用户列表,里面有三个用户,一个是已验证用户列表,此时是没有用户的,

我们也定义了两个函数:一个功能是模拟打印每个已验证用户,一个是打印列表中的所有用户。可以看到已验证用户列表

从最开始的没有用户到之后的拥有三个用户,可以看出函数中确实可以改变列表。这个例子也表达了一种编程的理念:

每个函数都应只负责一项具体的工作

三、禁止函数修改列表

有时候,需要禁止函数修改列表。假如之前的栗子中,我们在验证用户之后,未验证用户列表会变为空列表(上面的代

码中未打印,可以自己尝试),而我们还需要用到开始未验证的用户列表,以供备案。为了解决这个问题,我们可以向

函数传递一个列表的副本,如下:

 1 def print_username(unverify_users,verify_users):
 2     """模拟打印每个已验证的用户"""
 3     while unverify_users :
 4         current_user = unverify_users.pop()
 5         
 6         # 模拟打印验证用户过程
 7         print("Verifing user : " + current_user)
 8         verify_users.append(current_user)
 9         
10 def show_users(verify_users):
11     """打印所有已验证的用户"""
12     for username in verify_users:
13         print(username)
14         
15 
16 unv_users = ['joe','jhson','nacy']
17 v_users = []
18 
19 print_username(unv_users[:],v_users)
20 show_users(v_users)
21 show_users(unv_users)

console:

可以看到效果是一样的,已验证用户列表中也已经添加了那三个通过验证的用户,而且之前的未验证用户列表中也是有值的,

这样我们就可以继续使用它了。

-- The End --

  黑夜给了你黑色的眼睛,你却用它来翻白眼。

原文地址:https://www.cnblogs.com/tizer/p/10982234.html