python函数2(返回值、传递列表...)
1、返回值
1.1、返回简单的值
1 #返回简单值
2 def get_formatted_name(first_name,last_name):
3 """返回整洁的名字"""
4 full_name = first_name + ' ' + last_name
5 return full_name.title() #将首字母大写
6
7 musician = get_formatted_name('jim','harry')
8 print(musician)
执行结果:
Jim Harry
1.2、实参可选
什么叫参数可选,就是在调用函数时,如果形参中定义的值在函数调用时并不存在,那么怎么要实参可选呢?就是把形参定义一个默认值,这个默认值为空即可。
1 #实参可选
2 def get_formatted_name(first_name,last_name,middle_name = ''):
3 """返回整洁的名字"""
4 if middle_name:
5 full_name = first_name + ' ' + middle_name + ' '+ last_name
6 else:
7 full_name = first_name + " " + last_name
8 return full_name.title()
9
10 musician = get_formatted_name('jim','harry')
11 print(musician)
12 musician = get_formatted_name('jim','harry','coo')
13 print(musician)
执行结果:
Jim Harry
Jim Py Harry
1.3、返回字典
函数可以返回任意值,包括列表、字典等复杂的数据结构
1 #返回字典
2 def get_formatted_name(first_name,last_name):
3 """返回整洁的名字"""
4 full_name = {'first':first_name,'last':last_name}
5 return full_name
6
7 musician = get_formatted_name('jim','harry')
8 print(musician)
执行结果:
1 {'last': 'harry', 'first': 'jim'}
还可以增加年纪等信息
1 #拓展,增加年纪等信息
2 def get_formatted_name(first_name,last_name,age = ''):
3 """返回整洁的名字"""
4 person = {'first':first_name,'last':last_name}
5 if age:
6 person['age'] = age
7 return person
8 musician = get_formatted_name('jim','harry',age = '27')
9 print(musician)
执行结果:
1 {'age': '27', 'last': 'harry', 'first': 'jim'}
1.4、结合使用函数和while循环
函数可以结合之前学过的while循环进行使用,让人机交互成为可能。
#结合使用函数和while循环
def get_formatted_name(first_name,last_name):
"""返回整洁的名字"""
full_name = first_name + ' ' + last_name
return full_name
while True:
print("\nPlease inter your name?")
print("inter q to quit!")
f_name = input('First name :')
if f_name == 'q':
break
l_name = input('Last name:')
if l_name == 'q':
break
musician = get_formatted_name(f_name,l_name)
print(musician)
2、传递列表(修改列表、禁止函数修改列表)
使用背景:向函数传递列表很有用,这种列表包含的可能是名字、数字或者更复杂的对象(如字典),将列表传递给函数后,函数就可以直接访问其内容。
示例:
将打印出对每个人的问候语。
1 #传递列表
2 def greet_users(names):
3 """向列表中的每位用户都发出简单的问候"""
4 for name in names:
5 msg = 'Hello,' + name.title() + "!"
6 print(msg)
7
8 usernames = ['harry','kobe','james']
9 greet_users(usernames)
执行结果:
1 Hello,Harry!
2 Hello,Kobe!
3 Hello,James!
2.1、在函数中修改列表
将列表传递给函数后,函数可对其进行修改,在函数中对这个列表所做的任何修改都是永久性的。
1 #禁止函数修改列表
2 def print_models(unprinted_desgins,completed_models):
3 """
4 模拟打印每个设计,直到没有未打印的设计为止
5 打印每个设计后,都将其移到列表completed_models中
6 """
7 while unprinted_desgins:
8 current_design = unprinted_desgins.pop()
9
10 #模拟根据设计制作3D打印模型的过程
11 print('Printing model:' + current_design)
12 completed_models.append(current_design)
13
14 def show_completed_models(completed_models):
15 """显式打印好的所有模型"""
16 print("\nThe following models have been printed:")
17 for completed_model in completed_models:
18 print(completed_model)
19
20 unprinted_designs = ['iphone case','robot pendant','dodecahedron']
21 completed_models = []
22
23 print_models(unprinted_designs,completed_models)
24 show_completed_models(completed_models)
执行结果:
1 Printing model:dodecahedron
2 Printing model:robot pendant
3 Printing model:iphone case
4
5 The following models have been printed:
6 dodecahedron
7 robot pendant
8 iphone case
2.2、禁止函数修改列表
#禁止函数修改列表
print_models(unprinted_designs[:],completed_models)
执行结果:
Printing model:dodecahedron
Printing model:robot pendant
Printing model:iphone case
3、传递任意数量的实参
使用背景:不知道函数需要接受多少个实参,函数无法处理超出预定形参的实参数量,那么可以只用一个形参 *toppings;
这样不管提供了多个实参,都可以收入。
示例:
1 #传递任意数量的实参
2 def user_name(*toppings):
3 print(toppings)
4
5 user_name('Harry','james','kobe')
执行结果:
('Harry', 'james', 'kobe')
以上,将执行结果封装在一个元祖中。
也可以对输入的实参进行遍历操作:
1 def user_name(*toppings):
2 print("\n点名情况如下:")
3 for topping in toppings: #进行遍历操作
4 print(topping)
5
6 user_name('Harry','james','kobe')
执行结果:
1 点名情况如下:
2 Harry
3 james
4 kobe
3.1、结合使用位置实参和任意数量实参
可以在函数名增加一些班级、性别等形参,这样就会使用位置实参
1 #结合使用位置实参和任意数量实参
2
3 def user_name(classes,*toppings):
4 print(classes + "点名情况如下:")
5 for topping in toppings:
6 print(topping)
7
8 user_name("高3(1)班",'Harry','james','kobe')
执行结果:
高3(1)班点名情况如下:
Harry
james
kobe