python11day
昨日回顾
- 函数的参数:
- 实参角度:位置参数、关键字参数、混合参数
- 形参角度:位置参数、默认参数、仅限关键字参数、万能参数
- 形参角度参数顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs
- *的魔性用法
- 函数定义时:聚合
- 函数调用时:打散
- python中存在的三个空间
- 内置名称空间:存储内置函数:print、input等
- 全局名称空间:py文件、存放的时py文件(除去函数、类内部的)变量,函数名与函数内存地址的关系
- 局部名称空间:存放函数内部的变量与值的对应关键,一个函数开辟一个局部名称空间。
- 三个空间的加载顺序:内置、全局、局部
- 三个空间的取值顺序:就近原则、LEGB
- 局部作用域只能引用全局变量,不能修改
- 作用域:
- 全局作用域
- 局部作用域
- 函数的嵌套
- globals()、locals()
今日内容
面试不能说‘可能’两个字
补坑
#补充的知识点(global,nonlocal)
#坑
#默认参数的陷阱
def func(name,sex='男'):
print(name)
print(sex)
func('henri') #这样不报错
#
#陷阱只针对于默认参数时可变的数据类型
def func1(name,alist=[]):
alist.append(name)
return alist
ret=func1('henri')
print(ret) #['henri']
ret2=func1('tangdaren')
print(ret2) #['henri', 'tangdaren'],这时列表第一次运行的元素没有清空
如果你的默认参数指向的是可变的数据类型,那么你无论调用多少次这个默认参数,在内存中都是同一个
#局部作用域的陷阱
#1.局部改变全局变量
#2.在局部作用域先引用后定义
count=1
def func():
print(count)
count=3 ##先引用后定义会报错
func()
global nonlocal
#global 全局的
#在局部作用域生命一个全局变量。
def func():
global name
name='tangdaren'
print(name)
func()
print(name) #nonlocal 不能操作全局变量
#用于局部作用域:内层函数对外层函数进行修改
def wrapper():
count=1
def inner():
nonlocal count
count += 1
print(count) #1
inner()
print(count) #2
wrapper()
函数名的运用
函数名+()就能执行函数,函数名指向的时函数的内存地址
函数名就是变量
函数名也能作为容器型数据类型的元素
函数名也能作为函数的参数
函数名可以做函数的返回值
新特性:格式化输出
#py3.6x以后才有的格式化输出新特性------前加f或F
name='aa'
age=18
msg=f'我叫{name},今年{age}' #可以加表达式
dic={'name':'henri','age':22}
msg=f'我叫{dic["name"]},今年{dic["age"]}'
print(msg) #还能结合函数写
结构简化、效率高、还可以结合表达式和函数
迭代器
可迭代对象
- 字面意思:
- 对象?:python中一切皆对象。一个实实在在存在的内容。
- 可迭代?:更新迭代。重复的,循环的一个过程,每次都有新的内容
- 可以进行循环更新的一个实实在在的值
- 专业角度:内部含有
‘__iter__’方法的对象,就是可迭代对象 - 目前学过的可迭代对象?str list tuple dict set range 文件句柄等。
- 字面意思:
获取对象的方法并且以字符串的形式表现:dir()
判断一个对象是否是可迭代对象:
#获取一个对象的所有方法:dir()
s1='sdiwqjdijfh'
l1=['a',2,23,4,5,6,7,8,s1]
a=l1
if '__iter__' in dir(a):
print('是可迭代对象')
else:
print('不是可迭代对象')
小结
- 内部含有
‘__iter__’方法的对象,就是可迭代对象 - 可迭代对象优点:
- 存储的数据能直接显示,比较直观。
- 拥有的方法较多,操作方便。
- 可迭代对象缺点:占用内存,不能直接取值,索引(切片)除外。
- for i in list时,for循环内部把可迭代对象转换成了迭代器才能取。
- 内部含有
迭代器
迭代器的定义
字面意思:可更新迭代的工具
专业角度:内部含有
‘__iter__’方法并且含有‘__next__’的对象就是迭代器目前学的:文件句柄
#判断文件句柄是不是迭代器
with open('文件1',encoding='utf-8',mode='w') as f1:
print(('__iter__'in dir(f1))and('__next__'in dir(f1))) #True
迭代器的取值
- next()
可迭代对象如何转化成迭代器
s1='abasdh'
obj=iter(s1) #就转换成了迭代器
#或
obj=s1.__iter__()
#对迭代器取值,一个next取一个值
next(obj)
next(obj)
next(obj)
next(obj)
next(obj)
next(obj)#一个next对应一个值
#多了会报错
while循环模拟for循环机制
#while循环模拟for循环机制
l1=['a',2,23,4,5,6,7,8,10]
# for i in l1:
# print(i)
#1.将可迭代对象转化成迭代器
obj=iter(l1)
#2.取值
while 1:
try:
print(next(obj))
except StopIteration:
break
小结
- 优点:非常节省内存、惰性机制--next取值绝不多取
- 缺点:速度慢,不走回头路(而可迭代对象每次迭代从头开始)
可迭代对象与迭代器的对比
- 可迭代对象是一个操作方法比较多,比较直观,存储数据相对少(几百万个对象,8G内存是可以承受的)的数据集。当侧重于对数据灵活处理,并且内存足够多,可迭代对象好用。
- 迭代器是一个非常节省内存,可以记录取值位置,但是不直观,方法单一的数据集。当数据量过大,大到足以撑爆内存,迭代器好用。
今日总结
- 默认参数的坑、作用域的坑
- global nonlocal
- 格式化输出
- 函数名的运用
- 可迭代对象和迭代器:对比、转换、next()取值……
明日内容
生成器、列表推导式
代码总行数1672+80=1752行
python11day的更多相关文章
随机推荐
- 【LeetCode】1018. Binary Prefix Divisible By 5 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 七、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-聊天消息项的实现
会话好友列表的实现 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展 ...
- TensorFlow.NET机器学习入门【8】采用GPU进行学习
随着网络越来约复杂,训练难度越来越大,有条件的可以采用GPU进行学习.本文介绍如何在GPU环境下使用TensorFlow.NET. TensorFlow.NET使用GPU非常的简单,代码不用做任何修改 ...
- uniapp与webview之间的相互传值
1.uni-app 如何发送数据到 H5? 其实很接单.在 web-view 中只需要通过 URL 就可以向 H5 进行传参 例如在 uni-app 中: <template> <v ...
- 使用 jQuery 选择器获取页面元素后,利用 jQuery 对象的 css() 方法设置其样式。
查看本章节 查看作业目录 需求说明: 使用 jQuery 选择器获取页面元素后,利用 jQuery 对象的 css() 方法设置其样式. 要求如下: 点击页面的"更改样式"按钮后, ...
- Zabbix 代码执行漏洞复现 /zabbix-cve_2017_2824
环境: 利用docker将vulfocus环境pull到本地搭建 漏洞描述: Zabbix 是由Alexei Vladishev 开发的一种网络监视.管理系统,基于 Server-Client 架构. ...
- 疯狂的类构造器Builder模式,链式调用
疯狂的类构造器 最近栈长在做 Code Review 时,发现一段创建对象的方法: Task task = new Task(112, "紧急任务", "处理一下这个任务 ...
- centos6.5-搭建mysql5.7.9
1.msyql5.7.9编译及安装 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.7.9 -DMYSQL_DATADIR=/data/mysql5. ...
- nginx及依赖包安装分享 百度网盘(pcre+openssl+zlib)
链接:https://pan.baidu.com/s/1gggq1p-uZSmAw49o5xfl4g 提取码:ypoj 复制这段内容后打开百度网盘手机App,操作更方便哦 1.安装pcre 解压:ta ...
- CentOS7查询端口占用,清除端口占用的程序,开放端口,打开防火墙
1.根据端口号得到其占用的进程的详细信息 netstat -tlnp|grep 80tcp 0 0 192.168.33.10:80 0.0.0.0:* ...