def fn():
print(\"我叫fn\")
fn()
print(fn)## <function fn at 0x0000000001D12E18>
fn()
gn = fn #函数名可以进行赋值
print(gn)# <function fn at 0x0000000001D12E18>
gn()
fn = 666
print(fn) #666
def func1()
print(\"朱祁镇\")
def func2()
print(\"徐杰\")
def func3():
print(\"王阳明\")
def func4():
print(\"魏忠贤\")
lst = [func1,func2,func3,func4]#函数+() 就是调用
print(lst)
lst[0]()
for el in lst: #el是列表中的每一项
el() #拿到的是函数. 执行函数
def wrapper():
def inner():
print(\"哈哈哈\")
return inner#函数名可以像返回值一样返回
ret = wrapper() #接收的是inner函数
ret() #调用函数inner 在函数外面访问了函数内部的函数
函数可以作为参数进行传递
def func1():
print(\"谢晋\")
def func2():
print(\'杨士奇\')
def func3():
print(\'徐渭\')
def func4():
print(\"柳如是\")
#代理.装饰器的雏形
de proxy(a)
print(\"我是代理\")
a()
print(\"代理执行完毕\")
proxy(func1)
proxy(func2) #将函数当做参数进行传参
闭包
闭包的优点
1.可以保持变量不被其他人侵害
2.保持一个常量常驻与内存
def wrapper():
a = \"哈哈\" #如果把a放到全局作用域是不安全的一种写法,因为好多内容用着同一个变量,则把它放到一个局部作用域中
name = \"周杰伦\"
def inner
print(name)#在内层函数中使用了外层的函数的局部变量
print(a)
return inner #返回函数名
ret = wrapper() #ret是inner函数
ret() #调用函数
def wrapper():
name = \"周杰伦\" #局部变量常驻与内存
def inner():
print(name) #在内层函数中使用外层函数的局部变量
return inner #返回函数名
#inner()
ret = wrapper() #ret是一个内层函数
ret() #ret是inner,执行的时机是不确定的,必须保证里边的name是存在的
#超级简单的爬虫
from urllib.request import urlopen #导入一个模块
def func():
#获取到网页中的内容,当网速很慢的时候.反复的打开这个网站 很慢
content = urloppen(\"https://www.dytt8.net/\").read()
def inner():
return content.decode(\"gbk\") #网页内容
return inner
print(\"开始网络请求\")
ret = func() #网络请求已经关闭
print(\"网络请求完毕\")
print(\"第一次\",ret())
print(\"第二次\",ret()) #加载到内存 不用每次都进行网络请求 直接进行内存的调用 但是变量多的话 内存可能撑不下
def wrapper():
name = \"alex\"
def inner():
print(\"name\")
print(inner.__closure__) #查看是否闭包.有内容就是闭包,没有内容就不是闭包
inner()
wrappe()
迭代
s = \"今天下午考试,你们还要睡觉吗 \"
for c in s: #字符串是一个可迭代对象
print (c)
for i in 123: # \'int\' is not iterable整型是不可以迭代的
print(i)
dir(对象) #可以帮我们查看xxx数据能够执行的操作
print(dir(str)) #__iter__
字符串 列表 字典 元组 集合 是可以迭代的
int 和 bool 是不可以迭代的
共性:所有带有__iter__的东西可以进行for循环,带有__iter__的东西就是可以迭代的
lst = [\"贾樟柯\", \"李安\", \"杨德昌\", \"王家卫\"]
it = lst.__iter__() #拿到的是迭代器
print(it.__next__()) #下一个
print(it.__next__()) #下一个
print(it.__next__()) #下一个
print(it.__next__()) #下一个
print(it.__next__()) #下一个 会报错 stopinteration 停止迭代
##想回去只能重新获得迭代器
1.只能项下执行,不能反复
2.结束的时候会扔给我们一个错误 stopiteration
3.整合所有的数据类型进行遍历 (int,bool除外)
用while循环来模拟for循环
it = list.__iter__()
while 1:
try:
el = it.__next__: #拿数据
print(el)
except stopiteration: #出现错误说明数据拿完了
break #退出循环
官方通过代码判断是否是迭代器
借助于两个模块 Iteration 迭代器,iterable 可迭代的
from collections import iterable,iterator
lst = [1,2,3]
print(lst.__next__())
print(isinstance(lst, Iterable)) # xxx是否是xxx类型的. True
print(isinstance(lst, Iterator)) # False
迭代器一定是可迭代的,可迭代的东西不一定是迭代器
isinstens(参数,iterable) 判断xxx是不是某某类型
继续阅读与本文标签相同的文章
上一篇 :
python并发_线程
-
DBengine 排名第一,云数据库 InfluxDB 版正式商业化!
2026-05-19栏目: 教程
-
阿里有个超神秘的组织,CEO们来了都要翻牌 | 开发者必读(056期)
2026-05-19栏目: 教程
-
云原生计算重塑企业IT架构 - 分布式应用架构
2026-05-19栏目: 教程
-
阿里云创新大会再出发,一些变化即将发生
2026-05-19栏目: 教程
-
阿里云的包年包月、按量付费、抢占式实例计费方式是什么,如何选择
2026-05-19栏目: 教程
