一、传递列表

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

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

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

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

console:

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

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

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

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

二、在函数中修改列表

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

大量的数据。

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

已验证的列表中。如下:

 def print_username(unverify_users,verify_users):
"""模拟打印每个已验证的用户"""
while unverify_users :
current_user = unverify_users.pop() # 模拟打印验证用户过程
print("Verifing user : " + current_user)
verify_users.append(current_user) def show_verify_users(verify_users):
"""打印类表中所有的用户"""
for username in verify_users:
print(username) unv_users = ['joe','jhson','nacy']
v_users = [] print_username(unv_users,v_users)
show_verify_users(v_users)

console:

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

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

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

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

三、禁止函数修改列表

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

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

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

 def print_username(unverify_users,verify_users):
"""模拟打印每个已验证的用户"""
while unverify_users :
current_user = unverify_users.pop() # 模拟打印验证用户过程
print("Verifing user : " + current_user)
verify_users.append(current_user) def show_users(verify_users):
"""打印所有已验证的用户"""
for username in verify_users:
print(username) unv_users = ['joe','jhson','nacy']
v_users = [] print_username(unv_users[:],v_users)
show_users(v_users)
show_users(unv_users)

console:

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

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

-- The End --

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

最新文章

  1. codeigniter nginx配置
  2. jQuery 之 Callback 实现
  3. Leetcode 270. Closest Binary Search Tree Value
  4. Android带多选功能的PhotoPicker
  5. 打印日志 Log
  6. [Wordpress]wp_dropdown_categories() 添加自定义的attribute(属性)
  7. 安装freebsd9 出现 mountroot>怎么办
  8. treap修订
  9. Oracle SQL Developer使用
  10. <发条游戏设计>粗翻——序言、
  11. vue组件如何被其他项目引用
  12. sitecore8.2 如何关闭性能计数器
  13. Shell脚本开发过程中遇到的问题处理
  14. XGboost学习总结
  15. 深入解读Quartz的原理
  16. tomcat架构分析(valve源码导读)
  17. centos7安装kubernetes 1.1
  18. 十九 Python分布式爬虫打造搜索引擎Scrapy精讲—css选择器
  19. jQuery attr 与 prop 区别最简单分析
  20. 浅谈delphi创建Windows服务程序与窗体实现交互

热门文章

  1. PJzhang:左耳朵耗子-陈皓
  2. P1218 过路费
  3. Luogu P2114[NOI2014]起床困难综合症 【贪心/位运算】By cellur925
  4. SQL 实战语句(9)
  5. Hdu 5452 Minimum Cut (2015 ACM/ICPC Asia Regional Shenyang Online) dfs + LCA
  6. 执行impdp时ORA-39213: Metadata processing is not available错误处理
  7. Retrofit实现PUT网络请求,并修改Content-Type
  8. 华容道 noip2013 70分搜索
  9. html5表单新增的元素与属性
  10. BBS项目总结