1、定义:封装起来的代码块,实现特定功能、模块,代码复用
2、本质:输入与输出
3、作用:1.代码复用,常用功能封装成函数;2. 模块化开发
4、特点:定义处暂不执行函数体中的内容,调用时才执行
5、内置函数
id(), type(), len(), max(list),
绝对值:abs(-1)
最大最小值:max([1,2,3])、min([1,2,3]),对序列进行操作
序列长度:len('abc')、len([1,2,3])、len((1,2,3))
乘方取模:pow(2,3,4) # (2**3) % 4
四舍五入:round(3.1415926, 2) #3.14 四舍五入
类型转换函数:int()、str()、list()、dict()....
6、匿名函数-lambda
lambda x,y:x+y
def func(x,y):
return x+y
7、创建函数
def 函数名(参数列表):
函数体语句
函数的命名规则:一个单词--直接小写,多个单词--每个单词小写,以下划线分隔
enroll
submit_info
verify_password
8、文档化说明
函数首行加 '' 或 ''' '''
函数名.__doc__ 可以查看函数文档 系统内建参数
pass--占位
9、函数的参数 arguments
实参和形参:函数的本质:输入、输出
函数调用 实际参数:传参时,可以指定参数名
def my_function1(name, address, age):
print('姓名:%s\n地址:%s\n年龄:%s' %(name, address, age))
调用:
my_function1('张三', '上地西路', 18)
错误调用(原因:记不清参数顺序)
my_function1('李四', 19, '上地西路')
解决方案:
传参时带着形参名称 “形参=实参”
1
my_function1(name='李四', age=19, address='上地西路')
my_function1(name=name, age=age, address=address)
参数默认值
*定义函数时 可指定参数的默认值
没有默认值时:
def enroll(name, age, address):
print('姓名:%s, 地址:%s, 年龄:%s' % (name, address, age))
调用:
enroll('小明', 6, '北京')
调用时,传参数量与定义时不一致:
enroll('小红') #会报错,给出的参数数量与要求不一致
定义函数时,可以给一些数值相对固定的参数以默认值,赋值给形参
def enroll(name, age=6, address='北京'):
print('姓名:%s, 地址:%s, 年龄:%s' % (name, address, age))
调用时若不给相应形参传值,则自动取用默认值;
若传值,则覆盖默认值
enroll('小红')
enroll('小芳', 8, '上海')
enroll('小刚', address='天津', age=9)
*有默认值时的参数顺序
def enroll(name, address='北京'):
print('姓名:%s, 地址:%s' % (name, address))
*错误举例:
def enroll(address='北京', name):
print('姓名:%s, 地址:%s' % (name, address))
enroll('杨树')
**结论:带默认值的参数往后放,后面不能再有必填参数
def enroll(gender, name, age=6, city='Beijing'):
*参数默认值的数据类型和初始化逻辑
默认值最好是不可变数据类型
如果是可变数据类型,默认为空要用None,别用空对象。
可变参数
传入的参数个数是可变的
*params
在函数内部,参数numbers接收到的是一个tuple或list
在函数调用时,可以一个一个的传,也可以传list或tuple --*params
**params
在函数内部,参数numbers接收到的是一个dict
在函数调用时:
可以一个一个的传 key=value
也可以传dict --**params
**参数定义的顺序必须是:必选参数、默认参数、可变参数
函数的返回值
函数的输出,通过返回值来体现
return 返回值
可以是一个变量,也可以是一个表达式
见到return 函数就结束
不写return无返回--None
只写return 返回None
返回多个值--实际返回的是元组
递归
如果一个函数在内部调用自身,这个函数叫做递归函数
递归调用的次数过多,会导致栈溢出
网友评论