- 传递列表
在函数中修改列表
将列表传递给函数后,函数就可对其进行修改。在函数中对这个列表所做的任何修改都是永
久性的,这让你能够高效地处理大量的数据。
def complete_models(design_models,completed_models):
while design_models:
model = design_models.pop()
completed_models.append(model)
design_models = ['plane','ship','tank']
completed_models = []
complete_models(design_models,completed_models)
print(design_models)
print()
print(completed_models)
正确打印的话能够在最后的输出中看到两个列表的内容已经发生了变化。
禁止在函数中修改列表数据
为解决这个问题,可向函数传递列表的副本而不是原件;这样函数所做的任何修改都只影响副本,而丝毫不影响原件。
def complete_models(design_models,completed_models):
while design_models:
model = design_models.pop()
completed_models.append(model)
design_models = ['plane','ship','tank']
completed_models = []
complete_models(design_models[:],completed_models)
print(design_models)
print()
print(completed_models)
如上去传递参数的时候,打印出来的结果中你就能够发现,传递副本的那个参数列表的内容并没有发生改变。
- 传递任意数量的实参
def make_pizza(*toppings):
"""打印顾客点的所有配料"""
print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')
形参名*toppings中的星号让Python创建一个名为toppings的空元组,并将收到的所有值都封
装到这个元组中。但是当参数列表中不仅包括确定参数和不确定参数的时候,就需要把不确定的形参放在参数的末尾。
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, 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语句允许在当前运行的程序文件中使用模块中的代码。
通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。这还能让你在众多不同的程序中重用函数。将函数存储在独立文件中后,可与其他程序员共享这些文件而不是整个程序。知道如何导入函数还能让你使用其他程序员编写的函数库。
导入模块的方法有多种,下面对每种都作简要的介绍。
#导入整个模块
import variable
variable.make_pizza('cheese','peppers','mushrooms')
#给导入的模块增加别名
import variable as var
var.make_pizza('cheese','peppers','mushrooms')
#导入模块内的所有方法
from variable import *
make_pizza('cheese','peppers','mushrooms')
#导入特定的方法
from variable import make_pizza
make_pizza('cheese','peppers','mushrooms')
#给导入的方法加上别名
from variable import make_pizza as mp
mp('cheese','peppers','mushrooms')