Python基础学习13

70 阅读3分钟

目录:

一.函数注释

二.引用

三.函数嵌套和闭包

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

一.函数注释:


高级注释:可以使用三引号自己写在函数体中,调用函数时将鼠标箭头停留在函数上,就会自动弹出留下的注释。
基本注释:在函数内使用单引号或双引号。但不会自动弹出。需要自己打开函数查看。

例子:

ef book(bookname, number):
    '''
    借书系统
    :param bookname: 书名
    :param number:  借阅数量
    :return: 借阅信息
## '''
    print('成功借阅《{}》{}本'.format(bookname, number))


book('三体', 2)

当把鼠标箭头停留在book('三体', 2), 弹窗内容如下:

C:/Users/Administrator/PycharmProjects/pythonProject/函数/10.函数注释.py def book(bookname: Any,
          number: Any) -> None
借书系统 :param bookname: 书名 :param number: 借阅数量 :return:
形参:   bookname – 书名
        number – 借阅数量

返回值: 借阅信息

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

二.引用:

引用分为在函数外部使用和内部使用:

1.在函数外部使用:

引用关系就将地址进行赋值,不是在函数中使用,可以通过sys.getrefcount可以查看一个地址被引用的次数

例子:

a = [1, 2, 3, 3, 241, 234, 234, 24, ]
b = a  # 将a的引用地址给b去赋值
c = a
import sys

print(sys.getrefcount(a)) # 打印结果----> 4

2.在函数内部使用:

必须要分清楚传递的值是可变类型还是不可变类型。
如果是可变,里面发生改变,外层就能看到改变后的内容
如果是不可变,里面发生改变,不会影响外部得到变量值

例子:

a = 1  # 不可变类型
b = [1, 2, 3, 4, 5]  # 可变类型


def c(d, e):
    d -= 1
    e.append(2)
    print(d)
    print(e)

# 调用
c(a, b)
print(a)
print(b)

调用结果:

0
[1, 2, 3, 4, 5, 2]
1                         
[1, 2, 3, 4, 5, 2]        # 可见函数调用后只会对可变类型照成改变

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

三.函数嵌套和闭包:

1.嵌套函数:


在一个嵌套函数中,如果内层函数想改变外层函数的一个不可变类型变量时,不能用golobal(),只能用nonlocal()

例子:

a = 200

def outer():
    a = 100

    def inner():
        b = 200
        nonlocal a          # 使用关键字nonlocal即可改变外部函数变量
        a += b             # 内部函数不能直接修改外部函数的变量
        print('内部函数', a)


    print(a)
    inner()

# 调用
outer()
print(a)

调用结果:

100
内部函数 300
200

2.闭包:

成为闭包的条件:
1.首先是一个嵌套函数
2.其次内部函数引用了外部函数的变量
3.最后返回值是内部函数

例子:

def outer(n):
    a = 10
    def inner():
        b = a + n
        print('内部函数', b)
    return inner


r = outer(5)   # 在一个闭包中内部函数对于外部函数来说就是个变量,所以可以被当成返回值
print(r)

调用结果:

<function outer.<locals>.inner at 0x000001DDA8C2A560>   # 这里表示的是inner是函数outer的一个变量