目录
 
 
7.1、定义函数
 
7.1.1、定义一个简单的函数
 
- 函数可以将代码模块化,提高编程效率和功能完善
 - 使用def 语句接函数名并加上圆括号定义函数
 - 函数所包含的代码缩进在函数定义后的冒号里
 - 如需传入参数,在括号中写上参数名,便于调用
 
 
def printHello(name):
    print('hello, ' + name + '!')
printHello('apple.D')
hello, apple.D!
 
7.1.2、实参与形参
 
- 实参是调用函数时,传到函数里的参数,是一个确定变量
 - 形参是定义函数时,需要参数传入完成功能所定义的一个不为特定值的变量
 - 一些类型的参数从主函数传递到函数,会产生一个副本,在函数中被改变,不会影响原主函数中的值,而对于另外一些类型,比如列表,传递的是一个地址,改变地址中包含的元素,会影响主函数中列表所对应的地址所包含的元素
 
 
7.2、传递实参
 
7.2.1、位置实参
 
- 定义函数时,形参由一定的顺序,在调用函数时传入参数,不指定参数时会以形参顺序依次赋值
 
 
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、关键字实参
 
- 在调用参数时,可以指定形参与实参的对应,避免位置不对应而发生错误
 
 
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、形参的默认值
 
- 在定义函数时,对一些非必要传入的参数赋上默认值,可以简化函数调用
 - 有默认值的参数放在后面,避免位置实参依次赋值,造成赋值错误
 
 
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 语句将任一种值返回,主函数中使用变量将其接收
 
 
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、结合位置实参和任意数量的参数
 
- 在可以指定形参时,将形参写在前面,将任意数量的元组类型放在最后
 
 
 
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、使用任意数量的关键字实参
 
- 使用字典将传入参数与其相关的描述联系起来,使用关键字指定参数的方式
 - 字典名请加上两个星号"**"
 
 
 
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 关键字给模块或函数指定别名
 
 
 
import [文件名/ 模块名] as [new_name]
new_name.function_name()
 
 
from [] import function_name as fn
fn()