函数
函数
定义函数
def greet_user():
"""显示简单的问候语"""
print("吃了吗?")
greet_user() #调用函数
这个案例演示了一个最简单的函数结构,使用关键字def来告诉python你要定义一个函数。
向函数传递信息
def greet_user(user_name):
"""显示简单的问候语"""
print("吃了吗?" + user_name.title() + "!")
greet_user('friday')
实参和形参
在函数greet_user()中,变量username是一个形参;
在代码greet_user(‘friday’)中,值’friday’是一个实参;
传递实参
向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同。也可以使用关键字实参,其中每个实参都由变量名和值组成,还可以使用列表和字典。
下面依次介绍:
位置实参
def pets(animal_type,animal_name):
print("I have a " + animal_type + ".")
print("And its name is " + animal_name + ".")
pets('cat','harry')
调用函数多次
pets('dog1','jack1')
pets('dog2','jack2')
位置实参的顺序很重要
pets('jack','dog')
关键字实参
关键字实参是传递给函数的名称-值对。
def pets(animal_type,animal_name):
print("I have a " + animal_type + ".")
print("And its name is " + animal_name + ".")
pets(animal_type='fish',animal_name='tom')
打乱顺序没影响
注意: 使用关键字实参时,无比准确的指定函数定义中的形参名。
pets(animal_name='tom',animal_type='fish')
默认值
编写函数时,可给每个形参指定默认值;
在调用函数中给形参提供了实参时,python将指定实参值;
否则,将使用形参的默认值;
def pets(animal_type,animal_name='tom'):
print("I have a " + animal_type + ".")
print("And its name is " + animal_name + ".")
pets(animal_type='dog')
pets(animal_type='fish',animal_name='jack')
返回值
返回简单值
def user_info(frist_name,last_name):
"""返回姓名"""
full_name = frist_name.title() + last_name.title()
return full_name
get_full_name = user_info('zulpikar','tursun')
print(get_full_name)
让实参变成可选
def user_info(frist_name,middle_name,last_name):
full_name = frist_name + ' ' + middle_name + ' ' + last_name
return full_name.title()
get_full_name = user_info('zulpikar','d','tursun')
print(get_full_name)
然而并非所有人都中间名字
def user_info(frist_name,middle_name,last_name=''):
if middle_name:
full_name = frist_name + ' ' + middle_name + ' ' + last_name
else:
full_name = frist_name + ' ' + last_name
return full_name.title()
get_full_name = user_info('zulpikar','d','tursun')
print(get_full_name)
get_full_name = user_info('sherlock','holmes')
print(get_full_name)
返回字典
函数可返回任何类型的值,包括列表和字典等比较复杂的数据结构。
def user_info(frist_name,last_name):
"""返回一个字典,其中包含用户的姓名"""
user = {
'frist_name':frist_name,
'last_name':last_name
}
return user
user_0 = user_info('zulpikar','tursun')
print(user_0)
练习
练习1
def user_info(name,id,password,tel,age='',qq=''):
user = {
'name':name,
'id':id,
'password':password,
'tel':tel
}
if age:
user['age'] = age
if qq:
user['qq'] = qq
return user
user_0 = user_info('holmes','123213','235f2d','13109923220',qq='1238372943')
print(user_0)
user_0 = user_info('holmes','123213','235f2d','13109923220',qq='1238372943',age='22')
print(user_0)
练习2-结合使用函数和while循环
def user_info(user_name,user_id):
user = {
'user_name':user_name,
'user_id':user_id
}
return user
while True:
u_name = input("\n请输入您的用户名:")
u_id = input("\n请输入你的用户ID:")
get_u_info = user_info(u_name,u_id)
print(get_u_info)
传递列表
01
def user(names):
for name in names:
print("Hello!" + name + ".")
user_names = ['zulpikar','sherlock','friday']
user(user_names)
#02
def user_list(users):
for user in users:
print("吃了吗:" + user)
users = ['A','B','C']
user_list(users)
02
def print_models(unprinted_designs,completed_model):
while unprinted_designs:
current_design = unprinted_designs.pop()
print("准备打印的模型:" + current_design)
completed_model.append(current_design)
def show_completed_models(completed_models):
print("\n打印完成的模型:")
for completed_model in completed_models:
print(completed_model)
unprinted_designs = ['iphone 8','iphone X','iphone Xs','iphone 11','iphone 11pro']
completed_models = []
print_models(unprinted_designs,completed_models)
show_completed_models(completed_models)
练习2
def print_users(all_users,logined_users):
while all_users:
user = all_users.pop()
print("准备登陆的用户:" + user)
logined_users.append(user)
def show_logined_user(logined_users):
print("\n已登陆的用户:")
for logined_user in logined_users:
print(logined_user)
all_users = ['zulpikar','friday','sherlock','monday']
logined_users = []
print_users(all_users,logined_users)
show_logined_user(logined_users)
传递任意数量的实参
def all_users(*users):
print(users)
all_users('zulpikar')
all_users('friday','monday','diu')
形参名*users中的星号让python创建一个名为users的空元组,并把收到的所有值都封装到这个元组中。
def all_users(*users):
print("所有用户:")
for user in users:
print("-" + user)
all_users('zulpikar')
all_users('friday','monday','diu')
结合使用位置实参和任意数量实参
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。
def make_pizza(size,*toppings):
print("做一个大小为" + str(size) + "寸的披萨。配料为:")
for topping in toppings:
print("-" + topping)
make_pizza(16,'辣椒','番茄酱')
make_pizza(14,'水果','牛肉')
使用任意数量的关键字实参
两个星号**user_info让python创建一个名为user_info的空字典,并将收到的所有名称-值对都封装到这个字典中。
def build_profile(frist_name,last_name,**user_info):
profile = {}
profile['frist_name'] = frist_name
profile['last_name'] = last_name
for k,v in user_info.items():
profile[k] = v
return profile
user_profile = build_profile('zulpikar','tursun',id='23456',con='12345678')
print(user_profile)