传递列表
- 将列表传递给函数后,函数就可以直接访问其内容。
def greet_users(names):
for name in names:
mgs = "Hello " + name.title() + "."
print(mgs)
usernames = ['harry','bobo','sky']
greet_users(usernames)
Hello Harry.
Hello Bobo.
Hello Sky.
[Finished in 0.1s]
在函数中修改列表
- 将函数传递给列表,函数就可以对其进行修改。
- 函数对列表所做的任何修改都是永久性的。
unprinted_desigins = ['iphonr case','rebot pendent','dodecaheron']
completed_models = []
while unprinted_desigins:
current_desigin = unprinted_desigins.pop()
print("Printing model: " + current_desigin)
completed_models.append(current_desigin)
print("\nThe following model have been printed: ")
for completed_model in completed_models:
print(completed_model)
Printing model: dodecaheron
Printing model: rebot pendent
Printing model: iphonr case
The following model have been printed:
dodecaheron
rebot pendent
iphonr case
[Finished in 0.1s]
- 编写两个函数,
- 一个函数负责:打印设计工作
- 另一个函数负责打印了那些设计
def print_models(unprinted_desigins,completed_models):
while unprinted_desigins:
current_desigin = unprinted_desigins.pop()
print("Printing model: " + current_desigin)
completed_models.append(current_desigin)
def show_completed_models(completed_models):
print("\nThe following model have been printed: ")
for completed_model in completed_models:
print(completed_model)
unprinted_desigins = ['iphonr case','rebot pendent','dodecaheron']
completed_models = []
print_models(unprinted_desigins,completed_models)
show_completed_models(completed_models)
Printing model: dodecaheron
Printing model: rebot pendent
Printing model: iphonr case
The following model have been printed:
dodecaheron
rebot pendent
iphonr case
[Finished in 0.1s]
禁止在函数中修改列表
- 使用切片发[:]创建列表的副本。
- 向函数传递列表的副本而不是原件,这样函数的任何修改就只影响副本,而不影响原件。
传递任意数量的参数
- 使用*形参名,允许函数调用语句中收集任意实参。
def make_pizza(*toppings):
print(toppings)
make_pizza("aa")
make_pizza("mushrooms",'green peppers')
('aa',)
('mushrooms', 'green peppers')
[Finished in 0.1s]
- 对列表进行遍历
def make_pizza(*toppings):
print("\nMakeing a pizza with the follwing toppings: ")
for topping in toppings:
print("- " + topping)
make_pizza("aa")
make_pizza("mushrooms",'green peppers')
Makeing a pizza with the follwing toppings:
- aa
Makeing a pizza with the follwing toppings:
- mushrooms
- green peppers
[Finished in 0.1s]
结合使用位置实参和任意数量实参
- 让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后面。
- python优先匹配位置实参和关键字实参
def make_pizza(size,*toppings):
# print("\nMakeing a pizza with the follwing toppings: ")
print("\nMakeing a " + str(size) +
"-inch pizza with the follwing topings: ")
for topping in toppings:
print("- " + topping)
make_pizza(8,"mushrooms")
make_pizza(9,"mushrooms",'green peppers','extra cheese')
Makeing a 8-inch pizza with the follwing topings:
- mushrooms
Makeing a 9-inch pizza with the follwing topings:
- mushrooms
- green peppers
- extra cheese
[Finished in 0.1s]
使用任意数量的关键字实参
- 接受任意数量的实参时,预先不知道会传递给函数什么样的信息。
- 这种情况可将函数编写成能接受任意数量的键-值对,**形参名
def build_user(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_user("kami",'lalun',location="pricetion",filed='physics')
print(user_profile)
{'first_name': 'kami', 'last_name': 'lalun', 'location': 'pricetion', 'filed': 'physics'}
[Finished in 0.1s]
- **user_info两个星号让python创建了一个名为user-info的字典
将函数存储在模块中
函数的优点,可以代码块与主程序分离,
将函数存储在称之为模块的独立文件中,然后再impor导入模块。
存储模块,1.可以隐藏代码细节,将重点放在程序的更高逻辑上。2.在不能程序中重用函数。3.与其他程序员共享文件而不是整个程序。
导入模块
- 创建一个模块pizza.py
def make_pizza(size,*toppings):
print("\nMakeing a " + str(size) +
"-inch pizza with the follwing topings: ")
for topping in toppings:
print("- " + topping)
- 在pizza.py的文件创建另一个名为makeing_pizza.py的文件、
import pizza
pizza.make_pizza(9,'moshrooms')
pizza.make_pizza(100,'aa','bb','cc')
Makeing a 9-inch pizza with the follwing topings:
- moshrooms
Makeing a 100-inch pizza with the follwing topings:
- aa
- bb
- cc
[Finished in 0.1s]
导入特定函数
- 导入模块中的特定的函数
from module_name import function_name
- 用逗号隔开函数名,从模块导入任意需要数量的函数。
from module_name import function_name1,function_name2,function_name3
from pizza import make_pizza
make_pizza(9,'aa')
Makeing a 9-inch pizza with the follwing topings:
- aa
[Finished in 0.1s]
使用as给函数指定别名
- 关键字as将函数重命名为你提供的别名。
from pizza import make_pizza as mp
mp(9,'aa')
Makeing a 9-inch pizza with the follwing topings:
- aa
[Finished in 0.1s]
用as给模块指定别名
import module_name as mn
import pizza as mp
mp.make_pizza(9,'aa')
Makeing a 9-inch pizza with the follwing topings:
- aa
[Finished in 0.1s]
导入模块中所有的函数。
- 使用星号(*)让python导入模块中所有的函数。
from pizza import *
make_pizza(100,'moshrooms')
Makeing a 100-inch pizza with the follwing topings:
- moshrooms
[Finished in 0.1s]
函数编写指南
- 给函数指定描述性名称。
- 每个函数都要阐述七功能的注释。
- 给形参指定默认值时,等号两边不要有空格。
def function_name(parameter_0,parameter='default value')
- 函数调用的关键字实参,同样等号两边不要有空格。
function_name(value_0,patameter='value_1')
总结
- 如何编写函数
- 如何传递实参。
- 如何使用位置实参和关键字实参,以及接受任意数量的实参
- 显示输出的函数和返回值函数。
- 如何将函数通列表,字典、if语句和while语句结合使用