python day11

一. 上节课内容回顾
动态参数
1. *args 动态接收位置参数
2. **kwargs 动态接收关键字参数
形参:
位置参数
*args
默认值参数
**kwargs
命名空间
1. 内置命名空间-> python内部的一些东西
2. 全局命名空间-> 自己定义的全局变量
3. 局部命名空间-> 函数的内部
作用域:
全局作用域:内置空间+ 全局空间
局部作用域:局部空间
globals() 全局空间中的内容
locals() 局部空间的内容
global和nonlocal
global: 在局部应用全局变量
nonlocal: 外层中离他最近的一个变量(非全局)

二. 今日主要内容
1. 函数名的使用, 第一类对象
1. 函数名可以像变量一样进行赋值操作
2. 函数可以作为容器(list, tuple, dict)的元素, 保存在容器内
3. 函数可以作为返回值返回
4. 函数可以作为参数进行传递

# def a():
# print("我是a")
#
# # a()
# # b = a
# # b()
# print(a) # a是个地址. 这个地址是个函数
# b = a # 函数可以赋值
# b()

# def func1():
# print("我是func1")
#
# def func2():
# print("我是func2")
#
# def func3():
# print("我是func3")
#
# lst = [func1, func2, func3]
# for e in lst:
# e() # e表示的是lst中的每一个函数. 函数()执行函数. e() 执行每一个函数

# def func1():
# def inner():
# print("旭哥. 很帅.")
# a = 10
# return inner
# fn = func1()
#
# fn()

# def func1():
# def func2():
# def func3():
# print("强哥, 你为什么这么优秀")
# return func3
# return func2
#
# fn = func1()
# fnn = fn()
# fnn()

# def func1():
# print("哈哈")
# def func2():
# print("呵呵")
# def func3():
# print("嘻嘻")
# return func3
# return func2
# fn = func1() # 哈哈
# print("============>")
# fn() #

# def func(fn):
# fn()
#
# def func1():
# print("你好")
#
# func(func1)

2. 闭包
目的: 让内存永远的记住一个变量
在内层函数中访问外层函数的局部变量. 叫闭包. 这个时候. 外层的这个局部变量将会常驻内存

# def func():
# a = 10
# def inner():
# print(a)
# return inner
#
# fn = func()
# fn()
# 引入一个模块
from urllib.request import urlopen

def func():
content = urlopen("http://www.xiaohua100.cn/index.html").read()
def inner():
print("abc")
return inner

fn = func()
print(fn.__closure__) # 检查闭包

3. 装饰器(初识)
开闭原则(开放封闭原则): 对添加功能开放. 对修改代码封闭.

语法糖:
@装饰器名字
总结:
def wrapper(fn):
def inner(*args, **kwargs):
'''目标函数之前你要做什么'''
ret = fn(*args, **kwargs)
'''目标函数之后你要做什么'''
return ret
return inner

@wrapper
def target():
pass

# 神话故事
# def create_people():
# print("捏泥人, 吹口气")
#
# # 装饰器的雏形
# def water(fn):
# def inner():
# print("浇水")
# fn() # 目标函数被执行
# return inner
# create_people = water(create_people)
# create_people()
#
# def yue(name, name2, name3, name4, name5):
# print("约一约", name, name2, name3, name4, name5)
#
# def wen_wu(fn):
# def inner(*args, **kwargs): # 聚合
# print("问问wusir")
# ret = fn(*args, **kwargs) # 打散
# print("傻逼, 骗我")
# return ret
# return inner
#
# @wen_wu # dajia = wen_wu(dajia)
# def dajia(name):
# print("我要干你", name)
# return "伤啊"
#
# # dajia = wen_wu(dajia)
# ret = dajia("徐阳")
# print(ret)

def zaoren():
print("捏人")

def water(fn):
def inner():
print("浇水")
fn()
return inner
zaoren = water(zaoren)
zaoren()

猜你喜欢

转载自www.cnblogs.com/zm419914/p/9198334.html