函数
函数是带名字的代码块,用于完成具体的工作。要执行函数定义的特定任务,可调用该函数。需要在程序中多次执行同一项任务时,无需反复编写完成该任务的代码,而只需调用执行该任务的函数。
1.input函数
函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储到一个变量中,以方便使用。
name=input("Please tell me your name:")
print(name)
输出结果:
Please tell me your name:John
John
2.input函数与while循环的结合:方便用户的选择
prompt="Enter 'quit' to end the program"
message=" "
while message != 'quit':
message=input(prompt)
print(message)
输出结果:
Enter ‘quit’ to end the program hello
hello
Enter ‘quit’ to end the program hi
hi
Enter ‘quit’ to end the program quit
可以定义一个变量,用于判断整个程序是否处于活动状态,这个变量被称为标志。比如,可以让程序在标志为True时继续运行,并且在任何事件导致标志值为False时让程序停止运行。这样 ,在while语句中,只需检查一个条件——标志的当前值是否为True,从而使程序变得更加简洁。
标志在上一程序的应用示例如下:
prompt="Enter 'quit' to end the program "
active=True
while active:
message=input(prompt)
if message == 'quit':
active=False
else:
print(message)
输出结果:
Enter ‘quit’ to end the program good morning
good morning
Enter ‘quit’ to end the program yes
yes
Enter ‘quit’ to end the program quit
3.区分实参和形参
函数定义中的变量称为形参,函数调用中的变量称为实参
4.实参的传递
(1)位置实参
基于实参的顺序,实现实参到形参的关联,这种关联方式,称为位置实参。
def describe_pet(animal_type, pet_name):
describe_pet('hamster','harry')
注:位置实参的顺序很重要,因为实参与形参是按顺序一一对应的
(2)关键字实参
关键字实参是传递给函数的名称—值对,直接在实参中将名称和值关联起来,无需考虑函数调用的实参顺序
def describe_pet(animal_type, pet_name):
describe_pet(animal_type='hamster',pet_name='harry')
describe_pet(pet_name='harry',animal_type='hamster')
(3)默认值
编写函数时,可以给每个形参指定默认值。在调用函数中,给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。因此,给形参指定默认值后,可在函数调用中省略相应的实参。使用默认值可以简化函数调用,还可以清楚地指出函数的典型用法。
describe_pet(pet_name,animal_type='dog')
describe_pet(pet_name='willie')(采用默认形参)
describe_pet('willie')(采用默认形参)
describe_pet(pet_name='harry',animal_type='hamster')(忽略默认形参)
(4)等效调用
describe_pet(pet_name,animal_type='dog')
describe_pet(pet_name='willie')
describe_pet('willie')
describe_pet(pet_name='harry',animal_type='hamster')
describe_pet('harry','hamster')
describe_pet(animal_type='hamster',pet_name='harry')
5.函数的返回值
(1)返回简单值
def get_name(first_name,last_name):
full_name=first_name+' '+last_name
return full_name
musician=get_name('Jimi','Hendrix')
print(musician)
输出结果:Jimi Hendrix
(2)可选实参
使用默认值让实参变得可选。通常设置条件语句,通过判断实参是否与形参默认值相等,来进行实参选择
def get_formatted_name(first_name,last_name,middle_name=''):
if middle_name:
full_name=first_name+' '+middle_name+' '+last_name
else:
full_name=first_name+' '+last_name
return full_name.title()
musician=get_formatted_name('jimi','hendrix')
print(musician)
musician=get_formatted_name('jimi','hendrix','hooker')
print(musician)
输出结果:
Jimi Hendrix
Jimi Hooker Hendrix
注:函数的形参middle_name=’’,两个单引号之间没有空格
(3)返回字典
def build_person(first_name,last_name):
person={
'first':first_name,
'last':last_name,
}
return person
musician=build_person('jimi','hendrix')
print(musician)
输出结果:{‘first’: ‘jimi’, ‘last’: ‘hendrix’}
(4)传递列表
将列表传递给函数后,函数就能直接访问其内容,并对其内容进行修改。使用函数处理列表,可以提高处理效率。
def print_models(unprinted_designs, completed_models):
while unprinted_designs:
current_design=unprinted_designs.pop()
print("Printing model:"+current_design)
completed_models.append(current_design)
def show_completed_models(completed_models):
print("\nThe Following models have been printed:")
for completed_model in completed_models:
print(completed_model)
unprinted_designs=['iphone case','robot pendant']
completed_models=[]
print_models(unprinted_designs, completed_models)
show_completed_models(completed_models)
输出结果:
Printing model:robot pendant
Printing model:iphone case
The Following models have been printed:
robot pendant
iphone case
6.可变实参
(1)元组可变实参
def make_pizza(*toppings):
print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms','green peppers','extra cheese')
输出结果:
(‘pepperoni’,)
(‘mushrooms’, ‘green peppers’, ‘extra cheese’)
注:形参名*toppings中的星号让Python创建一个名为toppings的空元组,并将收到的所有值都封装在这个元组中。元组值的数量可以变化
(2)字典可变实参
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('albert','einstein',location='princeton',field='physics')
print(user_profile)
输出结果:
{‘first_name’: ‘albert’, ‘last_name’: ‘einstein’, ‘location’: ‘princeton’, ‘field’: ‘physics’}
注:形参名user_info中的两个星号让Python创建一个名为user_info的空字典**,并将收到的所有值都封装在这个字典中。字典键-值对的数量可以变化
7.模块
(1)定义pizza.py模块
def make_pizza(size, *toppings):
print("\nMaking a "+str(size)+"inch pizza with the following toppings:")
for topping in toppings:
print("-"+topping)
(2)导入pizza.py模块中的make_pizza函数
import pizza
pizza.make_pizza(16,'mushrooms')
或者:
from pizza import make_pizza
make_pizza(16,'mushrooms')
(3)使用as给函数指定别名
from pizza import make_pizza as mp
mp(16,'mushrooms')
(4)使用as给模块指定别名
import pizza as p
p.make_pizza(16,'mushrooms')
(5)导入模块中的所有函数
from pizza import *