内容正文:
任务5.1 函数的定义与调用
名片管理器
各位同学,下面我们来讲解一下函数的定义与调用。
5.1 函数的定义与调用——名片管理器
【任务描述】
名片管理器是一种实用的生活工具,用来帮助管理手机中的各类名片。它需要实现以下功能:名片的添加、名片的删除、名片的修改、名片的查询、获取所有名片信息、系统退出等,其管理界面如图5-1所示。
5.1 函数的定义与调用——名片管理器
【任务分析】
名片管理器的实现需要用到函数的定义和调用。每个功能的实现都需要定义一个函数,可以先设计4个子函数来实现添加名片、删除名片、修改名片信息和显示所有名片的功能;然后定义一个主函数来调用这些子函数,主函数同时要实现系统的退出功能。
5.1 函数的定义与调用——名片管理器
函数及其作用
函数的定义
函数的调用
什么是函数?函数对我们来说其实并不陌生,在前面的章节我们或多或少地使用过函数,只不过它们都是已经定义好的,我们直接调用就可以了。其实函数可以理解为一段功能或者说一段代码的表示。它对应一段可重用的特定的语句组,它是一种功能的抽象,表达特定的含义。在程序设计中,函数通常有两个作用,一个是降低编码的难度,一个是提高代码的重用率。比如一个数学函数ABS(),它用来求实数的绝对值,我们只管拿来用就是了,而不用管它的内部是如何实现的。另外当我们定义了一个函数,在编程中需要用到相关功能,我们可以直接调用函数就可以了,实现代码的复用。下面我们来讲一下如何定义一个函数
5.1 函数的定义与调用——名片管理器
5.1.1 函数的定义与调用
5.1.2 函数参数
5.1.3 函数返回值
5.1.4 变量作用域
5.1.5 任务实现——名片管理器
5.1.2 函数的参数
各位同学,下面我们来讲解一下函数的参数
5.1.2 函数的参数
在定义函数时设置的参数称为形式参数(形参),调用函数时传入的参数称为实际参数(实参)。函数的参数传递是指将实际参数传递给形式参数。
为了增加函数调用的灵活性和便利性,Python设置了多重函数的参数,主要有以下4种参数的传递方式:
位置参数
关键字参数
默认参数
不定长参数
在定义函数时设置的参数称为形式参数(形参),调用函数时传入的参数称为实际参数(实参)。函数的参数传递是指将实际参数传递给形式参数。
为了增加函数调用的灵活性和便利性,Python设置了多重函数的参数,主要有以下4种参数的传递方式:位置参数、关键字参数、默认参数、不定长参数,下面详细介绍各类函数参数及其用法。
5.1.2 函数的参数
def foo (x,y):
print('x:',x)
print('y:',y)
foo(1,2)
1.位置参数的传递
位置参数,有时也称为必备参数,指的是必须按照正确的顺序将实际参数传递到函数中,换句话说,在调用函数时传入的实际参数,其数量和位置都必须和定义函数时的参数保持一致。
【例5-3】位置参数的传递。
x: 1
y: 2
位置参数,有时也称为必备参数,指的是必须按照正确的顺序将实际参数传递到函数中,换句话说,在调用函数时传入的实际参数,其数量和位置都必须和定义函数时的参数保持一致。我们看个例子,定义一个函数foo(),里面有两个参数x和y,函数体里面是两个打印语句,分别打印x和y的值。Foo(1,2)是调用foo函数,并且传入了实参1和2。这里1传递给了x,2传递给了y,通过print函数输出x,y的值,我们看到的运行结果为1和2。注意,在这个例子中,实参必须按照函数定义的形参位置顺序传值,且必须被传值,多一个不行,少一个也不行。
5.1.2 函数的参数
2.关键字参数的传递
关键字参数就是在调用函数传入实参时带参数名,用这样的方式传入的实参叫作关键字参数,关键字参数的语法格式为:
形参名=实参值
位置参数,有时也称为必备参数,指的是必须按照正确的顺序将实际参数传递到函数中,换句话说,在调用函数时传入的实际参数,其数量和位置都必须和定义函数时的参数保持一致。我们看个例子,定义一个函数foo(),里面有两个参数x和y,函数体里面是两个打印语句,分别打印x和y的值。Foo(1,2)是调用foo函数,并且传入了实参1和2。这里1传递给了x,2传递给了y,通过print函数输出x,y的值,我们看到的运行结果为1和2。注意,在这个例子中,实参必须按照函数定义的形参位置顺序传值,且必须被传值,多一个不行,少一个也不行。
5.1.2 函数的参数
def func(a, b=5, c=10):
print('a is', a, 'and b is', b, 'and c is', c)
func(3, 7)
func(25, c=24)
func(c=50, a=100,b=10)
【例5-4】关键字参数的传递。
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 10 and c is 50
在【例5-4】中,名为func的函数有一个没有默认参数值的参数,后跟两个各自带有默认参数值的参数。在第一次调用Python函数时,“func(3, 7)”表示参数a获得了值3,参数b获得了值7,而参数c获得了默认参数值10。在第二次调用函数时,由于“func(25, c=24)”所处的位置,变量a首先获得了值25;然后,由于关键字参数指定,变量c获得了值24。变量b获得默认参数值5。在第三次调用函数时,“func(c=50, a=100,b=10)”表示全部使用关键字参数来指定值。
位置参数,有时也称为必备参数,指的是必须按照正确的顺序将实际参数传递到函数中,换句话说,在调用函数时传入的实际参数,其数量和位置都必须和定义函数时的参数保持一致。我们看个例子,定义一个函数foo(),里面有两个参数x和y,函数体里面是两个打印语句,分别打印x和y的值。Foo(1,2)是调用foo函数,并且传入了实参1和2。这里1传递给了x,2传递给了y,通过print函数输出x,y的值,我们看到的运行结果为1和2。注意,在这个例子中,实参必须按照函数定义的形参位置顺序传值,且必须被传值,多一个不行,少一个也不行。
5.1.2 函数的参数
3.默认参数的传递
默认参数是指在定义函数时,如果不提供参数的值,则取默认值。在调用函数时,默认参数的值可传入也可不传入,所有的位置参数都必须出现在默认参数前面,包括函数定义和调用。默认值参数的形式为:形参名=默认值。
def func(a, b=5, c=10):
print('a is', a, 'and b is', b, 'and c is', c)
func(3, 7)
func(25, c=24)
func(c=50, a=100,b=10)
在【例5-4】关键字参数的示例中,调用func(25, c=24),结果为“a is 25 and b is 5 and c is 24”,其中的参数b就取了它的默认值5.
默认参数是指在定义函数时,如果不提供参数的值,则取默认值。在调用函数时,默认参数的值可传入也可不传入,所有的位置参数都必须出现在默认参数前面,包括函数定义和调用。默认值参数的形式为:形参名=默认值。
在上例中关键字参数的示例中,调用func(25, c=24),结果为“a is 25 and b is 5 and c is 24”,其中的参数b就取了它的默认值5。
5.1.2 函数的参数
4.不定长参数的传递
在程序的某些场景中,如果需要一个函数来处理比在函数定义时更多的参数,而这些参数在函数定义时尚不确定,这种参数叫作不定长参数,其基本语法格式如下:
def 函数([formal_args,] *args,**kwargs):
"函数__文档字符串"
函数体
return 表达式
在函数定义时有一个带星号的参数,如*args,从此处开始直到结束的所有位置参数(Positional Arguments)都将被收集并汇总成一个名为“args”的元组(Tuple)。
同样地,当声明一个带双星号的参数时,如**param,从此处开始直至结束的所有关键字参数都将被收集并汇总成一个名为 “kwargs” 的字典(Dictionary)。
默认参数是指在定义函数时,如果不提供参数的值,则取默认值。在调用函数时,默认参数的值可传入也可不传入,所有的位置参数都必须出现在默认参数前面,包括函数定义和调用。默认值参数的形式为:形参名=默认值。
在上例中关键字参数的示例中,调用func(25, c=24),结果为“a is 25 and b is 5 and c is 24”,其中的参数b就取了它的默认值5。
5.1.2 函数的参数
def total(a=5, *numbers, **phonebook):
print('a', a)
#遍历元组中的所有项目
for single_item in numbers:
print('single_item', single_item)
#遍历字典中的所有项目
for first_part, second_part in phonebook.items():
print(first_part,second_part)
print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))
【例5-5】定义一个不定长参数函数。
a 10
single_item 1
single_item 2
single_item 3
Jack 1123
John 2231
Inge 1560
None
位置参数,有时也称为必备参数,指的是必须按照正确的顺序将实际参数传递到函数中,换句话说,在调用函数时传入的实际参数,其数量和位置都必须和定义函数时的参数保持一致。我们看个例子,定义一个函数foo(),里面有两个参数x和y,函数体里面是两个打印语句,分别打印x和y的值。Foo(1,2)是调用foo函数,并且传入了实参1和2。这里1传递给了x,2传递给了y,通过print函数输出x,y的值,我们看到的运行结果为1和2。注意,在这个例子中,实参必须按照函数定义的形参位置顺序传值,且必须被传值,多一个不行,少一个也不行。
5.1.2 函数的参数
边学边练:
编写一个名为adc()的函数,它有一个名为number的参数。如果参数是偶数,那么abc()打印出number//2;如果number是奇数,那么abc()打印出3*number+1。
$$