目录
❤ 定义函数
1. 什么是函数
2. 函数的优点
3. 函数的定义
4. 函数的分类
1. 内置函数
2. 标准库函数
3. 第三方函数
4. 自定义函数
5. 函数的创建方法
1. 无参无返回值函数
2. 有参无返回值函数(重点)
3. 无参有返回值函数
4. 有参有返回值函数(重点)
6. 调用函数
7. return 与 print 的区别
8. 函数的参数
1. 必传参数
2. 默认参数
3. 不确定参数(可变参数)
9. 参数规则
函数就是在大程序中,分离不同的任务,函数是模块化程序设计的基本组成单位,函数定义好后,可以反复使用,避免编写重复的代码。
内置函数就是Python中自带的函数,在程序中可以直接使用
例如: input() print() type() abs()等
标准库函数是Python中自带的标准库函数,通过import导入后使用
例如: random() math() os() datetime()等
Python社区提供的函数,需要下载,通过import导入后使用
例如: pymysql等
根据用户需求,编写自己的函数
通过关键字def来创建函数,def的作用是实现python中函数的创建
def 函数名(形参列表):
函数体
return 返回值
格式说明:
def add():
print('add()...')
def sub(a, b):
c = a + b
print('sub()...', c)
def mul():
x = 500
return x
def div(a, b):
c = a / b
return c
函数名(实参列表)
说明:调用无返回值函数,和参数无关
变量名 = 函数名(实参列表)
说明:调用有返回值函数,和参数无关
规则:哪里调用函数,结果返回哪里
add()
# def add() 无返回值函数
m1 = mul()
print(m1)
# def mul() 有返回值函数
sub(10, 20)
# def sub(a,b) 无返回值函数
d1 = div(100, 200)
print(d1)
# def div(a,b) 有返回值函数
输出:
add()...
500
sub()... 30
0.5
案列:
定义一个函数yuan,调用yuan函数,计算圆的面积
# 定义函数
def yuan(r):
ymj = 3.14 * r * r
return ymj
# 获取键盘输入的数据(R)
r = int(input('请输入圆的半径(R):'))
# 调用函数
ymj = yuan(r)
print('圆的面积是:', ymj)
输出:
请输入圆的半径(R):20
圆的面积是: 1256.0
概念上一个是 返回值 一个是打印输出
return 和 print的区别:
在执行函数的时候return无法打印出值,return返回的结果只能用于给变量赋值。而pirnt则可以直接打印。
return还有一个重要特性:在函数中,凡是遇到return,这个函数就会结束,这里要特别注意。针对无限循环的函数,可以使用return
什么是必传参数?
在定义函数的时候,没有默认值且必须在函数执行的时候传递进去的参数;且顺序与参数顺序相同,这就是必传参数。
# coding:utf-8
def add(a,b):
c=a+b
return c
result=add(1,2)
print(result)
# 输出结果:3
# coding:utf-8
def add(a,b=1):
c=a+b
return c
print(add(1))
# 输出结果:2
print(add(1,3))
# 输出结果:4
def add(*args,**kwargs):
...
add(1,2,3,name='dewei',age=23)
# ↓ ↓
# 对应*args 对应**kwargs
def test_args(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))
test_args(1,2,3,4,5,6,name="zhangsan",age=22,top=175)
输出:
(1, 2, 3, 4, 5, 6)
{'name': 'zhangsan', 'age': 22, 'top': 175}
#参数是变量传递时,需要在变量前面加上*和**来区分传递的是元组还是字典,否则一律按元组*args处理
def test_args(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))
a=('python','java')
b={"name":"zhangsan","age":22,"top":175}
test_args(a,b)
# 输出结果:
# (('python', 'java'), {'name': 'zhangsan', 'age': 22, 'top': 175})
# {}
test_args(*a,**b)
# 输出结果:
# ('python', 'java')
# {'name': 'zhangsan', 'age': 22, 'top': 175}
def add(a, b=1, *args, **kwargs)
参数的定义从左到右依次是 a - 必传参数
、b - 默认参数
、可变的 *args 参数
、可变的 **kwargs 参数
函数的参数传递非常有灵活性
必传参数与默认参数的传参也非常具有多样化
传递的参数与函数定义时的参数顺序不一致时,使用赋值语句的方式传参
def test(a,b=1,*args):
print(a,b,args)
s=(1,2)
test(1,2,*s) #1 2 (1, 2)
# test(a=1,b=2,*s)
'''
Traceback (most recent call last):
File "D:/WorkSpace/Python_Study/test01.py", line 8, in
test(a=1,b=2,*s)
TypeError: test() got multiple values for argument 'a'
'''
# 报错原因:当我们必选参数、默认参数与可选的元组类型参数在一起的时候,如果需要采取赋值的形式传参,则在定义函数的时候需要将可变的元组参数放在第一位,之后是必传、默认参数;这是一个特例!!!
def test2(*args,a,b=1):
print(a,b,args)
test2(a=1,b=2,*s) #1 2 (1, 2)
def test(a,b=1,**kwargs):
print(a,b,kwargs)
test(1,2,name="zhangsan") # 1 2 {'name': 'zhangsan'}
test(a=1,b=2,name="zhangsan") # 1 2 {'name': 'zhangsan'}
test(name="zhangsan",age=33,b=2,a=1) # 1 2 {'name': 'zhangsan', 'age': 33}