一、函数
1. 定义:
可以重复使用,用来实现单一或多个“功能”的代码段,以功能为单位
2. 意义:
提高程序的模块化管理,提高代码的重复使用率
3. 分类:
(1) 内置函数(内建函数)
print()、 sorted()、 abs()-求绝对值、(2) 自定义函数
二、 自定义函数
1. 定义:
def 参数名([参数1, 参数2, 参数3]):
函数体
[return 返回值]
2. 详细说明:
(1) 名字---
> 大小写字母,数字(不能开头),下划线
(关键字不能给标识符命名)模块,函数名 也不要
> 形式: 驼峰式或者下划线式
(2) 参数,及个数
(3) 返回值
(4) pass 占位符
--- 保持程序完整性,可以用于开发调试或者(for,if,function)
eg1.
line = input('你想打印几行的三角形')
num = input('你想打印几个三角形')
def printStar(n, l = 5):
for i in range(1, num+1):
print(n*'*')
printStar(nun, line)
三、 自定义函数参数的分类
1. 位置参数
> 定义的参数位置要指定,在调用时必须保持 位置一致。> 位置参数 必须写 ,除默认值
> 可以通过名字传入,与命名关键字参数类似
2. 默认参数
(1) 注意:
> 当定义时指定了函数的名字和默认值> 用于调用不输入参数时,使用默认值
> 用法如: 参数名 = 默认值
(2) 默认参数的特点
> 如果不传入参数值,使用默认值> 定义函数时,位置参数,必须放在默认参数之前(后面会视为默认参数)
> 使用默认值参数,一定不能是 不可变类型(如果可变类型在重复调用时会累加进行)
> 如果全部是默认参数,那么按顺序传入参数
3. 命名关键字参数
(1) 定义:
函数名(*,命名关键字参数) --- (后面的都是)
(2) 注意:
> 形参必须通过关键字来传入参数> 只要定义了命名关键字参数, 必须传入,除非给了默认值
> 参数传入 顺序可以任意,只要指定名字就可以
> 命名关键字参数,在调用时,必须使用已经定义过的关键字,否则报错
(3) 好处:
> 可读性强、> 参数顺序可以忽略、
> 如果有默认值,更加简化
eg2.
# 其中day参数使用关键字参数
def display(context = 'Python',*, day = 8):
return '我正在学习{},已经学习了{}天了'.format(context,day)
program_language = input('你在学什么课程:')
duration = int(input('你了几天了:'))
print(display(program_language, day=duration))
eg3.
li = [1,2,-5, -3]
li.sort(key = abs) # 次数不调用(使用返回值),不能加括号,只函数名
4. 可变参数 (收集参数) --- python特有
--- 接收任意数量的位置参数,把参数 以元组的形式存在(1) 定义
def 函数(* args)
(2) 注意
> args是约定可变参数> *代表打包操作,即定义时会把位置参数转成一个元组
> 调用函数时,如果传入的是位置参数序列(列表、元组),应该使用*代表拆包
> a = [1,2,3,] 其中a是命名对象,b是匿名对象
eg4. 求平方和
def sum(*args):
sum = 0
for i in args:
sum += i ** 2
return sum
5. 关键字参数(收集参数)
(1) 格式
def 函数(**kwargs)#将命名关键字参数打包成字典
#如果以 名 = 值 形式传入,那么把键值对传入kwagrs
eg5.
def register(name, age, **kwargs):
pass
register('张珊', 20)
> 收集参数(可变参数,关键字参数)用来扩展函数的功能
> 调用函数时,如果传入的是字典,应该使用**代表拆包
(2)注意:
> 命名关键字参数和 可变类型参数不能同时使用> 位置参数最靠前
三、 返回值
> 任何函数都有返回值> 返回值使用return定义
> return可以是数也可以是表达式
> return = return None = ‘不写’
> return代表函数结束,之后代码不在执行
> 函数的返回值如果有多个,以元组的形式返回
> 如果多个返回值,可以使用 多个参数来接收,但必须一一对应
四、函数注释
1. 定义方法:
def fun():
'''
传入值
函数基本功能介绍
:return: 返回值
'''
2.访问
方法1: print(fun.__doc__)方法2: help(fun)