目录:
一.函数注释
二.引用
三.函数嵌套和闭包
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一.函数注释:
高级注释:可以使用三引号自己写在函数体中,调用函数时将鼠标箭头停留在函数上,就会自动弹出留下的注释。
基本注释:在函数内使用单引号或双引号。但不会自动弹出。需要自己打开函数查看。
例子:
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的一个变量