python适合函数编程吗_Python基础编程——函数(一)

7ce07b29c2e8bf4d22fae6bcfa99e3bc.png

ea8a87344f190a28c8469fa150b1333f.png

定义函数

2cb708eb528d2627228f16e6ad854656.png

(红点1)的代码行使用关键字def来告诉Python你要定义一个函数。这是函数定义,向Python指出了函数名,还可能在括号内指出函数为完成其任务需要什么样的信息。函数名为:greet_user(),不需要任何信息就能完成其工作,因此括号是空的(即便如此,括号也必不可少)。最后,定义以冒号结尾;

def greet_user():后面的所有所进行构成了函数体。文本是被称为文档字符串的注释。

代码行print("Hello!")(红点3)是函数体内的唯一一行代码,greet_user()只做一项工作:打印Hello!。

要使用这个函数,可调用它。函数调用让Python执行函数的代码。要调用函数,可依次指定函数名以及用括号括起的必要信息(红点5)所示。

84db9d25d275efa99c4cb8f672b58bc1.png

向函数传递信息

只需稍作修改,就可以让函数greet_user()不仅向用户显示Hello!还将用户的名字用作抬头。为此,可在函数定义def greet_user()的括号内添加username。就可以让函数接受你给username指定的任何值。

代码greet_user(‘Jake’)调用函数greet_user(),并提供print执行后的信息;

4d20ef8079a48039166a27b471b40d2a.png

4969af4686de3391eb7268ad8db0294c.png

实参和形参

在函数greet_user()的定义中,变量username是一个形参——函数完成其工作所需的一项信息。在greet_user('Jake')中,值'Jake'是一个实参。

实参是调用函数时传递给函数的信息。在调用函数时,将要让函数使用的信息放在括号内。在greet_user('Jake')中,将实参'Jake'传递给函数greet_user(),这个值被存储在形参username中。

传递实参

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

位置实参

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

d2e2205cb6466b620ee0a3509c9bd8f1.png

这个函数表明,它需要一种动物类型和一个名字(红点1)。调用describe_pet()时,需要按顺序提供一种动物类型和一个名字。在前面的函数调用时,实参'hamster'存储在形参animal_type中,而实参'harry'存储在形参pet_name中(红点6)。

e409da189e40b6e0ee6244067c0b0503.png

调用函数多次(你可以根据需要调用函数任意次,只需调用describe_pet() )

57f9f273bba99a467161213ff1f77bb6.png

第二次调用describe_pet()时,我们向它传递了实参'dog'和'willie'。Python将实参'dog'关联到形参animal_type,并将实参'whillie'关联到形参pet_name。

e50ae4bf98142733dd872b6f1ad7a03e.png

位置实参的顺序很重要

ee226a95ce3a4faf9a1e8854439cb5d0.png

这个函数中,我们先指定名字,在指定动物类型。由于实参'harry'在前,这个值将存储到形象animal_type中;同理,'hamster'将存储到形参pet_name中。(输出结果如下)结果一样搞笑,函数调用中实参的顺序与函数定义中形参的顺序一致。

87f6db811331e9b0404171664272ffd5.png

关键字实参

关键字实参是传递给函数的名称-值对。无需考虑函数调用中的实参顺序,清楚地指出了函数调用中各个值得用途。

10b08b0f658163684d75fb118e65cbff.png

函数describe_pet()还是原来那样,但调用这个函数时,我们向Python明确指出各个实参对应的形参。看到这个函数调用时,Python知道应该将实参'hamster'和'harry'分别存储在形参animal_type和pet_name中。

关键字实参的顺序无关紧要,因为Python知道各个值该存储到哪个形参中。

注意:使用关键字实参是,务必准确地指定函数定义中的形参名。

6ff937a46e782a46ce3b6f06d646822b.png

默认值

编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用的形参的默认值。给形参指定默认值后,可在函数调用中省略相应的实参。使用默认值可简化函数调用,清楚的指出函数的典型用法。

061a28cd3f75135c43c59349f8c3ca79.png

修改了函数describe_pet()的定义,在其中给形参animal_type指定了默认值'dog',这样调用函数时,如果没有给animal_type指定值,Python将把这个形参设置为'dog'。

注意:使用默认值时,在形参列表中必须先列出没有默认值的形参,在列出有默认值的形参。

48a3c75c2011a993af836fd083467bd1.png

等效的函数调用

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

注意:使用哪种方式无关紧要。只要韩式调用能生成你希望的输出就行。

22f988295c5b4752ac3199116e8fa197.png

避免实参错误

开始使用函数时,如果遇到实参不匹配错误,不要大惊小怪。提供的多于或少于函数完成其工作所需的信息时,将出现实参不匹配错误。

1ea0716f8085ac7260f839860034a2c9.png

Python发现该函数用缺少必要的信息,而traceback指出了这一点:

aff137561872522652f51cfa547ed124.png

traceback指出了问题出在什么地方,让我们能够找出函数调用中错误。指出了导致问题的函数调用。traceback指出该函数调用少两个实参,并指出了相应形参的名称。

返回值

函数并非总是直接显示输出、相反、它可以处理数据,并返回一个或一组值。函数返回的值被称为返回值。

在函数中,可使用return语句将值返回到调用函数的代码行。

返回简单值

d188d99a4feb5814a1554e1f602c54ad.png

函数get_formatted_name()的定义通过形参接受名和姓(红点1)。将姓和名合二为一,在它们之间加上一个空格,并将结果存储在变量full_name(红点3)。然后,将full_name的值转换为首字母大写格式,并将结果返回到函数调用行(红点4)。

调用返回值的函数时,需要提供一个变量,用于存储返回的值。(红点6)

0870e2843900d36feca69e5e9cec31c2.png

让实参变成可选的

有时候,需要让实参变成可选的,这样使用函数的人就只需在必要时才提供额外的信息。可使用默认值来让实参变成可选的。

04d7ae178ca46eb4d1733442f2b67136.png

只要同时提供名、中间名和姓,这个函数就能正确的运行;

aea7dba64c16fd35ed408472f7859d4d.png

返回字典

函数可返回任何类型的值,包含列表和字典等较复杂的数据结构。

20eb4034f14d4c23d2f22392454c50c5.png

函数build_person()接受名和姓,并将这些值封装在字典中(红点3)。存储first_name的值时,使用的键为'first',而存储last_name的值时,使用的键为'last'。最后,返回表示人的整个字典(红点4)。(红点7),打印这个返回的值,此时原来的两项文本信息存储在一个字典中;

f97be5afe0830af7f66df5f8f0d06f2d.png

结合使用函数和while循环

c7f1274bfb5c5f88efbe04a6b9b57a05.png

cc8ab032f0541345340383b94e98c2e1.png

以上示例中,我们使用的是get_formatted_name()的简单版本,不涉及中间名。其中的while循环让用户输入姓名:依次提示用户输入名和姓(红点8)。但这个while循环存在一个问题:没有定义退出条件。我们要让用户能够尽可能地退出,因此每次提示用户输入时,都应提供退出途径。每次提示用户输入时,都使用break语句提供了退出循环的简单途径;

48c811e3f36b48fb8298f237cb6066b8.png

添加了一条消息来告诉用户如何退出,然后在每次提示用户输入时,都检查他输入的是否是退出值,如果是,就退出循环。

现在,这个程序将不断的问候,直到用户输入的姓或名为'q'为止:

84083f5bbaf103cc340c69f286f0de59.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值