函数
定义函数
def greet_user(): #def告诉python你要定义一个函数
"""显示简单的问候语""" #函数注释
print('Hello!')
greet_user()
实参和形参
username=input('>>:')
def greet_user(username):#此username为形参
"""显示简单的问候语"""
print('Hello, ' + username.title() + '!')
greet_user(username) #此username为实参
位置实参
调用函数时,python必须将函数调用中的每个实参都关联到函数定义的一个形参。
最简单的关联方式是基于实参的顺序。
关键字实参
关键字实参是传递给函数的名称-值对
def describe_pet(animal_type,pet_name):
"""显示宠物的信息"""
print('
I have a ' + animal_type +'.')
print('My ' + animal_type + "'s name is " + pet_name.title() + '.')
describe_pet(animal_type='dog',pet_name='wang cai') #调用函数时,向python明确地指出了各个实参对应形参
默认值
def describe_pet(pet_name,animal_type='dog'):
"""显示宠物的信息"""
print('
I have a ' + animal_type +'.')
print('My ' + animal_type + "'s name is " + pet_name.title() + '.')
describe_pet(pet_name='wang cai')
返回字典
def build_person(first_name,last_name,age=''):
person={'first':first_name,'last':last_name}
if age:
person['age']=age
return person
musician=build_person('jjc','wcx',age=27)
print(musician)
结合使用函数和while循环
def name(first_name,last_name):
fullname=first_name + ' ' + last_name
return fullname.title()
while True:
print('输入名字:')
f_name=input('firstname:')
if f_name=='q':
break
l_name=input('lastname:')
if l_name=='q':
break
get_name=name(f_name,l_name)
print(get_name)
传递列表
def users(names):
for name in names:
msg='Hello ' + name.title()
print(msg)
usernames=['jjc','wcx']
users(usernames)
禁止函数修改列表
unprinted_designs=['jjc','wcx','jjf','jjb',]
completed_models=[]
def print_models(unprinted_designs,completed_models):
while unprinted_designs:
current_design=unprinted_designs.pop()
#模拟根据设计制作3D打印模型的过程
print('current models:' + current_design)
completed_models.append(current_design)
def show_completed_models(completed_models):
#显示打印好的所有模型
print('
The following models have been printed:')
for completed_model in completed_models:
print(completed_model)
#切片表示法[:]创建列表的副本,函数依然能完成任务,不影响列表本身
print_models(unprinted_designs[:],completed_models)
show_completed_models(completed_models)
print(unprinted_designs)
传递任意数量的实参
def make_pizza(*toppings):
print(toppings)
#形参名的星号让python创建一个名为toppings的元组,并将收到的所有值封装到这个元组
使用任意数量的关键字实参
#两个星号让python创建一个空字典
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)
将函数存储在模块中
将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。
import语句允许在当前运行的程序文件中使用模块中的代码。
导入整个模块
要让函数是可导入的,得先创建模块。模块是扩展名为.py的文件,包含要导入到程序中的代码
创建一个包含函数make_pizza()的模块。为此我们将文件pizza.py中除函数make_pizza()之外的其他代码都删除:
def make_pizza(size,*toppings):
#pizza.py
def make_pizza(size,*toppings):
'''概述要制作的披萨'''
print('
Making a ' + str(size) +
'-inch pizza with the following toppings:')
for topping in toppings:
print('- ' + topping)
#making_pizzas.py
import pizza
pizza.make_pizza(16,'pepperoni')
pizza.make_pizza(12,'mushrooms','green peppers','entra cheese',)
导入特定的函数
from module_name import function_name
#通过逗号分隔函数名
from module_name import function_0,function_1
#对于之前的making_pizza.py示例
from pizza import make_pizza
make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers','entra cheese',)
使用as给函数指定别名
from pizzza import make_pizza as mp
mp(16,'pepperoni')
mp(12,'mushrooms','green peppers','entra cheese',)
#上面的import语句将函数make_pizza()重命名为mp()
#指定别名的通用语法如下
from module_name import function_name as fn
使用as给模块指定别名
import pizza as p
p.make_pizza(16,'pepperoni')
p.make_pizza(12,'mushrooms','green peppers','entra cheese',)
导入模块中所有函数
from pizza import *