• 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 --

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

  • 相关阅读:
    Halcon一日一练:图像分割之基本概念
    Halcon一日一练:创建AOI
    Halcon一日一练:获取图像属性
    Halcon一日一练:创建三通道图像
    Halcon一日一练:Halcon异常判断方法
    Java基础_类的加载机制和反射
    Java基础_死锁、线程组、定时器Timer
    Java基础_通过模拟售票情景解决线程不安全问题
    Java基础_线程的使用及创建线程的三种方法
    HTML/HTML5 知识点思维导图
  • 原文地址:https://www.cnblogs.com/tizer/p/10982234.html
Copyright © 2020-2023  润新知