函数
定义
def func():
print("HELLO WORLD")
函数的参数
def func(x): # x是形参 #传参就是将实参的值传递给形参
print(x)
func("abc") #实参
函数的调用
函数调用之后,会立即执行函数体里的代码,当然,函数调用务必在声明函数之后。
- 语法:函数名()
def func():
print("HELLO WORLD")
#函数的调用:函数名()
func()
- 函数调用的顺序 b()—>f()—>a()
def f():
print(1)
a()
def a():
print("666")
def b():
print("abcd")
f()
b()
调用函数时参数的顺序
位置参数、默认参数、可变长度参数,顺序错了会报错
def test(a, b, c=4): # c=4 默认参数
print(a, b)
test(1, 2) # 位置参数
test(b=1, a=2) # 关键字参数
test(b=1,2) # 关键字参数写在位置参数之前会导致出错
可变参数长度参数
*args: 用来接收任意多个实参并放在一个元组里
**kwargs: 用来接收类似于赋值的多个实参并放在一个字典里
- 装包
函数装包:
def 函数(*args): ---->此时会出现装包操作
pass
函数(1,2,3,4)
def ah(*args): # 把(1,2,3,4)都装到(*args)容器里
print(args)
s=0
for i in args:
s+=i
print(s)
ah(1,2,3,4,)
- 拆包
list ,tuple,set调用的时候: 一颗*可拆 列表(*list) | 元组(*tuple) | 集合(*set)
字典dic要用两颗 * (**kwargs)
but=[23,24,45,67,85]
ah(*but) #把but=[23,24,45,67,85]拆包成(23,24,45,67,85)
- **kwargs
关键字参数
在函数调用的时候必须传递关键字参数,才可以将其转换成key : value
装到字典中
def show_book(**kwargs):
print(kwargs)
# {'bookname': '西游记', 'author': '吴承恩', 'number': 5}
show_book(bookname="西游记", author="吴承恩", number=5)
返回值
- 返回一个数据
# 定义函数
def add2num(a, b):
return a + b
# 调用函数,顺便保存函数的返回值
result = add2num(100, 98)
# 因为result已经保存了add2num的返回值,所以接下来就可以使用了
print(result)
- 可以返回多个数据
def divid(a, b):
shang = a // b
yushu = a % b
return shang, yushu
result = divid(5, 2)
print(result) # (2, 1)
- return后面可以是元组,字典,列表等只要是能够储存多个数据的类型,就可以一次性返回多个数据
- 也可单独使用,遇到return后 后面的代码不执行
可变与不可变类型
小结:
不可变类型: 里面的内容未发生改变,地址发生了改变.
类型: int str float bool tuple
可变类型:里面的内容发生了改变,但是地址没有发生改变.
类型: list dict set
全局与局部变量
全局变量: 声明在函数外面的变量
局部变量: 声明在函数内部的变量
函数内部可以直接使用全局变量,但是不能直接修改
如果想修改,则必须使用关键字:global
注意:只有不可变的类型才需要加global,可变的类型不需要添加
#全局变量
a=100
def test1():
#局部变量
a=0
b=8
print("a=",a)
print("b=",b)
def test2():
b=9
#局部变量的作用范围仅限函数内部
print("a=", a)
print("b=", b)
def test3():
global a
#改变全局a的值
a-=10 #a=a-10
print("a=", a)
为什么要用global?因为是int(不可变类型)如果是(可变类型)就不用加global,可以直接用
globals 和 locals
-
以字典的形式返回
-
内置函数 globals()可以查看全局变量 locals()可以查看局部变量
a = 100
def inner(c):
b = a + c
print('locals = {},globals = {}'.format(locals(), globals()))
inner(3)
修改变量 global nonlocal
-
内部函数修改全局变量用global(详细请查看上一讲)
-
内部函数修改外部变量用nonlocal
def outer():
a = 100
def inner():
b = 200
# b+=a #内部函数可以使用外部函数的变量
nonlocal a # 如果要修改外部函数的变量,需要在内部函数中添加nonlocal
a += b # 内部函数不能修改外部函数的变量
print("我是内部函数", b)
print(a)
inner()
outer()
打印:
我是内部函数 200
300
注意:理解
内部函数-------->外部函数--------->全局-------->系统b u i l t i n s
c = 100
def outer():
a = 10
def inner():
b = 200
global c # 如果要修改全局变量,global
c += b
nonlocal a # 如果要修改外部函数的变量,需要在内部函数中添加nonlocal
a += b
print(a, c, b)
inner()
outer()
--->
210 300 200
### 闭包