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' object 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 第一类对象 闭包 迭代器
########################总结########################### 1. 函数名 -> 第一类对象 函数名就是变量名. 函数可以赋值 函数可以作为集合类的 ...
- python第一类对象,闭包,迭代器
一.第一类对象 第一类对象 -> 函数名 -> 变量名 1.特征: 函数对象可以像变量一样进行赋值 还可以作为列表的元素进行使用 还可以作为返回值返回 还可 ...
- python 函数名的应用(第一类对象),闭包,迭代器
1.函数名的应用(第一类对象) 函数名的命名规范和变量是一样的 函数名其实就是变量名 可以作为列表中的元素进行储存. def func1(): pass def func2(): pass lst = ...
- 巨蟒python全栈开发-第11天 第一类对象 闭包 迭代器
一.今日主要内容总览(重点) 1.第一类对象->函数名=>变量名 (1)函数对象可以像变量一样进行赋值 (2)还可以作为列表的元素进行使用 (3)还可以作为返回值返回 (4)还可以作为参数 ...
- Python_Mix*函数名的使用以及第一类对象,闭包,迭代器,for循环的内部机制
一:函数名的应用(第一类对象) 函数名的命名规范和变量是一样的,函数名其实就是变量名, 0)函数名可以赋值给其他变量 def func(): #定义一个名为func的函数 print('my ange ...
- day11 第一类对象 闭包 迭代器
今日主要内容: 1 . 第一类对象 -->函数名--> 变量名 2. 闭包 -->函数的嵌套 3. 迭代器 --> 固定的思想 for 循环 第一类对象 : 函数对象介意向变 ...
- python之函数名,闭包、迭代器
一.函数名的运用(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1,函数名的内存地址: def func(): print("呵呵") pr ...
- 函数的第一类对象,f格式化,迭代器以及递归
函数名的第一类对象及使用,f格式化以及迭代器 1.函数的第一类对象 第一类对象 --特殊点 1.可以当作值被赋值给变量 def func(): print(1) a = func a() 2.可以当作 ...
- python --- 11 第一类对象 函数名 闭包 迭代器
一 .函数名的运用 ①函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 ②函数名是一个内存地址 ③ 函数名可以赋值给其他变量 ④函数名可以当做容器类 ...
随机推荐
- layui中从内置的分页中获取总记录数(转)
封装的工具类: https://blog.csdn.net/QYHuiiQ/article/details/82147537
- 【VBA】学习中出现的错误
1.自定义函数 自定义函数尽量不要使用,容易导致excel卡,让你怀疑人生!!!
- 阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
创建数据库ssm并创建表account create database ssm; use ssm; create table account( id int primary key auto_incr ...
- CentOS的SVN服务器搭建与自动部署全过程
CentOS的SVN服务器搭建与自动部署全过程 http://www.jb51.net/article/106218.htm authz-db = authz 引起的 svn 认证失败 http:// ...
- body和document的梗
http://bbs.zhinengshe.com/thread-1199-1-1.html 1. 在空白的页面加点击事件,是加在body上么 ? <!DOCTYPE html> < ...
- ES5与ES6常用语法教程之 ③模板字符串、判断字符串是否包含其它字符串
这部分教程我们主要讲解以下几个常用语法 模板字符串 带标签的模板字符串 判断字符串中是否包含其他字符串 给函数设置默认值 模板字符串 老式的拼接字符串方法 let dessert = '
- python-Web-django-ajax分页
views: from django.shortcuts import HttpResponse,redirect,render from app01.models import * import j ...
- PHP-T
TP5目录结构 ├─application 应用目录 ├─extend 扩展类库目录(可定义) ├─public 网站对外访问目录 ├─runtime 运行时目录(可定义) ├─vendor 第三方类 ...
- 【神经网络与深度学习】gflags介绍
gflags是什么: gflags是google的一个开源的处理命令行参数的库,使用c++开发,具备python接口,可以替代getopt. gflags使用起来比getopt方便,但是不支持参数的简 ...
- 简单的利用nginx部署前端项目
网上有很多教程写的一大堆东西,新手可能会有点看不懂,现在我写这篇文章是为了更好的帮助新手,如何将自己的前端项目部署到自己的服务器上. 首先我们必须要有一台自己的ubuntu服务器,如果没有可以去阿里云 ...