美文网首页python
python(16):函数(3)

python(16):函数(3)

作者: Z_bioinfo | 来源:发表于2022-04-08 15:55 被阅读0次

    1.传递列表

    将列表传递给函数后,函数就能直接访问其内容
    假设有一个用户列表,要问候其中的每位用户

    def greet_users(names):
        """向列表中的每位用户都发出简单的问候"""
        for name in names:
            msg = 'hello, ' + name +'!'
            print(msg)
    usernames = ['da ming', 'ling ling', 'ni ni']#定义一个用户列表
    greet_users(usernames)#调用greet_users,并将这个列表传递给他
    hello, da ming!
    hello, ling ling!
    hello, ni ni!
    

    2.在函数中修改列表

    将列表传递给函数后,函数就可对其进行修改,在函数中对这个列表所做的任何修改都是永久性的
    一家为用户提交的设计制作3D打印模型的公司,需要打印的设计存储在一个列表中,打印后转移到另一个列表中。

    #创建一个列表,其中包含一些要打印的设计
    unprinted_designs = ['apple', 'banana', 'pear']
    completed_models = []
    #模拟打印每个设计,直到没有未打印的设计为止
    #打印每个设计后,都将其转移到列表completed_models中
    while unprinted_designs:
        current_design = unprinted_designs.pop()
        #模拟根据设计制作3D打印模型的过程
        print('printing model : ' + current_design)
        completed_models.append(current_design)
    #显示打印好的所有模型
    print('\nthe following models have been printed: ')
    for completed_model in completed_models:
        print(completed_model)
    printing model : pear
    printing model : banana
    printing model : apple
    
    the following models have been printed: 
    pear
    banana
    apple
    ============================================
    #改为函数模式,编写两个函数
    def print_models(unprinted_models, completed_models):#第一个函数,负责处理打印设计的工作
        #模拟打印每个设计,直到没有未打印的设计为止
        #打印每个设计后,都将其转移到列表completed_models中
        while unprinted_designs:
            current_design = unprinted_designs.pop() 
            #模拟根据设计制作3D打印模型的过程
            print('printing model : ' + current_design)
            completed_models.append(current_design)
    def show_completed_models(completed_models):#概述打印了哪些设计
        #显示打印好的所有模型
        print('\nthe following models have been printed: ')
        for completed_model in completed_models:
            print(completed_model)
    unprinted_designs = ['apple', 'banana', 'pear']
    completed_models = []
    
    print_models(unprinted_designs, completed_models)
    show_completed_models(completed_models)
    printing model : pear
    printing model : banana
    printing model : apple
    
    the following models have been printed: 
    pear
    banana
    apple
    

    3.禁止函数修改列表

    有时候需要禁止函数修改列表,为解决这个问题,可想向函数传递列表的副本而不是元件;这样函数所做的任何修改都只影响副本,不影响元件

    #切片法[:]代表创建列表的副本
    print_models(unprinted_designs[:], completed_models)
    

    4.传递任何数量是实参

    有时候,预先布置的函数需要接受多少个实参,python允许函数从调用语句中手机任意数量的实参
    一个制作披萨的寒素,它需要接受很多配料,但无法确定顾客要多少种配料,下面函数只有一个形参*toppings,不管调用语句提供了多少实参,这个形参都将他们统统收入囊中

    def make_pizza(*toppings):
        #打印顾客点的所有配料
        print(toppings)
    
    make_pizza('mo gu')
    make_pizza('cao mei', 'xi hong shi','jiang liao')
    ('mo gu',)
    ('cao mei', 'xi hong shi', 'jiang liao')
    =======================================
    #将print语句替换为一个循环
    def make_pizza(*toppings):
        #打印顾客点的所有配料
        print('\nmaking a pizza with the following toppings :')
        for topping in toppings:
            print('- ' + topping)
        
    
    make_pizza('mo gu')
    make_pizza('cao mei', 'xi hong shi','jiang liao')
    making a pizza with the following toppings :
    - mo gu
    
    making a pizza with the following toppings :
    - cao mei
    - xi hong shi
    - jiang liao
    

    5.结合使用位置实参和任意数量实参

    如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后
    python先匹配位置实参和关键字实参,再将余下的实参收集到最后一个形参中
    如果前边的函数还需要一个表示披萨尺寸的实参,必须将该形参放在*toppings的前面

    def make_pizza(size, *toppings):
        #打印顾客点的所有配料
        print('\nmaking a' + str(size) +  '-inch pizza with the following toppings :')
        for topping in toppings:
            print('- ' + topping)
        
    
    make_pizza(16, 'mo gu')
    make_pizza(12, 'cao mei', 'xi hong shi','jiang liao')
    making a16-inch pizza with the following toppings :
    - mo gu
    
    making a12-inch pizza with the following toppings :
    - cao mei
    - xi hong shi
    - jiang liao
    

    6.使用任意数量的关键字实参

    有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是射门杨的信息,再这种情况下,可将函数编写成能够接受任意数量的键-值对,调用语句提供了多少就接受多少
    创建用户简介:你知道你将收到有关用户的信息,但不确定会是什么样的信息,在下面示例中,build_profile()接受名和姓,同时还接受任意数量的关键字实参

    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('da ming', 'zhang',location='bei jing', field='bai ling')
    print(user_profile)
    {'first_name': 'da ming', 'last_name': 'zhang', 'location': 'bei jing', 'field': 'bai ling'}
    

    7.将函数存储在模块中

    ###1.导入整个模块
    #要让函数是可导入的,得先创建模块,模块是拓展名为.py的文件
    #创建一个包含函数make_pizza的模块
    def make_pizza(size, *toppings):
        #打印顾客点的所有配料
        print('\nmaking a' + str(size) +  '-inch pizza with the following toppings :')
        for topping in toppings:
            print('- ' + topping)
    #在pizza.py所在的目录中创建另一个名为making_pizza.py的文件,这个文件导入刚创建的模块,使用import语句
    import pizza
    
    pizza.make_pizza(16, 'mo gu')
    pizza.make_pizza(12, 'cao mei', 'xi hong shi','jiang liao')
    making a16-inch pizza with the following toppings :
    - mo gu
    
    making a12-inch pizza with the following toppings :
    - cao mei
    - xi hong shi
    - jiang liao
    ===========================================
    #导入特定的函数
    #还可以导入模块中特定的函数,语法如下:
    from module_name import function_name
    #通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数
    from module_name import function_0, function_1, function_2
    #对于前面的making_pizza.py示例,如果只想导入使用的函数
    from pizza import make_pizza
    
    pizza.make_pizza(16, 'mo gu')
    pizza.make_pizza(12, 'cao mei', 'xi hong shi','jiang liao')
    making a16-inch pizza with the following toppings :
    - mo gu
    
    making a12-inch pizza with the following toppings :
    - cao mei
    - xi hong shi
    - jiang liao
    =================================================
    #使用as函数指定别名
    #可以将导入的函数名称改为自己喜欢的名字
    from pizza import make_pizza as mp
    mp(16, 'mo gu')
    mp(12, 'cao mei', 'xi hong shi','jiang liao')
    #通用语法
    from module_name import function_name as fn
    ================================================
    #使用as给模块指定别名
    import pizza as p
    p.make_pizza(16, 'mo gu')
    p.make_pizza(12, 'cao mei', 'xi hong shi','jiang liao')
    #通用语法
    import module_name as mn
    ==============================================
    #导入模块中的所有函数:使用星号*
    from pizza import *
    make_pizza(16, 'mo gu')
    make_pizza(12, 'cao mei', 'xi hong shi','jiang liao')
    #通用语法
    from module_name import *

    相关文章

      网友评论

        本文标题:python(16):函数(3)

        本文链接:https://www.haomeiwen.com/subject/rahssrtx.html