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

被折叠的 条评论
为什么被折叠?



