定义函数
-
使用关键字def来定义一个函数
-
指出函数名
-
括号内指出函数需要的信息
-
定义以冒号结尾
-
冒号后的缩进行构成了函数体
-
函数中可使用""“文档字符串”""来描述函数功能
def greet_user(): """显示简单的问候语""" print("Hello!") greet_user()
-
向函数传递信息
def greet_user(username): """显示简单的问候语""" print("Hello, " + username.title() + "!")
-
实参和形参
- 函数定义时,传递的参数为形参
- 函数调用时,实际使用的参数为实参
传递实参
- 位置实参
- 函数调用的实参的关联方式基于实参的顺序
def describe_pet(animal_type, pet_name): """显示宠物的信息""" print("\nI have a " + animal_type + ".") print("My " + animal_type + "'s name is " + pet_name.title() + ".") describe_pet('hamster', 'harry')
- 可以调用函数多次
- 实参的位置顺序很重要
- 关键字实参
- 关键字实参是传递给函数的名称—值对
- 在实参中将名称和值关联起来
- 无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途
def describe_pet(animal_type, pet_name): """显示宠物的信息""" print("\nI have a " + animal_type + ".") print("My " + animal_type + "'s name is " + pet_name.title() + ".") describe_pet(animal_type='hamster', pet_name='harry')
- 默认值
- 函数定义时,给每个形参指定默认值
- 函数调用提供了实参时,函数使用实参值,否则使用默认值
def describe_pet(pet_name, animal_type='dog'): """显示宠物的信息""" print("\nI have a " + animal_type + ".") print("My " + animal_type + "'s name is " + pet_name.title() + ".")
- 形参指定默认值后,将放置在最后;依旧遵守位置实参的对应方式
- 等效的函数调用
- 可混合使用位置实参、关键字实参和默认值
- 避免传参错误
返回值
函数直接显示输出;
函数处理一些数据,并返回一个或一组值。
- 返回简单值
- 调用返回值的函数时,需要提供一个变量,用于存储返回的值
def get_formatted_name(first_name, last_name): """返回整洁的姓名""" full_name = first_name + ' ' + last_name return full_name.title() musician = get_formatted_name('jimi', 'hendrix')
- 让实参变成可选的
- 通过给形参设置默认值实现
- 返回字典
- 函数可返回任何类型的值,包括列表和字典等较复杂的数据结构
def build_person(first_name, last_name): """返回一个字典,其中包含有关一个人的信息""" person = {'first': first_name, 'last': last_name} return person
传递列表
将列表传递给函数后,函数能直接访问列表中内容。
def greet_users(names):
"""向列表中的每位用户都发出简单的问候"""
for name in names:
msg = "Hello, " + name.title() + "!"
print(msg)
- 在函数中修改列表
- 函数中对列表的修改都是永久性的
- 禁止函数修改列表
- 向函数传递列表的副本,而不是原件
function_name(list_name[:])
- 向函数传递列表的副本,而不是原件
传递任意数量的实参
-
使用 * 号创建一个空元组,并将函数收到的值都封装到这个元组中
def make_pizza(*toppings): """打印顾客点的所有配料""" print(toppings) make_pizza('pepperoni') make_pizza('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
-
可以以各种方式混合使用位置实参、关键字实参和任意数量的实参
将函数存储在模块中
import语句允许在当前运行的程序文件中使用模块中的代码
-
导入整个模块
import pizza pizza.make_pizza(16, 'pepperoni')
-
导入特定的函数
from module_name import function_name from module_name import function_0, function_1, function_2
-
使用as 给函数指定别名
from pizza import make_pizza as mp mp(16, 'pepperoni')
-
使用as 给模块指定别名
import pizza as p p.make_pizza(16, 'pepperoni')
-
导入模块中的所有函数
- 使用星号(*)运算符可让Python导入模块中的所有函数
from pizza import *
- 最好不要使用这种方法
- 使用星号(*)运算符可让Python导入模块中的所有函数