目录
一、python函数
1、函数介绍
函数:是组织好的、可重复使用的、用来实现特定功能的代码段
java
name = "这是字符串"
length = len(name)
print(length)
能直接调用len方法,则len()是python内置的函数
2、函数的定义
a、基本语法
java
def 函数名(传入参数):
函数的内容
return 返回值
b、案例
定义简单的函数并调用
java
#定义函数
def output_content():
print("hello")
#调用函数
output_content()
如果不调用函数,函数的内容不会执行,只有调用后才会执行
要先定义函数,后调用函数。没有定义函数前无法调用
3、函数的参数
a、基本介绍
功能:在函数进行计算的时候,接收外部提供的数据
多个参数之间用逗号分隔开
java
def 函数名(参数1,参数2,参数3):
函数的内容
return 返回值
b、案例
创建一个函数,传入两个数字,打印两个数字的和
java
def get_sum_num(x , y):
print(f"和为{x + y}")
get_sum_num(1,2)
函数定义中,提供的x,y称为形式参数(形参),表示函数要两个参数
函数调用中,提供的1,2称为实际参数(实参),表示函数执行时使用的参数
4、函数的返回值
a、基本介绍
函数在完成事情之后,最后要返回给调用者的结果
java
def 函数名(参数):
函数的内容
return 返回值
变量 = 函数名(参数)
b、案例
定义一个函数,将2数相加的内容返回给调用者并打印
java
def get_sum_num(x,y):
return x + y
result = get_sum_num(1,2)
print(f"结果为:{result}")
c、补充
思考:如果定义的函数没有使用return语句返回数据,那么函数有返回值吗?
- 实际上是有的,这时会返回特殊的字面量None,类型为<class 'NoneType'>
- None表示的是空的,无实际意义的意思,函数返回None,也就表示没有返回有意义的内容,也就是返回了空的意思
- 在if判断中,None等同于False,可以联合if判断函数是否有返回内容
- 在定义变量时,暂时不需要变量有具体值时,可以用None代替。如name = None
5、函数说明文档
a、基本语法
函数是纯代码语言,想要理解含义就需要一行行的阅读代码
我们可以给函数添加说明文档,辅助理解函数的作用
java
def func(x,y):
"""
func函数可以接收2个参数,并返回两个参数的相加值
:param x: 参数1
:param y: 参数2
:return: 返回的两个值的和
"""
return x + y
result = func(1,2)
在pycharm中,当鼠标悬停到函数调用的传参时,会出现说明文档
6、函数的嵌套调用
a、基本语法
在一个函数中调用另一个函数,就是函数的嵌套调用
b、案例
在函数a中调用b输出内容
java
def fun_b():
print("b")
def fun_a():
print("a")
fun_b()
fun_a()
7、变量的作用域
- 局部变量
定义:定义在函数体内部的变量,即只在函数体内部生效
作用:在函数体内部临时保存数据,当函数完成后,则销毁局部变量
java
def func():
num = 100
print(num)
# 这个num就是局部变量
- 全局变量
定义:在函数体内、体外都能生效的变量
java
num = 100
def func_a():
print(num)
def func_b():
print(num)
# 这个nun就是全局变量
- 思考:看如下代码,试想,最后会输出多少呢?
java
num = 100
def func_a():
num = 200
func_a()
print(num)
最后是会输出100,因为func_a方法中的num是一个局部变量,只会影响函数内部的值
- 思考:如果我们想在函数内部作用全局变量呢?
可以使用global关键字,定义全局变量
java
num = 100
def func_a():
global num
num = 500
func_a()
print(num) 这时就会输出500
8、综合案例
案例要求:开发一个存款取款的函数,定义4个函数,共有4个功能,分别为查询余额1、存款2、取款3、退出4,用户分别输入对应的数字则进入对应的功能,用户未输入4前程序要永久运行
java
bol = True
name = ""
total_num = 5000000
# 存款函数
def add_money():
global total_num
put_num = int(input("请输入存款金额:"))
total_num += put_num
print(f"{name}您好,您的余额为:{total_num}元")
# 取款函数
def get_money():
global total_num
put_num = int(input("请输入取款金额:"))
total_num -= put_num
print(f"{name}您好,您的余额为:{total_num}元")
# 查询余额函数
def check_money():
print(f"{name}您好,您的余额为:{total_num}元")
#主函数
def main():
global bol
global name
name = input("请输入您的姓名:")
while bol:
print(f"{name}你好,请选择操作\n查询余额\t[输入1]\n存款\t[输入2]\n取款\t[输入3]\n退出\t[输入4]")
num = input("请输入您的选择:")
if num == "1":
check_money()
elif num == "2":
add_money()
elif num == "3":
get_money()
else:
bol = False
main()
9、函数与方法的区别
函数的定义方式:
java
def add(x,y):
return x + y
方法的定义方式:
java
class Student
def add(x,y):
return x + y
函数和方法功能一样,有传入参数,也有返回值,只是使用时不同。
使用函数时:
java
num = add(1,2)
使用方法时:
java
student = Student()
num = student.add(1,2)
二、python函数进阶
1、函数多返回值
多个返回值用逗号分隔开
java
def fun1():
return 1,'hello',True
x,y,z = fun1()
print(x) 结果为1
print(y) 结果为hello
print(z) 结果为True
2、函数多种传参方式
a、位置参数
传参的位置固定,自动匹配参数值
java
def fun1(name,age,sex):
print(f"姓名:{name},年龄:{age},性别:{sex}")
fun1("张三",18,"男")
结果为:姓名:张三,年龄:18,性别:男
b、关键字参数
调用函数时通过键值对的形式传参
java
def fun1(name,age,sex):
print(f"姓名:{name},年龄:{age},性别:{sex}")
fun1(age=18,sex="男",name="张三")
结果为:姓名:张三,年龄:18,性别:男
c、缺省参数
- 缺省参数也叫默认参数,定义函数如没有传入值,则提供参数的默认值
- 有默认值的参数需要写到无默认值参数的后面
java
def fun1(name='李四',age=18,sex='女'):
print(f"姓名:{name},年龄:{age},性别:{sex}")
fun1(sex="男",name="张三")
结果为:姓名:张三,年龄:18,性别:男
d、不定长参数
- 不定长参数也叫可变参数,用于不确定调用时需要传递参数的个数
- 分为位置传递不定长参数和关键字传递不定长参数
java
# 位置传递不定长参数
def fun1(*args):
print(args) 此时的数据类型为元组
fun1('张三',18,'男')
结果为:('张三', 18, '男') 需要以直接传入的方式传参
# 关键字传递不定长参数
def fun1(**kwargs):
print(kwargs) 此时的数据类型为字典
fun1(name='张三',age=18,sex='男') 需要用key-value的形式传参
结果为:{'name': '张三', 'age': 18, 'sex': '男'}
3、匿名函数
a、函数作为参数传递
函数本身也能作为参数传入另一个函数种
java
def fun1(fun2):
result1 = fun2 在一个函数种调用参数传入的另一个函数
print(result1)
def fun2(x , y):
return x + y
fun1(fun2(1,2)) 调用时传入函数名和函参数
b、lambda匿名函数
-
特点:
- lambda可以定义匿名函数,就是无名称的函数
- 有名称的函数可以重复使用,匿名函数只能使用一次
- lambda定义的匿名函数函数体只能写一行,无法写多行
-
基本语法:lambda 入参: 函数体(一行代码)
java
def fun1(fun2):
result1 = fun2(1,2)
print(result1)
fun1(lambda x,y:x+y) 参数为x和y,函数体为x+y
结果为:3