传递列表
def greet_users(names):
for name in names:
msg = "Hello, "+names.title()+"!"
print(msg)
ssernames = ['hannah','ty','margot']
greet_users(usernames)
在函数中修改列表
将列表传递给函数后,函数就可以对其进行修改,在函数中对这个列表所做的任何修改都是永久性的,这让你能够高效地处理大量的数据
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','dodecahedron']
completed_models = []
print_models(unprinted_designs,completed_models)
show_completed_models(completed_models)
禁止函数修改列表
为了保留原件,可向函数传递列表的副本而不是原件,这样函数所做的任何修改都只影响副本,而丝毫不影响原件。
function_name(list_name[:])
例如
print_models(unprinted_designs[:],completed_models)
传递任意数量的实参
def make_pizza(*toppings)
print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms','green peppers','extra cheese')
形参明*toppings中的星号让python创建一个名为topping的空元组,并将收到的所有值都封装到这个元组中。
也可以加入一个循环
def make_pizza(*toppings)
print("\nMaking a pizza with the following toppings:")
for topping in toppings:
print(topping)
make_pizza('pepperoni')
make_pizza('mushrooms','green peppers','extra cheese')
结合使用位置实参和任意数量实参
如果让函数接收不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。
def make_pizza(size,*toppings)
print("\nMaking a "+str(size)+" -inch pizza with the following toppings:")
for topping in toppings:
print(topping)
make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers','extra cheese')
使用任意数量的关键字实参
有时候需要接受任意数量的实参,可将函数编写成能够接受任意数量的键-值对-------调研语句提供了多少就接受多少。
def build_profile(first,;ast,**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的文件,包含要导入到程序中的代码。
import pizza
pizza.make_pizza(16,'pepperoni')
pizza.make_pizza(12,'mushrooms','green peppers','extra cheese')
总结
module_name.function_name()
module_name :所要导入的模块的文件名,
function_name:所要导入的模块所定义的函数名
导入特定的函数
from module_name import function_name
通过逗号分隔函数名,可根据需要从模块中导入任意数量的函数
form module_name import function_0,function_1,function_2
例如
from pizza import make_pizza
make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers','extra cheese')
使用as给函数指定别名
如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短而独一无二的别名-----函数的另一个名称,类似于外号。
给函数make_pizza()指定了别名mp()
form pizza import make_pizza as mp
mp(16,'pepperoni')
mp(12,'mushrooms','green peppers','extra cheese')
指定别名的用法
form module_name import function_name as fn
使用as给模块指定别名
通过给模块指定简短的别名(如给模块pizza指定别名p),让你能够更轻松地调用模块中的函数。
import pizza as p
p.make_pizza(16,'pepperoni')
p.make_pizza(12,'mushrooms','green peppers','extra cheese')
导入模块中的所有函数
使用星号(*)运算符可让python导入模块中的所有函数
form pizza import *
make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers','extra cheese')
函数编写指南
细节:1应该给函数指定描述性名称,且只在其中使用小写字母和下划线
2每个函数都应该包含简要地阐述其功能的注释,该注释应紧跟在函数定义后面,并采用文档字符串格式。
3给形参指定默认值时,等号两边不要有空格
def function_name(parameter_0,parameter_1='default value')
对于函数调用中的关键字实参也要遵循这种规定
function_name(value_0,parameter_1='value')