Python 基础复习Review_3_函数

目录

7、函数

1)定义函数

2)返回值

3)将函数存储在模块(module)中


7、函数

1)定义函数

# def函数定义,定义以冒号结尾
def greet_user(username):
# 自定义函数需自己来添加说明文档,必须是缩进后的第一行;使用help(函数名)可以查看函数的说明文档
    """显示简单的问候语"""
    print("Hello, "+username.title()+"!" )
greet_user('mary')
greet_user('eric')
# 在定义greet_username()中,username是一个形参
# greet_user('mary')中,'mary'是一个实参;
# 形参:函数完成其工作所需的一项信息
# 实参:调用函数时传递给函数的信息

1)向函数传递信息

传递的是参数,分别为形参和实参。实参是等待外部传入的,形参是接受外部实参,并且保证代码完整性来实现格式化输出。

2)传递实参

传递的三种方法:位置传递、关键字传递、默认传递

1)位置实参

调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参,最简单的关联方式就是基于实参顺序,称为位 置实参。位置实参的顺序特别重要,如果实参和形参顺序不一样,程序不会报错,但是结果会出乎意料。这就意味着,实参传递的顺 序和形参顺序一样。

这个函数指出一款笔记本属于游戏本还是轻薄本以及它叫什么名字,如下所示:

def describe_book(book_type, book_name):
    """显示笔记本的信息"""
    print("\nI have a"+book_type+".")
    print("My "+book_type+"'s name is "+book_name.title()+".")
    
describe_book('geme book', 'lenovo r7000')

这个函数的定义表明,它需要一种笔记本类型和一个名字。调用describe_book()时,需要按顺序提供一种笔记本类型和一个名字。

实参存在形参里,就好比考试不能直接写名字,考卷按顺序上交。

1)调用函数多次

你可以根据需要调用函数任意次。要再描述一款笔记本,只需再次调用describe_book()即可:

def describe_book(book_name, book_type):
    """显示笔记本的信息"""
    print("\nI have a"+book_type+".")
    print("My "+book_type+"'s name is "+book_name.title()+".")
    
describe_book('lenovo r7000p', 'game book')
describe_book('mac book', 'thin book')

第二次调用describe_book()函数时,我们向它传递了实参'mac book',和'thin'。与第一次调用时一样,Python将实参'mac book'关联到形参book_name,并将实参'thin'关联到形参book_type。输出出来的结果大家可以自己试一下,这里不水字数。

位置实参的顺序很重要

使用位置实参来调用函数时,如果实参的顺序不正确,结果会出乎意料,忘记检查代码,emmm。

2)关键字实参

这么说吧,使用位置实参,是一种取巧、省事的方式,因此必须注意为止一一对应;使用关键字实参,略微费事,但是更加精准,无需一一对应,先苦后甜。

关键字实参时传递给函数的 名称-值对。

下面来重新用一遍先前的例子:

def describe_book(book_name, book_type):
    """显示笔记本的信息"""
    print("\nI have a"+book_type+".")
    print("My "+book_type+"'s name is "+book_name.title()+".")
    
describe_book(book_type='game book', book_name='lenovo r7000p')

函数describe_book()还是那样,但是调用起来时,我们向Python明确的指出了各个实参对应的形参。看到这个函数调用时,Python知道应该将实参'game book'和'lenovo r7000p'分别储存在形参book_type和book_name中。

3)默认值

在编写函数的时候,可以给形参指定默认值。在调用函数中,给形参提供了实参,Python将使用知道你过的实参值;否则,将使用形参的默认值。

例如,如果你发现调用describe_book()时,描述的大都是game book,就可以将形参describe_book的默认值设置为‘game book’。这样,调用describe_book()来描述笔记本时,就可以不提供这种信息。

4)等效的函数调用

可以混合是同位置实参、关键字实参和默认值,通常有多种等效的函数调用方式。下面这个函数describe_book()的定义里,给一个形参提供了默认值:

def describe_book(book_name, book_type='game book')

那么基于这种定义,在任何情况下,都必须给book_name提供实参;想要指定该实参时,可以使用位置方式,也可以使用关键字方式。如果要描述的book不是game book,还必须在函数调用中给book_type提供实参;指定该实参方法同上。

2)返回值

函数返回的值称为返回值。函数就像你聘请的雇员,你给他一些材料,告知他如何组装、加工材料,他负责将成品给你。材料就是函数的参数,成品就是函数的输出,怎么加工就是这个函数的代码块。

1)返回简单值

例如:

def get_book_name(first_name, last_name):
    full_book_name = first_name+' 'last_name
    return full_book_name.title()
my_book = get_book_name('lenovo', 'r7000p')
print(my_book)

函数get_book_name()的定义通过形参接收笔记本的品牌和型号。顺便在中间加了一个空格,它俩不是粘在一起的,并将结果存储在变量full_book_name中。然后,将full_book_name的值转换为首字母大写格式,并将结果返回到函数调用中。

调用返回值的函数时,需要提供一个变量,用于存储返回的值。在需要分别存储大量品牌和型号的大型程序中,这种函数非常有用。

2)让实参可选

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

3)返回字典

函数可以返回任何类型的值,包括列表和字典等比较复杂的数据结构。具体就不做演示,只需要在函数中间加上一串代码,定义一个字典即可,最后在函数结尾使用return返回这个字典(被定义了的,不是空的)。

postscript:函数里还可以夹杂什么if函数、while语句等等,你想怎么定义怎么来。

3)将函数存储在模块(module)中

函数的优点之一,就是使用它们可以将代码块与主程序分离。通过给函数指定描述性名称,可让主程序容易理解得多。还可以更进一步,将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。

举个例子:

import wx
# 意为导入模块wx中的所有函数,而from wx.core import Center则是从模块wx中导入Center这个函数

导入模块的方法有以下这些种类。

1)导入整个模块

要使函数是可导入的,先要创建模块。模块是扩展名为.py的文件,其中包含要导入到程序中的代码。你创建的这个模块,你可以定义任意函数在其中,再在另一个程序中,导入这个模块,就是直接:

import 你定义的模块

或者用另一种形式:

import 你定义的模块
随意.模块里的函数()

2)导入特定的函数

导入模块中的特定函数,这种方法的语法如下:

from module_name import function_name

通过都好分割函数名,可根据需要从模块中导入任意数量的函数:

from module_name import function_0,function_1,function_2

3)使用as函数指定别名

如果要导入的函数名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短而独一无二的别名,你就把它当作你给函数取的外号吧。例如:

from module_name import function_name

postscript:甚至还可以给模块指定别名。例如:

from module_name import function_name as fn

4)导入模块中的所有函数

使用星号(*)运算符可让Python导入模块中的所有函数:

from module_name import *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Haku_Marcia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值