课前回顾
迭代器
迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象
可迭代对象
含有__iter__
方法的数据类型
除了数字类型都是可迭代对象
迭代器对象
含有__iter__,__next__
方法的数据类型
文件才是迭代器对象
可迭代对象加上__iter__
会变成迭代器对象
迭代器对象加上__iter__
方法依然是迭代器对象
for循环原理
lt = [1,2]
lt_iter = lt._iter_()
while True:
try:
print(lt_iter._next_())
except StopIteration:
break
三元表达式
条件成立if条件 else条件不成立
列表推导式
[i fo i in range(10)]
字典生成式
{i:i for i in range(10)}
zip
把多个可迭代对象一次性读取每一个可迭代对象的中的元素,拼成元素
生成器表达式
(i for i in range(10)) # 节省内存 空间-》生成器-》老母鸡
[i for i in range(10)]-》列表--》一筐鸡蛋
生成器
本质是迭代器,是自定迭代器,含有yield关键字的函数
def ge():
yield
yield
- 暂停函数
- 通过next取出一个yield的值
def range(start,stop,step):
while start < stop :
yield start
start += step
for i in range(1,10,2):
print(i)
递归
函数调用本身,有退出条件
count = 0
def a():
global count
print(count)
if count == 100:
return
count += 1
a()
a()
匿名函数
有名函数
我们之前定的函数都是有名函数,它是基于函数名使用。
匿名函数
匿名函数,他没有绑定名字,使用一次即被收回,加括号即可运行。
匿名函数的语法:
lambda 参数 :返回值
f = lambda x, y:x * y
res = f(1,2)
print(res)
内置函数
python解释器内置方法:
掌握:
- bytes
res = bytes('中国',encoding='utf8')
print(res)
b'xe4xbdxa0xe5xa5xbd'
res = '你好'.encode('utf8')
print(res)
b'xe4xbdxa0xe5xa5xbd'
- chr()/ord()
chr()参考ASCII码表将数字转成对应字符;ord()将字符转换成对应的数字。
print(chr(65))
A
print(ord('A'))
65
- divmod() 分栏
print(divmod(10,3)) #取整/取余
(3,1)
- enumerate() 带有索引的迭代
l = ['a','b','c']
for i in enumerate(l):
print(i)
(0,'a')
(1,'b')
(2,'c')
- eval() 把字符串翻译成数据类型,把字符串去掉,留下来的。
lis = '[1,2,3]'
lis_eval = eval(lis)
print(lis_eval)
[1,2,3]
- hash() 是否可哈希 ,可变类型不可 哈希
print(hash(1))
1
了解:
- abs() 求绝对值。
print(abs(-13)) # 求绝对值
13
- all() 可迭代对象内元素全为真,则返回真。
print(all([1,2,3,4]))
print(all([]))
Ture
False
- any() 可迭代对象中有一元素为真,则为真。
print(any([1,2,3,0]))
print(any([]))
True
False
- bin()/oct()/hex() 二进制、八进制、十六进制转换。
print(bin(17))
print(oct(17))
print(hex(17))
0b10001
0o21
0x11
- dir() 列出模块的所有方法
import time
print(dir(time))
- frozenset() 不可变的集合 (不可变化的集合,类似于元组)
s = frozenset({1,2,3})
frozenset({1,2,3})
- globals()/loacals() 查看全局变量/查看当前位置变量
def func():
s = 's1'
print(globals())
print('locals():',locals())
func()
locals():{'s':'s1'}
- pow()
print(pow(3,2,3)) # (3**2)%3
0
- round() 四舍五入
print(round(10.33))
10
- slice
lis = ['a','b','c']
s = slice(1,4,1)
print(lis[s])
['b', 'c']
- sum()
print(sum(range(100)))
4950
__import__
() 通过字符串导入模块
time = __import__('time')
print(time.time())
异常处理
异常处理:报了错,进行处理
异常捕捉只能捕捉逻辑错误,语法错误不行
print(1)
num = input('请输入数字:')
try:
1/int(num) # 报错之后,不运行下面的代码
except ZeroDivisionError:
print('傻逼,不能输入0')
print(2)
except Exception as e: # 万能异常,只要有错误,就捕捉
print(e) # 错误的描述信息
面向过程编程
“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。“面向过程”也可称之为“面向记录”编程思想,他们不支持丰富的“面向对象”特性(比如继承、多态),并且它们不允许混合持久化状态和域逻辑。
就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。