python之函数,闭包

  1. 参数------ 收集参数 *参数名
def stu(*info):
    print(info[0])
    print(info[1])
    print(len(info))
    print(type(info))


stu('shanxi', '200008966', 19)

打印结果

shanxi
200008966
3
<class 'tuple'>
  1. 返回值
def stu():
    return 0, 'shanxi', 50


print(stu())

打印结果

(0, 'shanxi', 50)

可见如果返回多个值,python将其打包成元组

  1. 全局变量问题,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
  1. 函数嵌套函数
count = 10


def fun1():
    print('fun1正在调用.....')

    def fun2():
        print('fun2正在调用,,,,,')

    fun2()


fun1()

运行结果

fun1正在调用.....
fun2正在调用,,,,,
  1. 闭包
    下面这个我还没搞懂干啥的
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云风Com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值