1、函数的调用与嵌套
''函数的调用'''
def func3():
pass
def func4():
func3()
'''函数可以嵌套函数'''
def func1():
b=20
def func2():
# 不能直接调用func2(),因为func2()相当于局部变量
pass
ps:
1、如果想要调用函数内部嵌套的函数,只需要给函数内部加一个返回值,返回的是嵌套的函数举例如下:
2、代理模式:函数可以作为参数进行相互传递!!!!
3、函数名称可以当成变量一样进行赋值操作
综上所述:
1)函数可以作为返回值进行返回
2)函数可以作为参数进行互相传递
函数名实际上就是一个变量名,都表示一个内存地址
3)函数名称可以当成变量一样进行赋值操作
2、global和nonlocal
global 用法:在局部,引入全局变量
1、未引入全局变量之前
2、把外面的全局变量引入到局部变量中
nonlocal用法:在局部,引入外层的全局变量
3、闭包
内层函数对外层函数的局部变量的使用,此时内层函数被称为闭包函数
1)可以让一个变量常驻于内存
2)可以避免全局变量被修改
4、装饰器
装饰器本质上是一个闭包,作用是:
在不改变原有函数调用的情况下,给函数增加新的功能
一般用在用户登录的地方、日志
雏形:
def wrapper():
def inner(fn):
# 在目标函数执行之前
fn() # 执行目标函数
# 在目标函数执行之后
return inner
方法一:
def guanjia(game):
def inner():
print("打开外挂!!")
game()
print("关闭外挂!!")
return inner
def play_dnf():
print("你好呀,我叫赛利亚,今天又是美好的一天!")
def play_lol():
print("德玛西亚!!!!")
'''让管家把游戏重新封装一遍,我这边把原来的游戏替换了'''
play_dnf=guanjia(play_dnf)
play_dnf() # 此时运行的是管家给的内层函数inner()
play_lol=guanjia(play_lol)
play_lol()
方法二:
def guanjia(game):
def inner():
print("打开外挂!!")
game()
print("关闭外挂!!")
return inner
@guanjia # 相当于play_dnf=guanjia(play_dnf)
def play_dnf():
print("你好呀,我叫赛利亚,今天又是美好的一天!")
@guanjia # 相当于play_lol=guanjia(play_lol)
def play_lol():
print("德玛西亚!!!!")
play_dnf()
play_lol()
两种方法输出结果:
5、python中二维数组转变为一维数组
已知a = [[4, 0, 1], [9, 2, 7], [8, 12, 90]]
- 列表推导式
[i for j in a for i in j]- itertools
from itertools import chain
list(chain.from_iterable(a))- sum小技巧
sum(a, [])- operator
import operator
from functools import reduce
print(reduce(operator.add, a))
6、list 二维数组的排序注意
已知a = [[4, 0, 1], [9, 2, 7], [8, 12, 90]]
错误写法:
a=a.list()
这样return a返回的是null
正确写法
a.list()
这样return a返回的是正确结果
7、list二维数组添加元素
list.append([i,j])
8、python安装requests 报错ERROR: Could not find a version that satisfies the requirement XXX解决方法
pip install 库包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com