文章目录
一、函数的定义和调用
# 定义函数,使用def关键字
def fun():
print("a")
print("b")
print("c")
# 调用函数
# a
# b
# c
fun()
二、函数的文档说明(注释)
# 函数文档说明
# 查看函数的文档注释
def fun():
'''
这个函数打印输出Hello World!
'''
print("Hello World!")
# Hello World!
fun()
# fun()
# 这个函数打印输出Hello World!
help(fun)
三、带参函数
# 带参函数
def add(a,b):
print(a + b)
a = 10
b = 20
# 30
add(a,b)
四、全局变量
# 局部和全局变量
# 定义全局变量
globeNum = 10
def fun():
# 在函数中可以使用全局变量
print(globeNum)
# 修改全局变量需使用global关键字,不能直接修改
def modify():
global globeNum
globeNum = 600
# 10
fun()
modify()
# 600
fun()
五、函数返回值
# 函数的返回值
def add(a,b):
return a + b
result = add(10,30)
# 40
print(result)
也可以直接写return(return后不跟值),返回None
函数也可以不写return,默认返回None
函数返回多个值
# 函数返回多个值
def func(a,b):
c = a + b
d = a - b
# 以列表的的形式返回多个值
return [c,d]
def func1(a,b):
c = a + b
d = a - b
# 默认以元组的方式返回
return c,d
result = func(20,30)
# 50
print(result[0])
# -10
print(result[1])
result1 = func1(40,10)
# 50
print(result1[0])
# 30
print(result1[1])
六、函数嵌套使用
# 函数嵌套调用
def fun1():
print("fun1")
fun2()
def fun2():
print("fun2")
# fun1
# fun2
fun1()
七、函数传参的方式
# 函数传参的两种形式
def fun(a,b,c):
print("a =",a)
print("b =",b)
print("c =",c)
# 位置传参
# a = 1
# b = 2
# c = 3
fun(1,2,3)
# 关键字传参
# 直接指定实参传给哪个形参,注意关键字必须是形参的函数名
# a = 10
# b = 0
# c = 99
fun(b = 0,a = 10,c = 99)
# 混合传参,先按位置传参,再按关键字传参
# a = 10
# b = 111
# c = 99
fun(10,b = 111,c = 99)
# fun(a = 10,111,88) 代码报错
# fun(10,a = 10,b = 30) 代码报错,定义了重复的a
八、缺省参数
# 缺省参数
# 缺省参数要放在后面
# def fun(a-20,b) 代码报错
def fun(a,b=10):
print("a =",a)
print("b =",b)
# a = 111
# b = 10
fun(111)
# a = 11
# b = 20
fun(11,20)
九、不定长参数
# 函数中的不定长参数
# 形参前加一个*,该形参为不定长元组,可接收所有的位置实参,类型是元组
# 形参前加两个*,该形参为不定长字典,可接收所有的关键字实参,类型是字典
def func(*args,**kwargs):
print(args)
print(kwargs)
# (1, 2, 3, 4, 5)
# {}
func(1,2,3,4,5)
# ()
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}
func(a=1,b=2,c=3,d=4)
# (1, 2, 3)
# {'a': 4, 'b': 5, 'c': 6}
func(1,2,3,a=4,b=5,c=6)
# 求和函数
def sum(*args,**kwargs):
num = 0
for i in args:
num+=i
for j in kwargs.values():
num+=j
return num
# 21
print(sum(1,2,3,a=4,b=5,c=6))
十、函数形参的完整格式
# 函数形参的完整格式(参数的顺序)
# 四种参数:普通参数,缺省参数,不定长元组参数,不定长字典参数
# 普通参数在前,缺省参数在后
def fun1(a,b=99):
pass
# 普通参数,不定长元组,缺省参数
def fun2(a,*args,b=2):
pass
# 普通参数,不定长元组,缺省参数,不定长字典参数
def fun3(a,*args,b=2,**kwargs):
pass
十一、拆包与组包
# 组包,将多个数据值赋给一个变量,这个变量为元组类型
a = 1,2,3
# (1, 2, 3)
print(a)
# 拆包:将容器中的数据赋给多个变量。注意:变量的个数与容器中元素的个数要相同
b,c,d = a
# 1 2 3
print(b,c,d)
a,b = [10,20]
# 10 20
print(a,b)
dict1 = {"name":"lisi","a":"b"}
# 这里得到的是key值
a,b = dict1
# name a
print(a,b)
十二、引用
# 引用
# 可以使用id()查看变量的引用,可以将id的值认为时内存地址的别名
# 将数据10的值保存到变量a中,本质是将数据10所在的内存的引用地址保存到变量a中
a = 10
# 将变量a中保存的引用地址赋给b
b = a
# 2182075345488 2182075345488
print(id(a),id(b))
a = 20
# 2182075345808 2182075345488
print(id(a),id(b))
# 将列表的引用地址保存到list1中
list1 = [1,2,3]
# 将list1存储的引用地址保存到list2中
list2 = list1
# 2075035429696 2075035429696
print(id(list1),id(list2))
list1.append(4)
# [1, 2, 3, 4]
print(list1)
# [1, 2, 3, 4]
print(list2)
函数传参使用引用
# 函数传参传递引用
list = [1,2,3]
def fun(a):
a.append(4)
def fun1():
# 这里由于不算修改list中存放的引用值,所以不需要加global
list.append(5)
fun(list)
# [1, 2, 3, 4]
print(list)
fun1()
# [1, 2, 3, 4, 5]
print(list)