目录
7.1、定义函数
7.1.1、定义一个简单的函数
- 函数可以将代码模块化,提高编程效率和功能完善
- 使用def 语句接函数名并加上圆括号定义函数
- 函数所包含的代码缩进在函数定义后的冒号里
- 如需传入参数,在括号中写上参数名,便于调用
#示例1
#代码
def printHello(name):
print('hello, ' + name + '!')
printHello('apple.D')
#输出
hello, apple.D!
7.1.2、实参与形参
- 实参是调用函数时,传到函数里的参数,是一个确定变量
- 形参是定义函数时,需要参数传入完成功能所定义的一个不为特定值的变量
- 一些类型的参数从主函数传递到函数,会产生一个副本,在函数中被改变,不会影响原主函数中的值,而对于另外一些类型,比如列表,传递的是一个地址,改变地址中包含的元素,会影响主函数中列表所对应的地址所包含的元素
7.2、传递实参
7.2.1、位置实参
- 定义函数时,形参由一定的顺序,在调用函数时传入参数,不指定参数时会以形参顺序依次赋值
#示例2
#代码
def printHello(first_name, last_name):
full_name = first_name + ' ' + last_name
print('hello, ' + full_name + '!')
printHello('Shiqi', 'Liu')
#输出
hello, Shiqi Liu!
7.2.2、关键字实参
- 在调用参数时,可以指定形参与实参的对应,避免位置不对应而发生错误
#示例3
#代码
def printHello(first_name, last_name):
full_name = first_name + ' ' + last_name
print('hello, ' + full_name + '!')
printHello(last_name = 'Liu', first_name = 'Shiqi')
#输出
hello, Shiqi Liu!
7.2.3、形参的默认值
- 在定义函数时,对一些非必要传入的参数赋上默认值,可以简化函数调用
- 有默认值的参数放在后面,避免位置实参依次赋值,造成赋值错误
#示例4
#代码
def division(fir_num, sec_num = 1):
answer = fir_num // sec_num
print('the answer is ' + str(answer))
division(5)
#输出
the answer is 5
7.2.4、避免参数错误
- 位置实参顺序错误
- 无默认值的参数与传入参数个数不同
7.3、返回值
7.3.1、返回简单值
- 对于被调用函数不会改变原函数参数变量的情况,使用返回值很重要
- 函数中执行return 语句马上退出函数,返回一个值。
- 可以在函数中使用判断条件,确定返回某一个值,
- 使用return 语句将任一种值返回,主函数中使用变量将其接收
#示例5
#代码
def get_full_name(first_name, last_name):
full_name = first_name + ' ' + last_name
return full_name
f_n = get_full_name('Shiqi', 'Liu')
print('hello, ' + f_n + '!')
#输出
hello, Shiqi Liu!
7.4、传递列表
7.4.1、在函数中修改列表
- 将列表传入到函数中,函数中对列表进行修改,会对主函数传入的列表会被改变,因为其名称对应的是同一个列表
7.4.2、禁止修改列表
- 对于一个不希望被函数修改的列表,可以在调用函数时将列表副本传入
- 参考列表一章的方法,使用切片,会得到一个新的变量
7.5、传递任意数量的实参
7.5.1、创建一个元组
- 在函数定义时,不知道会接收到多少个参数可以将所有的参数聚合成一个元组,这样便可以在函数中有效访问传入的参数
- 元组名前面加上星号"*"
7.5.2、结合位置实参和任意数量的参数
- 在可以指定形参时,将形参写在前面,将任意数量的元组类型放在最后
#示例6
#代码
def print_num(*num_tuple):
for num in num_tuple:
print(num)
print_num(1,3,5,7,9)
#输出
1
3
5
7
9
7.5.3、使用任意数量的关键字实参
- 使用字典将传入参数与其相关的描述联系起来,使用关键字指定参数的方式
- 字典名请加上两个星号"**"
#示例7
#代码
def print_letter(**letter_dict):
print(letter_dict)
for key,value in letter_dict.items():
print(key + ' : ' + value)
print_letter(a='bc',d='ef')
#输出
{'a': 'bc', 'd': 'ef'}
a : bc
d : ef
7.6、将函数保存在模块中
7.6.1、导入整个模块
- 可以使用import 语句将未在Python 库里的函数导入使用(这种方式类似于C语言头文件)
- 模块是一种文件化的方式,将函数定义在非主程序的Python 文件里,便于改进和主程序的简明
7.6.2、导入的方式
- 只导入模块,在使用模块中的函数时,需包含模块名
#导入模块
import [文件名/ 模块名]
#函数调用
[文件名/ 模块名].function_name()
- 导入特定函数,对于模块中其他函数,未导入不能使用
#导入函数
from [文件名/ 模块名] import function_name
#调用函数
function_name()
- 导入模块中的所有函数,在import 后写上"*"
#导入模块中所有函数
from [文件名/ 模块名] import *
- 使用as 关键字给模块或函数指定别名
#导入模块并指定别名(new_name )
import [文件名/ 模块名] as [new_name]
#调用其中函数
new_name.function_name()
#导入函数并指定别名(fn )
from [] import function_name as fn
#调用该函数
fn()