第八章 函数
定义函数
关键字def
def get_name():
print("测试函数代码")
调用函数
get_name()
向函数传递信息------在函数的括号内添加需要传递的信息
实参和形参
在函数定义时,函数括号内的参数是形参;
在调用函数时,函数括号内的参数是实参;
传递参数----还可以使用列表和字典
位置实参:实参的顺序和形参的顺序相同---------顺序很重要,如果顺序错误,则实际结果会跟预期结果差别
关键字实参:每个实参由变量名和值组成;
位置实参:
def test1(abc, bcd):
print(abc + " " + bcd)
test("1111","222") >>>1111 2222
关键字实参:
def test2(abc, bcd):
print(abc + " " + bcd)
test2(abc = "1111",bcd = "222") >>>1111 2222
默认值:
编写函数时,可以给每个形参指定默认值,调用函数时,如果提供了实参,则使用指定的参数,否则将使用形参的默认值。
def test3(abc="00000"):
print(abc)
test3() >>>00000
test3("789") >>>789
当有多个形参,而实参个数少与形参个数时,根据实参顺序和形参顺序进行匹配。
可混合使用位置实参、关键字实参和默认值,
避免实参错误:
调用函数时,未指定任何实参
出现traceback 错误时,请确保函数调用和函数定义匹配。
返回值:函数返回的值称为返回值
调用有返回值的函数时,需要提供一个变量,用户存储返回的值。
让实参变为可选的--------在定义函数时,给形参添加使用默认值。
返回字典:
def build_person(first_name, last_name):
"""返回一个字典, 其中包含有关一个人的信息"""
person = {'first': first_name, 'last': last_name}
return person
musician = build_person('jimi', 'hendrix')
print(musician)
结合使用函数和while 循环 :
def get_formatted_name(first_name, last_name):
"""返回整洁的姓名"""
full_name = first_name + ' ' + last_name
return full_name.title()
# 这是一个无限循环!
while True:
print("
Please tell me your name:")
f_name = input("First name: ")
l_name = input("Last name: ")
formatted_name = get_formatted_name(f_name, l_name)
print("
Hello, " + formatted_name + "!")
=========================
增加循环退出条件
def get_formatted_name(first_name, last_name):
"""返回整洁的姓名"""
full_name = first_name + ' ' + last_name
return full_name.title()
while True:
print("
Please tell me your name:")
print("(enter 'q' at any time to quit)")
f_name = input("First name: ")
if f_name == 'q':
break
l_name = input("Last name: ")
if l_name == 'q':
break
formatted_name = get_formatted_name(f_name, l_name)
print("
Hello, " + formatted_name + "!")
=========================
传递列表
def greet_users(names):
"""向列表中的每位用户都发出简单的问候"""
for name in names:
msg = "Hello, " + name.title() + "!"
print(msg)
usernames = ['hannah', 'ty', 'margot']
greet_users(usernames)
在函数中修改列表:
将列表传递给函数后, 函数就可对其进行修改。 在函数中对这个列表所做的任何修改都是永久性的, 这让你能够高效地处理大量的数据。
禁止函数修改列表 :向函数传递列表的副本而不是原件; 这样函数所做的任何修改都只影响副本, 而丝毫不影响原件
要将列表的副本传递给函数, 可以像下面这样做 :function_name(list_name[:]) ----------切片表示法[:] 创建列表的副本。
传递任意数量的实参 --预先不知道函数需要接受多少个实参,python函数允许函数从调用语句中收集任意数量的实参。
def make_pizza(*toppings):
"""打印顾客点的所有配料"""
print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')
解释:形参名*toppings 中的星号让Python创建一个名为toppings 的空元组, 并将收到的所有值都封装到这个元组中。
结合使用位置参数实参和任意实参:
如果要让函数接受不同类型的实参, 必须在函数定义中将接纳任意数量实参的形参放在最后。
使用任意数量的关键字实参
将函数存储在模块中
导入整个模块 import module_name
调用模块的函数:module_name.function()
模块 是扩展名为.py的文件 。
导入特定的函数 from module_name import function_name001, function002
调用函数:直接函数名调用,不需要使用模块名.函数名的方式调用
使用as 给函数指定别名 -----函数名太长或者函数名冲突时,方便使用
from module_name import function_name as f_n
使用as 给模块指定别名 ---import module_name as m_n
导入模块的所有函数---from module_name import *
函数编写指南
1、给函数指定描述性名称,只使用小写字母和下划线
2、每个函数应该包含简要阐述其功能的注释,注释位置应该是定义函数的后面
3、给形参指定默认值时,等号两边不要有空格
4、函数调用时,关键字实参的等号两边不要有空格
5、形参列表比函数体多缩进一层
6、使用4个空格缩进