python 函数(第二节)

本文详细介绍了Python函数的参数传递,包括位置实参、关键字实参和默认值,强调了顺序和关联的重要性。同时,讨论了函数的返回值,包括返回简单值、可选实参以及返回字典的用法,并提到了如何结合使用函数和while循环。

一、传递实参

python必须将函数调用中的每个实参都关联到函数定义中的一个形参。

1、位置实参

最简单的关联方式是基于实参的顺序

def describe_pet(animal_type, pet_name):
    print(f"\nI have a {animal_type}.")
    print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet('hamster', 'harry')
describe_pet('dog', 'willie')#多次调用
#结果输出
I have a hamster.
My hamster's name is Harry.

I have a dog.
My dog's name is Willie.

多次调用是一种效率极高的工作方式。只需要在代码中编写一次,然后每次使用时调用就行了。

在函数中,可根据要使用的任意数量的位置实参,python将按顺序将函数调用中的实参关联到函数定义中相应位置。因此,使用位置实参时,实参顺序很重要。

def describe_pet(animal_type, pet_name):
    print(f"\nI have a {animal_type}.")
    print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet('harry', 'hamster')
#结果输出
I have a harry.
My harry's name is Hamster.

2、关键字实参

直接在实参中将名称和值关联。无须考虑函数调用中实参的顺序,还清楚地指出了函数调用中各个值的用途。

def describe_pet(animal_type, pet_name):
    print(f"\nI have a {animal_type}.")
    print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='dog', animal_type='willie')

使用关键字实参时,必须准确指出函数定义中的形参名称

#结果输出
I have a hamster.
My hamster's name is Harry.

I have a willie.
My willie's name is Dog.

3、默认值

编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,python将使用指定的实参值;否则将使用形参默认值。

def describe_pet(pet_name, animal_type='dog'): 
#给形参指定默认值,只调用一个实参,所以需要把调用的形参放最前面
    print(f"\nI have a {animal_type}.")
    print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet(pet_name='harry')
describe_pet('willie')
#结果输出
I have a dog.
My dog's name is Harry.

I have a dog.
My dog's name is Willie.

二、返回值

函数并不总是直接显示输出,它还可以处理一些数据,并返回一个或一组值。这种返回的值称为返回值。

1、返回简单值

def get_formatted_name(first_name,last_name):
    full_name = f"{first_name} {last_name}"
    return full_name.title()#return函数为返回值
musician =get_formatted_name('jimi','hendrix')#调用返回值函数时,需要提供一个变量
print(musician)
#结果输出
Jimi Hendrix

2、让实参变成可选的

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

def get_formatted_name(first_name, last_name, middle_name=''):
    if middle_name:
        full_name = f"{first_name} {middle_name} {last_name}"
    else:
        full_name = f"{first_name}{last_name}"
    return full_name.title()
musician = get_formatted_name('john','hoker')
print(musician)
musician =get_formatted_name('jimi', 'hendrix', 'lee')
print(musician)
#结果输出
Johnhoker
Jimi Lee Hendrix

3、返回字典 

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

def build_person(first_name, last_name, age=None):
    person = {'first':first_name,'last':last_name}
    if age:
        person['age'] = age
    return person
musician = build_person('jimi','hendrix',age=27)
print(musician)
#结果输出
{'first': 'jimi', 'last': 'hendrix', 'age': 27}

此处将age设置为特殊值“None”(表示变量没有值)=占位符。在条件测试中,None相当于False,如果函数调用中包含形参age的值,这个值将被存储在字典中。

4、结合使用函数和while循环

def get_formatted_name(first_name,last_name):
    full_name = f"{first_name}{last_name}"
    return full_name.title()
while True:
    print("\nPlease tell me your name:")
    print("(enter 'q' at any time to quit)")
    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(f"\nHello, {formatted_name}!")
#结果输出
Please tell me your name:
(enter 'q' at any time to quit)
First name:lee
Last name:lin

Hello, Leelin!

Please tell me your name:
(enter 'q' at any time to quit)
First name:q

注:此试题出自python编程-从入门到实践

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值