• 函数


    一、定义函数
    
    
    1、定义函数
    
    
    
    示例:
    
    def greet_user():           #定义含函数
    
        """显示简单问候语"""           #文档字符串,用三引号括起,python使用它来生成有关程序中函数的文档
    
        print('您好')         #函数体,执行语句
    
    
    greet_user()                  #调用函数
    
    
    
    
    执行结果:
    
    您好
    
    
    ---------------------------------------------------------------------
    
    
    2、向函数传递信息
    
    
    示例:
    
    def greet_userp(uname):
         """显示简单问候语"""
         print('您好: ' + uname + '!')
    
    greet_userp('沈巍伟')
    
    
    执行结果:
    
    您好: 沈巍伟!
    
    ---------------------------------------------------------------------------------------
    
    
    3、实参和形参
    
    下面的示例中,uname即为 形参
    
    
                  '袁凌'即为  实参
    
    
    示例:
    
    def greet_userp(uname):
         """显示简单问候语"""
         print('您好: ' + uname + '!')
    
    greet_userp('袁凌')
    
    
    执行结果:
    
    您好: 袁凌!
    
    =====================================================
    =====================================================
    =====================================================
    =====================================================
    
    
    
    二、传递实参
    
    
    函数定义中可能包括多个形参,因此函数调用中也可能包含多个实参。
    
    向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同;
    
    也可使用关键字实参,其中的每个实参都由变量名和值组成;
    
    还可以使用列表和字典;
    
    
    1、位置实参
    
    调用函数时,python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,
    
    最简单的关联方式是基于实参的顺序。这种关联方式称为位置实参。
    
    
    示例:
    
    
    def describe_pet(animal_type,animal_name):
                                                 """显示动物类型和名字"""
        print("\n动物类型是: "+animal_type)
    
        print('动物名字是: '+animal_name)
    
    describe_pet('宠物猫','橘猫')
    
    describe_pet('宠物狗','哈士奇')
    
    
    
    
    执行结果:
    
    动物类型是: 宠物猫
    动物名字是: 橘猫
    
    动物类型是: 宠物狗
    动物名字是: 哈士奇
    
    
    -------------------------------------------------------------------
    
    2、关键字实参
    
    
    关键字实参是传递给函数的名称——值对。直接在实参中将名称和值关联起来了;
    
    关键字实参无需让你考虑调用的实参的顺序,还清楚的指出了函数调用中各个值的用途;
    
    示例:
    
    
    def describe_pet(animal_type,animal_name):
                                                   """显示动物类型和名字"""
        print("\n动物类型是: "+animal_type)
    
        print('动物名字是: '+animal_name)
    
    describe_pet(animal_type='宠物猫',animal_name='橘猫')
    
    describe_pet(animal_name='哈士奇',animal_type='宠物狗')
    
    
    
    
    执行结果:
    
    
    动物类型是: 宠物猫
    动物名字是: 橘猫
    
    动物类型是: 宠物狗
    动物名字是: 哈士奇
    
    
    ------------------------------------------------------------
    
    3、默认值
    
    编写函数时,可给每个形参指定默认值,在调用函数中如果给形参提供了实参时,python将使用
    
    指定的实参值;否则,将使用形参的默认值;
    
    
    在使用默认值时,在形参列表中必须先列出没有默认值的形参;再列出有默认值的形参;
    
    
    示例:
    
    
    def describe_pet(animal_type,animal_name='神龙'):
                                                        """显示动物类型和名字"""
        print("\n动物类型是: "+animal_type)
    
        print('动物名字是: '+animal_name)
    
    
    describe_pet(animal_type='宠物猫',animal_name='橘猫')
    
    describe_pet(animal_name='哈士奇',animal_type='宠物狗')
    
    describe_pet(animal_type='宠物天使')
    
    describe_pet('宠物魔鬼')
    
    
    
    
    执行结果:
    
    
    动物类型是: 宠物猫
    动物名字是: 橘猫
    
    动物类型是: 宠物狗
    动物名字是: 哈士奇
    
    动物类型是: 宠物天使
    动物名字是: 神龙
    
    动物类型是: 宠物魔鬼
    动物名字是: 神龙
    
    
    
    ---------------------------------------------------------------------
    
    4、等效的函数调用
    
    即几种函数调用方式都可以,可以混合使用
    
    
    示例:
    
    
    def describe_pet(animal_type,animal_name='神龙'):
                                                           """显示动物类型和名字"""
        print("\n动物类型是: "+animal_type)
        print('动物名字是: '+animal_name)
    
    describe_pet(animal_type='宠物猫',animal_name='橘猫')
    
    describe_pet(animal_name='哈士奇',animal_type='宠物狗')
    
    describe_pet(animal_type='宠物天使')
    
    describe_pet('宠物魔鬼')
    
    describe_pet('宠物魔鬼','')
    
    
    
    
    
    执行结果:
    
    
    动物类型是: 宠物猫
    动物名字是: 橘猫
    
    动物类型是: 宠物狗
    动物名字是: 哈士奇
    
    动物类型是: 宠物天使
    动物名字是: 神龙
    
    动物类型是: 宠物魔鬼
    动物名字是: 神龙
    
    动物类型是: 宠物魔鬼
    动物名字是: 鬼
    
    ===============================================================
    ===============================================================
    ===============================================================
    ===============================================================
    
    三、返回值
    
    
    示例:
    
    def get_formatted_name(first_name,last_name):
                                                       """返回整洁的姓名"""
        full_name = first_name + '  ' + last_name
        return  full_name
    
    musician = get_formatted_name('巍伟','')
    
    print(musician)
    
    
    执行结果:
    
    巍伟  沈
    
    ---------------------------------------------------------------
    
    
    2、让实参变成可选的
    
    有时候,需要让实参变成可选的,这样使用函数的人就只需要在必要时才提供额外的信息
    
    
    
    python将非空字符串解读为true,因此函数提供了中间名,则if middle_name = true
    
    
    示例:
    
    
    def get_formatted_name(first_name,middle_name,last_name):
                                                                           """返回整洁的姓名"""
        full_name = first_name + '  '+ middle_name + '  ' + last_name
    
        return  full_name
    
    
    
    musician = get_formatted_name('','','')
    
    print(musician)
    
    
    
    
    执行结果:
    
    巍  伟  沈
    
    
    --------------------------------------------------------------------------
    
    
    示例:
    
    def get_formatted_name(first_name,last_name,middle_name = ''):
                                                                            """返回整洁的姓名"""
        if middle_name  :
    
           full_name = first_name + '  '+ middle_name + '  ' + last_name
    
        else :
    
            full_name = first_name + '  ' + last_name
    
        return  full_name
    
    
    musician = get_formatted_name('wei','wei','shen')
    print(musician)
    
    musician = get_formatted_name('ling','yuan')
    print(musician)
    
    
    执行结果:
    
    wei  shen  wei
    ling  yuan
    
    
    --------------------------------------------------------------------
    
    3、返回字典
    
    
    
    示例:
    
    
    def person(first_name,last_name):
                                                                     """返回一个字典,其中包含有关一个人的信息"""
        person = { 'first_name': first_name,'last_name':last_name}
        return  person
    
    
    musician = person('wei','shen')
    print(musician)
    
    musician = person('ling','yuan')
    print(musician)
    
    
    
    
    执行结果:
    
    {'first_name': 'wei', 'last_name': 'shen'}
    {'first_name': 'ling', 'last_name': 'yuan'}
    
    --------------------------------------------------------------
    
    
    示例:
    
    
    def person(first_name,last_name,age=''):
                                                           """返回一个字典,其中包含有关一个人的信息"""
        person = { 'first_name': first_name,'last_name':last_name}
        if age :
            person['age'] = age
        return  person
    
    
    musician = person('wei','shen')
    print(musician)
    
    musician = person('ling','yuan',27)
    print(musician)
    
    
    
    
    
    执行结果:
    
    {'first_name': 'wei', 'last_name': 'shen'}
    {'first_name': 'ling', 'last_name': 'yuan', 'age': 27}
    
    
    --------------------------------------------------------------
    
    
    4、结合使用函数和while循环
    
    
    
    示例:
    
    
    def get_formatted_name(first_name,last_name) :
                                                           """返回整洁的姓名"""
        full_name = first_name+' '+last_name
        return  full_name
    
    while True :
        print('\n请输入您的姓名; ')
        print("输入'q'退出")
    
        f_name = input("first_name :  ")
        if f_name == 'q' :
            break
    
        l_name = input('last_name :  ')
        if l_name == 'q' :
            break
    
        formatted_name = get_formatted_name(f_name,l_name)
        print("您好,全名是:  "+formatted_name)
    
    
    
    执行结果:
    
    
    
    请输入您的姓名; 
    输入'q'退出
    first_name :  wei
    last_name :  shen
    您好,全名是:  wei shen
    
    请输入您的姓名; 
    输入'q'退出
    first_name :  q
    
    
    ==============================================================
    
    ==============================================================
    
    ==============================================================
    
    ==============================================================
    
    
    四、传递列表
    
    
    将列表传递给函数后,函数就能访问其内容。
    
    
    示例:
    
    def greet_users(names):
                                       """向列表中的每一位用户发出问候"""
        for name in names :
            msg = 'hello   '  + name.title() + '   !'
            print(msg)
    
    usernames = ['shen','yuan','ling']
    greet_users(usernames)
    
    
    
    
    
    执行结果:
    
    
    hello   Shen   !
    hello   Yuan   !
    hello   Ling   !
    
    ----------------------------------------------
    
    
    2、在函数中修改列表
    
    
    示例:
    
    
    unprinted_designs = ['iphone  case','robot  pendant','dodecahedron']
    
    completed_models = []
    
    while unprinted_designs:
        current_design = unprinted_designs.pop()
    
        print('模拟3D打印过程:  '+'  '+current_design)
        completed_models.append(current_design)
    
    
    print('\n显示所有打印好的模型:  ')
    
    for completed_model in completed_models :
        print(completed_model)
    
    
    
    
    
    执行结果:
    
    
    
    模拟3D打印过程:    dodecahedron
    模拟3D打印过程:    robot  pendant
    模拟3D打印过程:    iphone  case
    
    显示所有打印好的模型:  
    dodecahedron
    robot  pendant
    iphone  case
    
    
    -------------------------------------------------------------
    
    示例:
    
    def print_models(unprinted_designs,completed_models) :
        """模拟打印每一个设计,直到没有未打印的设计为止"""
        while unprinted_designs :
            current_design = unprinted_designs.pop()
            print('模拟3D打印过程:  '+'  '+current_design)
            completed_models.append(current_design)
    
    def show_completed_models(completed_models) :
        """显示打印好的所有模型"""
        print('\n显示所有打印好的模型:  ')
    
        for completed_model in completed_models :
             print(completed_model)
    
    
    
    unprinted_designs = ['iphone  case','robot  pendant','dodecahedron']
    completed_models = []
    
    print_models(unprinted_designs,completed_models)
    show_completed_models(completed_models)
    
    
    
    
    
    
    执行结果:
    
    
    
    模拟3D打印过程:    dodecahedron
    模拟3D打印过程:    robot  pendant
    模拟3D打印过程:    iphone  case
    
    显示所有打印好的模型:  
    dodecahedron
    robot  pendant
    iphone  case
    
    
    ------------------------------------------------------------------------
    
    
    4、禁止函数修改列表
    
    
    使用切片以及列表副本  
    
    
    =================================================================
    =================================================================
    =================================================================
    =================================================================
    
    
    五、传递任意数量的实参
    
    
    预先不知道函数需要接受多少个实参;
    
    形参名*toppings中的*号,让python创建一个名为toppings的空元组,将收到的所有值封装到这个元组中。
    
    
    示例:
    
    def make_pizza(*toppings):
                                     """打印顾客点的所有配料"""
        print(toppings)
    
    make_pizza('甜酱')
    
    make_pizza('','','','')
    
    
    
    
    执行结果:
    
    ('甜酱',)
    ('', '', '', '')
    
    ------------------------------------------------------------
    
    
    
    
    示例:
    
    def make_pizza(*toppings):
                                     """打印顾客点的所有配料"""
        print(toppings)
        for topping in toppings:
            print('   '+ topping)
    
    make_pizza('甜酱')
    
    make_pizza('','','','')
    
    
    
    
    执行结果:
    
    ('甜酱',)
       甜酱
    ('', '', '', '')
       盐
       油
       酒
       醋
    
    ------------------------------------------------------------
    
    2、结合使用位置实参和任意数量实参
    
    
    要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后;
    
    
    python先匹配位置实参和关键字实参,再将剩余的实参都收集到最后一个形参中;
    
    
    示例:
    
    
    def make_pizza(size,*toppings):
                                                                            """打印顾客点的所有配料"""
        print('制作披萨的大小是:  '+str(size)+'  所需配料如下: ')
        for topping in toppings:
            print('   '+ topping)
    
    make_pizza(12,'甜酱')
    
    make_pizza(16,'盐份','油份','酒份','醋份')
    
    
    
    执行结果:
    
    
    制作披萨的大小是:  12  所需配料如下: 
       甜酱
    制作披萨的大小是:  16  所需配料如下: 
       盐份
       油份
       酒份
       醋份
    
    
    
    ------------------------------------------------------------
    
    3、使用任意数量的关键字实参
    
    将函数编写成能否接受任意数量的键——值对,调用语句提供多少就接受多少;
    
    
    示例:
    
    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 ( '巍伟','',location='princeton',field='physics' )
    
    print(user_profile)
    
    
    执行结果:
    
    
    {'first_name': '巍伟', 'last_name': '', 'location': 'princeton', 'field': 'physics'}
    
    
    
    =============================================================================================
    =============================================================================================
    =============================================================================================
    =============================================================================================
    
    
    六、将函数存储在模块中
    
    
    比如将函数存储在独立的模块中,再讲模块导入到主程序中。
    
    import语句允许在当前运行的程序中使用模块中的代码;
    
    
    1、导入整个模块
    
    要让函数时可以导入的,得先创建模块。模块是扩展名为.py的文件;包含要导入到程序中的代码;
    
    
    pizza.py
    
    
    def make_pizza(size,*toppings):
                                                                  """打印顾客点的所有配料"""
        print('制作披萨的大小是:  '+str(size)+'  所需配料如下: ')
        for topping in toppings:
            print('   '+ topping)
    
    
    -----------------
    
    import make_pizza
    
    
    make_pizza(12,'甜酱')
    
    make_pizza(16,'盐份','油份','酒份','醋份')
    
    
    
    
    
    2、导入特定的函数
    
    多个函数之间用逗号分隔;
    
    import pizza import make_pizza
    
    
    
    
    
    3、使用as给函数指定别名
    
    
    import pizza import make_pizza as mp
    
    mp(12,'甜酱')
    
    mp(16,'盐份','油份','酒份','醋份')
    
    
    
    4、使用as给模块指定别名
    
    
    import pizza as p
    
    p.make_pizza(12,'甜酱')
    
    p.make_pizza(16,'盐份','油份','酒份','醋份')
    
    
    
    
    
    
    5、导入函数中的所有函数
    
    
    
    from pizza import *
    
    
    make_pizza(12,'甜酱')
    
    make_pizza(16,'盐份','油份','酒份','醋份')
    
    
    
    注意:给形参指定默认值时,等号两边不要有空格。
  • 相关阅读:
    .NET 4.5 异步IO
    使用MANIFEST.MF文件来track War包做持续部署
    .NET 4.5 压缩
    自定义实现URL重写 04.18
    对.Net Framework的认识
    那点所谓的分布式——memcache
    不能选择FreeTextBox下拉列表框
    实战架构设计
    LoadRunner压力测试心得总结
    JavaScript的模块化:封装(闭包),继承(原型)
  • 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/12056561.html
Copyright © 2020-2023  润新知