第七章 函数
7.1 定义函数
使用关键字def来定义一个函数。
def greet_user():
print("Hello")
# 调用函数
greet_user()
7.1.1 实参和形参
def greet_user(username):
print("Hello" + username)
# 调用函数
greet_user('chenjiahe')
在函数greet_user中,username变量是形参----函数完成其工作所需要的一项信息。
在调用函数中的chenjiahe是实参----调用函数时要传递给函数的值。
7.2 传递实参
向函数传递实参的方式有很多:
位置实参----实参的顺序与形参的顺序相同
关键字实参----每个实参都由变量名和值组成。
7.2.1 位置实参
def describe_pet(animal_type, pet_name):
print("宠物类型:" + animal_type + "\n")
print("宠物名字:" + pet_name)
# 在调用函数时,实参的顺序要和形参的顺序相对应。
describe_pet('哈士奇', 'mango')
7.2.2 关键字实参
def describe_pet(animal_type, pet_name):
print("宠物类型:" + animal_type + "\n")
print("宠物名字:" + pet_name)
# 在调用函数时,要指定形参和对应的实参。顺序无关紧要。
describe_pet(animal_type = '哈士奇', pet_name = 'mango')
7.2.3 给形参指定默认值
def describe_pet(animal_type, pet_name='mango'):
print("宠物类型:" + animal_type + "\n")
print("宠物名字:" + pet_name)
#使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参。
describe_pet(animal_type = '哈士奇')
7.3 返回值
函数并非总是直接显示输出,它可以处理一些数据,并返回一个或一组值。
def get_formatted_name(first_name, last_name):
"""返回完整的名字"""
full_name = first_name + last_name
return full_name
get_formatted_name('chen', 'jiahe')
print(get_formatted_name)
7.3.1 让实参变为可选
def get_formatted_name(first_name, last_name, middle_name=''):
"""返回完整的名字"""
if midlle_name:
full_name = first_name + middle_name + last_name
else:
full_name = first_name + last_name
return full_name
get_formatted_name('chen', 'he')
print(get_formatted_name)
get_formatted_name('chen', 'he', 'jia')
print(get_formatted_name)
7.3.2 返回字典
def build_person(first_name, last_name):
"""返回一个字典,其中包含某个人的信息"""
# 将形参收到的值放进字典的值中
person = {'first': first_name, 'last': last_name}
return person
build_person('chen', 'hua')
print(person)
7.3.3 结合使用函数和while循环
def get_formatted_name(first_name, last_name):
full_name = first_name + last_name
return full_name
while True:
print("请告诉我你的全名:")
print("退出请输入q")
f_name = input("请输入你的姓:")
if f_name = 'q':
break
l_name = input("请输入你的名:")
if l_name = 'q':
break print("请告诉我你的全名:")
print("退出请输入q")
f_name = input("请输入你的姓:")
if f_name = 'q':
break
l_name = input("请输入你的名:")
if l_name = 'q':
break
formatted_name = get_formatted_name(f_name, l_name)
print(formatted_name)
7.4 传递列表
def greet_users(names):
"""向列表中的每位用户发出问候"""
for name in names:
msg = "hello," + name + "!"
print(msg)
usernames = ['chen', 'ma', 'zhang']
greet_users(usernames)
7.5 传递任意数量的实参
def make_pizza(*topiings):
print(toppings)
make_pizza('green peppers', 'mushrooms', 'extra cheese')
形参名*toppings中的星号让python创建一个名为toppings的空元组,将收到的所有值都封装到这个元组中。
7.5.1 使用任意数量的关键字实参
def build_profile(first, last, **user_info):
profile = {}
profile['first_name'] = first
profile['last_name'] = last
for key, value in user_info.items():
profile[key] = value
return profile
user_profile = build_profile('chen', 'jiahe', sex='boy', location='china')
print(user_profile)
形参**user_info中的星号是让python创建一个名为user_info的空字典。