目录
上节课复习:
# 今日内容:
# 1、函数对象(可以把函数当成变量去用)
# 1、可以赋值
# 2、可以当做函数当做参数传给另外一个函数
# 3、可以当做函数当做另外一个函数的返回值
# 4、可以当做容器类型的一个元素
# 2、函数嵌套
# 1、函数的嵌套调用:在调用一个函数的过程中又调用其他函数
# 2、函数的嵌套定义:在函数内定义其他函数
# 3、闭包函数=名称空间与作用域+函数嵌套+函数对象 核心点:名字的查找关系是以函数定义阶段为准
# 二:什么是闭包函数
# 三:为何要有闭包函数=》闭包函数的应用
上节课复习:
# 1、名称空间namespaces
#
# 名字-》栈区
#
#
# 名称空间是对栈的一种划分,真正存在的是栈区,名称空间只是一种虚拟的划分
#
#
# 内置名称空间(x)
#
# 全局名称空间(x)
#
# 局部名称空间(x)
#
#
#
# 重点1:
# 名词查找:当前所在的位置向外查找
# 局部名称空间-》全局名称空间-》内置名称空间
#
#
# 重点2:
# 名称空间只有优先级之分,本身并无嵌套关系,画图只是为了理解
#
#
# 重点3:
# 名称空间的嵌套关系决定了名字的查找顺序
# 而名称空间的嵌套关系是以函数定义阶段为准的,
# 即函数的嵌套关系与名字的查找顺序是在定义阶段就已经确定好的
#
#
# x=111
# def f1():
# print(x)
# x=222
# f1() #local variable 'x' referenced before assignment
#
#
#
# 全局作用域:内置名称空间+全局名称空间的名字
# 全局存活,全局有效
#
# 局部作用域:
# 临时存活,局部有效
#
#
# nonlocal
#
#
#
# 今日内容:
# 1、函数对象(可以把函数当成变量去用)
# 精髓:可以把函数当成变量去用
# func=内存地址
def func():
print('from func')
# 1、可以赋值
# f=func
# print(f,func)
# f()
# def foo(x): # x = func的内存地址
# # print(x)
# x()
#
# foo(func) # foo(func的内存地址)
# def foo(x): # x=func的内存地址
# return x # return func的内存地址
#
# res=foo(func) # foo(func的内存地址)
# print(res) # res=func的内存地址
#
# res()
# l=[func,]
# # print(l)
# l[0]()
# dic={'k1':func}
# print(dic)
# dic['k1']()
# 函数对象应用示范:
# def login():
# print('登录功能')
#
#
# def transfer():
# print('转账功能')
#
#
# def check_banlance():
# print('查询余额')
#
# def withdraw():
# print('提现')
#
#
# def register():
# print('注册')
#
# func_dic={
# '1':login,
# '2':transfer,
# '3':check_banlance,
# '4':withdraw,
# '5':register
# }
#
# # func_dic['1']()
#
#
# while True:
# print("""
# 0 退出
# 1 登录
# 2 转账
# 3 查询余额
# 4 提现
# 5 注册
# """)
# choice = input('请输入命令编号:').strip()
# if not choice.isdigit():
# print('必须输入编号,傻叉')
# continue
#
# if choice == '0':
# break
#
#
# if choice in func_dic:
# func_dic[choice]()
# else:
# print('输入的指令不存在')
#
# # if choice == '1':
# # login()
# # elif choice == '2':
# # transfer()
# # elif choice == '3':
# # check_banlance()
# # elif choice == '4':
# # withdraw()
# # else:
# # print('输入的指令不存在')
# 修正
def login():
print('登录功能')
def transfer():
print('转账功能')
def check_banlance():
print('查询余额')
def withdraw():
print('提现')
def register():
print('注册')
func_dic = {
'0': ['退出', None],
'1': ['登录', login],
'2': ['转账', transfer],
'3': ['查询余额', check_banlance],
'4': ['提现', withdraw],
'5': ['注册', register]
}
# func_dic['1']()
while True:
for k in func_dic:
print(k, func_dic[k][0])
choice = input('请输入命令编号:').strip()
if not choice.isdigit():
print('必须输入编号,傻叉')
continue
if choice == '0':
break
# choice='1'
if choice in func_dic:
func_dic[choice][1]()
else:
print('输入的指令不存在')
# 2、函数嵌套
# 1、函数的嵌套调用:在调用一个函数的过程中又调用其他函数
# def max2(x,y):
# if x > y:
# return x
# else:
# return y
#
#
# def max4(a,b,c,d):
# # 第一步:比较a,b得到res1
# res1=max2(a,b)
# # 第二步:比较res1,c得到res2
# res2=max2(res1,c)
# # 第三步:比较res2,d得到res3
# res3=max2(res2,d)
# return res3
#
# res=max4(1,2,3,4)
# print(res)
# 2、函数的嵌套定义:在函数内定义其他函数
# def f1():
# def f2():
# pass
# 圆形
# 求圆形的求周长:2*pi*radius
# def circle(radius,action=0):
# from math import pi
#
# def perimiter(radius):
# return 2*pi*radius
#
# # 求圆形的求面积:pi*(radius**2)
# def area(radius):
# return pi*(radius**2)
#
# if action == 0:
# return 2*pi*radius
#
# elif action == 1:
# return area(radius)
#
# value=circle(33,action=1)
# print(value)
#
核心点:名字的查找关系是以函数定义阶段为准
# 一:大前提:
# 闭包函数=名称空间与作用域+函数嵌套+函数对象
# 核心点:名字的查找关系是以函数定义阶段为准
# "闭"函数指的该函数是内嵌函数
# "包"函数指的该函数包含对外层函数作用域名字的引用(不是对全局作用域)
# 闭包函数:名称空间与作用域的应用+函数嵌套
# def f1():
# x = 33333333333333333333
# def f2():
# print(x)
# f2()
#
#
# x=11111
# def bar():
# x=444444
# f1()
#
# def foo():
# x=2222
# bar()
#
# foo()
# 闭包函数:函数对象
# def f1():
# x = 33333333333333333333
# def f2():
# print('函数f2:',x)
# return f2
#
# f=f1()
# # print(f)
#
# # x=4444
# # f()
# def foo():
# x=5555
# f()
#
# foo()
# 三:为何要有闭包函数=》闭包函数的应用
# 两种为函数体传参的方式
# 方式一:直接把函数体需要的参数定义成形参
# def f2(x):
# print(x)
#
# f2(1)
# f2(2)
# f2(3)
# 方式二:
# def f1(x): # x=3
# x=3
# def f2():
# print(x)
# return f2
#
# x=f1(3)
# print(x)
#
# x()
import requests
# 传参的方案一:
# def get(url):
# response=requests.get(url)
# print(len(response.text))
#
# get('https://www.baidu.com')
# get('https://www.cnblogs.com/linhaifeng')
# get('https://zhuanlan.zhihu.com/p/109056932')
# 传参的方案二:
def outter(url):
# url='https://www.baidu.com'
def get():
response=requests.get(url)
print(len(response.text))
return get
baidu=outter('https://www.baidu.com')
baidu()
cnblogs=outter('https://www.cnblogs.com/linhaifeng')
cnblogs()
zhihu=outter('https://zhuanlan.zhihu.com/p/109056932')
zhihu()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)