1. 函数的定义
1.1 最简单的函数结构
-
def f(): '''显示简单的问候语''' print("Hello!") f()
运行结果
Hello!
- 第2行的文本被称为文档字符串的注释,文档字符串由三引号括起,python使用它们来生成有关程序中函数的文档
1.2 向函数传递信息
-
def f(name): '''显示简单的问候语''' print("Hello, "+name.title()+"!") f('jesse')
运行结果
Hello, Jesse!
- 向函数传递实参的方式有位置实参、关键字实参、默认值等
-
def f(name, age): print("Hello, "+name.title()+"! Age: "+str(age)) f('jesse', 10) f(name = 'jesse', age = 10) f(age = 10, name = 'jesse')
运行结果
Hello, Jesse! Age: 10 Hello, Jesse! Age: 10 Hello, Jesse! Age: 10
- 使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参
2. 向函数传递列表
- 在函数中对传递来的列表所做的任何修改都是永久性的
- 若需要禁止函数修改列表,可向函数传递列表的副本(如f(list_name[:]))而不是原件,这样函数所做的任何修改都只影响列表副本,对列表本身无影响
3. 向函数传递任意数量的实参
-
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的空元组,并将收到的所有实参值都封装到这个元组中
3.1 结合使用位置实参和任意数量实参
-
def make_pizza(size, *toppings): '''概述要制作的比萨''' print("\nsize: "+str(size)) print(toppings) make_pizza(16, 'pepperoni') make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
运行结果
size: 16 ('pepperoni',) size: 12 ('mushrooms', 'green peppers', 'extra cheese')
- 如果让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放到最后。
- python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中
3.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的空字典,并将收到的所有名称-值对都封装到这个字典中
4. 将函数存储在模块中
4.1 导入整个模块
- 模块是扩展名为.py的文件,包含要导入到程序中的代码
- 尽量使模块和要运行的py文件在同一目录下
- 比如模块为pizza.py,要运行的文件为making_pizza.py,在making_pizza.py文件中,通过代码行import pizza可导入整个模块。
- 调用模块中的函数方式:如pizza.make_pizza(16, 'pepperoni')
- 可使用as给模块指定别名,通用语法为:import module_name as mn
4.2 导入特定的函数
- 4.1中例子可以替换为from pizza import make_pizza,调用函数时make_pizza(16, 'pepperoni')
- 通过逗号分隔函数名,可根据需要从模块中导入任意数量的函数
- 可使用as给函数指定别名,通用语法为:from module_name import function_name as fn
4.3 导入模块中所有函数
- 通用语法为:from module_name import *
- 但不太推荐使用这种方法,最佳的做法是:要么只导入你需要使用的函数,要么导入整个模块并使用句点表示法
5. 函数编写指南
- 给形参指定默认值时,等号两边不要有空格
- 函数调用中的关键字实参,等号两边也不要有空格
- 如果程序或模块包含多个函数,可使用两个空行将相邻的函数分开
- 所有的import语句都应放在文件开头,唯一的例外情形:文件开头使用了注释来描述整个程序