- 参数------ 收集参数 *参数名
def stu(*info):
print(info[0])
print(info[1])
print(len(info))
print(type(info))
stu('shanxi', '200008966', 19)
打印结果
shanxi
200008966
3
<class 'tuple'>
- 返回值
def stu():
return 0, 'shanxi', 50
print(stu())
打印结果
(0, 'shanxi', 50)
可见如果返回多个值,python将其打包成元组
- 全局变量问题,global关键字
当想要在自定义函数中使用全局变量,就必须在变量前加global关键字,如果不加,Python默认在函数内部新建一个同名的局部变量,当修改这个变量的值时,并不会影响全局变量的值
看下面例子
count = 10
def stu():
count = 20
print(count)
stu()
print(count)
运行结果
10
10
如果加上global关键字
先声明
count = 10
def stu():
global count #这里
count = 20
print(count)
stu()
print(count)
运行结果
10
20
- 函数嵌套函数
count = 10
def fun1():
print('fun1正在调用.....')
def fun2():
print('fun2正在调用,,,,,')
fun2()
fun1()
运行结果
fun1正在调用.....
fun2正在调用,,,,,
- 闭包
下面这个我还没搞懂干啥的
def fun1(x):
def fun2(y):
return x * y
return fun2
i = fun1(1)
print(i)
print(type(i))
print(i(5))
print('....................')
print(fun1(1)(5))
运行结果
<function fun1.<locals>.fun2 at 0x000001EBCDAB41F8>
<class 'function'>
5
....................
5
下面是错误例子
def fun1():
x = 5
def fun2():
x *= x
return x
# 因为这里又变成局部变量了,所以会报错
return fun2()
i = fun1()
运行结果
Traceback (most recent call last):
File "E:/python project/test09_14/test.py", line 10, in <module>
i = fun1()
File "E:/python project/test09_14/test.py", line 7, in fun1
return fun2()
File "E:/python project/test09_14/test.py", line 4, in fun2
x *= x
UnboundLocalError: local variable 'x' referenced before assignment
但是如果将x换成列表就不会报错
def fun1():
x = [6, 3, 5]
def fun2():
x[0] *= x[0]
return x[0]
# 因为这里又变成局部变量了,所以会报错
return fun2()
i = fun1()
print(i)
运行结果
9
那接下来就引出了nonlocal
小伙伴觉得为什么非得用列表,我就想用普通变量啊,
那看下面方法
def fun1():
x = 6
def fun2():
nonlocal x
x *= x
return x
# 因为这里又变成局部变量了,所以会报错
return fun2()
i = fun1()
print(i)
运行结果
36