zoukankan      html  css  js  c++  java
  • python随笔9(传递实参)

    鉴于函数定义中可能包含多个形参,因此函数调用中也可能包含多个实参。向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同;也可使用关键字实参,其中每个实参都是由变量名和值组成;还可以使用列表和字典。

    位置实参

    你调用函数时,python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。

    来看一个显示宠物信息的函数。

    def describe_pet(animal_type,pet_name):
        """显示宠物信息"""
        print("
    I have a " + animal_type + " . ")
        print("My " + animal_type + "'s name is " + pet_name.title() + ".")
    describe_pet('hamster','harry')

    这个函数的定义表明,它需要一种动物类型和一个名字。。调用describe_pet()时,需要按顺序提供一种动物类型和一个名字。例如,在前面的函数调用中,实参’hamster’存储在形参animal_type中,而实参’harry’存储在形参pet_name中。在函数体内,使用了这两个形参来显示宠物信息。

    I have a hamster . 
    My hamster's name is Harry.

    调用函数多次

    你可以根据需要调用函数任意次。要再描述一个宠物,只需要再次调用describe_pet():

    def describe_pet(animal_type,pet_name):
        """显示宠物信息"""
        print("
    I have a " + animal_type + " . ")
        print("My " + animal_type + "'s name is " + pet_name.title() + ".")
    describe_pet('hamster','harry')
    describe_pet('dog','willie')

    位置实参的顺序很重要

    使用位置实参来调用函数时,如果实参的顺序不正确,结果可能出乎意料。

    关键字实参

    关键字实参时传递给函数的名称—值对。你直接再实参中将名称和值关联起来了,因此向函数传递实参时不会混淆。关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值地用途。

    def describe_pet(animal_type,pet_name):
        """显示宠物信息"""
        print("
    I have a " + animal_type + " . ")
        print("My " + animal_type + "'s name is " + pet_name.title() + ".")
    describe_pet(animal_type='hamster',pet_name='harry')

    默认值

    编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时。python将使用指定地实参值。否则,将使用形参的默认值。因此,给形参指定默认值后,可在函数调用中省略相应的实参。

    def describe_pet(pet_name,animal_type = 'dog'):
        """显示宠物信息"""
        print("
    I have a " + animal_type + " . ")
        print("My " + animal_type + "'s name is " + pet_name.title() + ".")
    describe_pet(pet_name='willie')

    这里修改了函数describe_pet()的定义,在其中给形参animal_type指定了默认值’dog’。这样,调用这个函数时,若没有给animal_type指定值,python将把这个形参设置成’dog’。

    请注意,在这个函数的定义中,修改了形参的排列顺序。由于给animal_type指定了默认值,无需通过实参来指定动物类型,因此在函数调用中只包含一个实参——宠物的名字。。然而,python依然将这个实参视为位置实参,因此如果函数调用中只包含宠物的名字,这个实参将关联到函数定义中的第一个形参。

    使用这个函数的最简单的方式是

    describe_pet('willie')

    这个实参将关联到函数定义中的第一个形参——pet_name。

    等效的函数调用

    鉴于可混合使用位置实参,关键字实参和默认值,通常有多种等效的函数调用方式。请看下面:

    def describe_pet(pet_name,animal_type = 'dog'):

    基于这种定义,在任何情况下都必须给pet_name提供实参;指定该实参时可以使用位置方式,也可以使用关键字方式。如果描述的动物不是小狗,还必须在函数调用中给animal_type提供实参。

    下面对这个函数的所有调用都可行:

    #一条名为Willie的小狗
    describe_pet('Willie')
    describe_pet(pet_name='Willie')
    #一只名为Harry的仓鼠
    describe_pet('harry','hamster')
    describe_pet(pet_name='harry',animal_type='hamster')
    describe_pet(animal_type='hamster',pet_name='harry')
  • 相关阅读:
    Python:virtualenv 和 venv
    NHibernate从入门到精通系列(9)——一对多关联映射
    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo
    Android与IIS身份验证——基本验证
    NHibernate从入门到精通系列(8)——一对一关联映射
    NHibernate从入门到精通系列(10)——多对多关联映射
    Android与IIS身份验证——Form验证
    以C#编写的Socket服务器的Android手机聊天室Demo
    【算法系列】使用LINQ来检测和删除重复的文件
    【算法系列】一道笔试试题——回文数算法
  • 原文地址:https://www.cnblogs.com/wf1017/p/9419633.html
Copyright © 2011-2022 走看看