python_函数进阶(5)
第1章 函数有用信息
1.1 login.__doc__
1.2 login.__name__
第2章 装饰器的进阶
2.1 带参数的装饰器
2.2 多个装饰器装饰一个函数
2.3 开放封闭原则
第3章 可迭代对象
3.1 判断对象方法dir()
3.2 通俗测试方法:
3.3 方法1:'__iter__' in dir(list)
3.4 方法2:isinstance
第4章 迭代器
4.1 定义
4.2 迭代器转换
4.2.1 判断方法1
4.2.2 判断方法2:
4.3 转换成迭代器的优势
4.4 模拟for循环
第5章 生成器
5.1 生成器对象
5.2 以函数的方式来构建生成器
第6章 生成器表达式
6.1 生成表达式特性
6.2 遍历模式
6.2.1 列表推导式简单用法
6.2.2 列表推导式应用
6.3 筛选模式
6.4 生成器取值:
6.5 列表表达式转换生成器表达式
6.5.1 区别:
6.6 练习题
6.7 作业题
第7章 内置函数
7.1 作用域相关
7.1.1 locals***
7.1.2 globals***
7.2 其它相关
7.2.1 eval***
7.2.2 exec***
7.2.3 compile
7.2.4 print
7.2.5 hash
7.2.6 callable**
7.3 数据类型相关
7.3.1 int
7.3.2 complex
7.4 数学运算
7.4.1 divmod
7.4.2 sum****
7.4.3 min****
7.5 数据结构相关
7.5.1 reversed
7.5.2 encode
7.5.3 repr
7.5.4 sorted****
7.5.5 enumerate****
7.5.6 any**
7.5.7 zip****
7.5.8 map****
7.5.9 filter
第8章 匿名函数
8.1 练习
第9章 拾遗
9.1 except StopIteration
第1章 函数有用信息
1.1 login.__doc__
解释:得到有用信息
1.2 login.__name__
解释:得到函数名
原函数:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def login(username,password):
'''
次函数是完成登录功能的函数,需要两个参数用户名和密码,返回True登录成功
:return: True
'''
print(666)
return True
# login('w',123)
print(login.__doc__) #得到有用信息
print(login.__name__)#得到函数名
输出
C:\python3\python.exe D:/python/untitled2/python_5/lession.py
次函数是完成登录功能的函数,需要两个参数用户名和密码,返回True登录成功
:return: True
例:要求加上装饰器返回值也正常:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from functools import wraps
def logger(f):
@wraps(f)
def inner(*args,**kwargs):
ret = f(*args,**kwargs)
return ret
return inner
@logger
def login(username,password):
'''
次函数是完成登录功能的函数,需要两个参数用户名和密码,返回True登录成功
:return: True
'''
print(666)
return True
输出
print(login.__doc__) #得到有用信息
print(login.__name__)#得到函数名
C:\python3\python.exe D:/python/untitled2/python_5/lession.py
次函数是完成登录功能的函数,需要两个参数用户名和密码,返回True登录成功
:return: True
login
第2章 装饰器的进阶
2.1 带参数的装饰器
解决批量加糖的方法:
1.将@与函数分开@ timerout(flag),将flag传进去,返回了timer
2.将@与timer结合
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
def timmerout(flag1):
def timer(f):
def inner(*args,**kwargs):
if flag1:
start_time = time.time()
ret = f(*args,**kwargs)
end_time = time.time()
print('此函数的执行效率%s' % (end_time - start_time))
return ret
else:
ret = f(*args,**kwargs)
return ret
return inner
return timer
flag = True
@timmerout(flag)#1.将@与函数分开@ timmerout(flag) 返回了 timer 2.将@timer结合
def func1():
time.sleep(0.3)
print('非常复杂....')
return 666
@timmerout(flag)
def func2():
time.sleep(0.2)
print('非常复杂....')
return 777
@timmerout(flag)
def func3():
time.sleep(0.1)
print('非常复杂.....')
return 999
func1()
func3()
func2()
输出:
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
非常复杂....
此函数的执行效率0.3000171184539795
非常复杂.....
此函数的执行效率0.1000056266784668
非常复杂....
此函数的执行效率0.2000114917755127
2.2 多个装饰器装饰一个函数
def wrapper1(func):
def inner1():
print('wrapper1,before func')
func()
print('wrapper1,after func')
return inner1()
def wrapper2(func):
def inner2():
print('wrapper2,before func')
func()
print('wrapper2,after func')
return inner2()
@wrapper2 # f = warpper2(f) 里面的f 是inner1 外面的f 是inner2。
@wrapper1 # f = warpper(f) 里面的f函数名 外面的f是inner1.
def f():
print('in f')
f() #inner(2)
输出
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
wrapper2,before func
wrapper1,before func
in f
wrapper1,after func
wrapper2,after func
逻辑梳理:函数就近原则先读,语法糖wrapper1è再读wrapper2,并存入缓存,没有输出,此时当f参数传入时,wrapper1中的 f = inner1,没有输出è继续执行wrapper2 print(wrapper2,before func);è执行f() = inner1()è输出wrapper1,before func è继续输出èf() = in f è继续输出:wrapper1,after funcè执行inner2输出èwrapper2,after func
2.3 开放封闭原则
l 对扩展开放
对于装饰器本身的扩展内容是可添加和更改的
l 对修改是封闭的
对所装饰的对象是不能进行修改的
第3章 可迭代对象
3.1 判断对象方法dir()
定义:该对象中含有__iter__方法就是可迭代对象,遵循可迭代协议。
3.2 通俗测试方法:
凡是用for循环能够遍历的都是可迭代的
str、list、tuple、dict、set、range、文件句柄
3.3 方法1:'__iter__' in dir(list)
print('__iter__' in dir(str))
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
True
3.4 方法2:isinstance
解释:isinstance 比type的范围更大
from collections import Iterable
print(isinstance('abc',Iterable))
输出
D:/python/untitled2/python_5/练习.py
True
isinstance也可以判断类型
from collections import Iterable
print(isinstance('abc',str))
输出
D:/python/untitled2/python_5/练习.py
True
第4章 迭代器
4.1 定义
解释:内部含有__iner__且含有__next__方法的对象就是迭代器,遵循迭代器协议。
迭代器可以取值,迭代对象也是转换成迭代器才取值的
4.2 迭代器转换
s1 = 'abc'
obj_s = s1.__iter__() #可迭代对象传换成迭代器
obj_s1 =iter(s1) #可迭代对象传换成迭代器
print(obj_s,obj_s1)
内置方法:
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
<str_iterator object at 0x00000000022282E8> <str_iterator object at 0x00000000022282B0>
4.2.1 判断方法1
s1 = 'abc'
print('__iter__' in dir(s1))
print('——next' in dir(s1))
输出
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
True
False
4.2.2 判断方法2:
from collections import Iterator
l1 = [1,2,3]
print(isinstance(l1,Iterator))
l1_obj = l1.__iter__()
print(isinstance(l1_obj,Iterator))
输出
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
False
True
4.3 转换成迭代器的优势
l 节省内存,只占一条的数据
l 惰性机制
l 单向执行,不可逆
4.4 模拟for循环
for循环其实就是迭代器原理,我们之前在讲循环对象的时候,曾提到一个StopIteration的异常,该异常是在循环对象穷尽所有元素时的报错。
s1 = 'fkdsafhdskfhsdklfjdslfksd'
s1_obj = s1.__iter__()
while True:
try:
print(s1_obj.__next__())
except StopIteration:
break
输出:
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
f
k
d
s
a
f
……..
第5章 生成器
定义:生成器的本质就是迭代器,他是自定义的迭代器(用python代码手写一个迭代器叫做生成器)
凡是在函数中见到yield 就是生成器
例:
def func1():
print(111)
yield 666
ret = func1()
print(ret)
输出
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
<generator object func1 at 0x0000000001E8E4C0>
5.1 生成器对象
解释:上述案例中
ret = func1() 为生成对象
print(ret)#凡事函数中见到yield 就是生成器
例:
def func1():
yield 999
print(222)
print(333)
yield 'wang'
print(888)
g_obj = func1()
#__next__()和yield 必须一一对应
print(g_obj.__next__())
print(g_obj.__next__())
输出
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
999
222
333
wang
5.2 以函数的方式来构建生成器
def cloth():
for i in range(1,5001):
print('衣服%s' %i)
cloth()
一次性生成
def cloth1():
for i in range(1,5001):
yield '衣服%s' %i
g_obj = cloth1() # 生成器对象
分批次生成,并且号码相连
for i in range(50):
print(g_obj.__next__())
for i in range(150):
print(g_obj.__next__())
第6章 生成器表达式
6.1 生成表达式特性
u 生成表达式又称:列表推导式
u 列表推导式:简单,一行能搞定
u 特别复杂的数据列表推导式无法实现,只能用其他方式实现
u 列表推导式不能排错
6.2 遍历模式
[变量 (加工后的变量) for 变量 in iterable ] 遍历模式
例:遍历模式
l1 = []
for i in range(1,23):
l1.append('python%s期' % i)
print(l1)
输出
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
['python1期', 'python2期', 'python3期', 'python4期', 'python5期', 'python6期', 'python7期', 'python8期', 'python9期', 'python10期', 'python11期', 'python12期', 'python13期', 'python14期', 'python15期', 'python16期', 'python17期', 'python18期', 'python19期', 'python20期', 'python21期', 'python22期']
6.2.1 列表推导式简单用法
l = [i for i in range(1,11)]
print(l)
输出
D:/python/untitled2/python_5/练习.py
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
6.2.2 列表推导式应用
l2 = ['python%s期' %i for i in range(1,23)]
print(l2)
输出
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
['python1期', 'python2期', 'python3期', 'python4期', 'python5期', 'python6期', 'python7期', 'python8期', 'python9期', 'python10期', 'python11期', 'python12期', '
6.3 筛选模式
[变量 (加工后的变量) for 变量 in iterable if 条件]删选模式
l1 = []
for i in range(1,31):
if i % 3 == 0:
l1.append(i)
print(l1)
l2 = [i for i in range(1,31) if i % 3 == 0]
print(l2)
列表声称式 生成器表达式
6.4 生成器取值:
u send 和next 都是对生成器取值。
u send 会给上一个yield 发送一个值。
u send 不能用在第一次取值。
u 最后一个yield 不能得到值
例1:yield
def func1():
count = yield 666
print(count)
yield 'alex'
yield 'abc'
g_obj = func1() # 生成器对象
print(g_obj.__next__())
print(g_obj.__next__())
解释:
# send 和next 都是对生成器取值。
# send 会给上一个yield 发送一个值。
# send 不能用在第一次取值。
# 最后一个yield 不能得到值
例2:send
def func1():
count = yield 666
print(count)
yield 'afr'
yield 'abc'
g_obj = func1() # 生成器对象
# print(g_obj.__next__())
# print(g_obj.__next__())
print(g_obj.__next__())
print(g_obj.send('taibai'))
# print(g_obj.send('taibai'))
print(g_obj.__next__())
输出
C:\python3\python.exe D:/python/untitled2/python_5/lession.py
666
taibai
afr
abc
6.5 列表表达式转换生成器表达式
6.5.1 区别:
u 列推直观能看出,但是占内存
u 生成器表达式不易看出,但是节省内存
例:
l2_obj = (i for i in range(1,31) if i % 3 == 0 )
print(l2_obj)
输出
C:\python3\python.exe D:/python/untitled2/python_5/lession.py
<generator object <genexpr> at 0x00000000021CC0A0>
6.6 练习题
1) 构建列表: 十以内的所有的元素的平方。
l1 = [i**2 for i in range(1,10)]
print(l1)
2) 30以内所有能被3整除的数的平方
l1 = [i**2 for i in range(1,31) if i % 3 == 0]
print(l1)
3)[3,6,9] 组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]
l1 =[[i-2,i-1,i] for i in [3,6,9]]
print(l1)
4)
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
找出名字中含有两个e的名字
l1 =[i for l in names for i in l if i.count('e') == 2 ]
print(l1)
6)
# l = ['您好', '3.64',
# '请问您是刘晓宇同学的家长吗', '6.25',
# '是的有什么事情吗', '6.15',
# '您好我是学大教育的刘老师', '5.06',
# '这次给给您打电话主要是想了解一下孩子上学期的协议情况', '5.86',
# '针对于上学期的学习状况', '5.37',
# '我们学校邀请您和孩子周末过来听一下针对性的辅导课好吧好吧', '5.36',
# '可以我想问一下都有什么课程呢', '5.65',
# '呃主要是有英语和语文', '4.35',
# '你看', '3.77',
# '到时候咱们再联系好吧', '6.10',
# '好的', '6.45',
# '恩再见', '4.84']
# 上面这个列表帮我转成下面这种格式
# [{"onebest":"您好", "speed":"6.060606"},
# {"onebest":"我这是中国电信的客户代表请问您是幺五幺幺零幺五六六六幺号码的长期使用者吗", "speed":"5.479452"},
# {"onebest":"是的", "speed":"5.405406"},
# {"onebest":"为啥谢谢您长期以来的支持", "speed":"5.529954"},
# {"onebest":"交银退掉", "speed":"4.938272"},
# {"onebest":"考虑了解生活小贴士服务美元四月","speed":"4.672897"},
# {"onebest":"你们可以收到天气情况活动", "speed":"5.529954"},
# {"onebest":"我建议", "speed":"4.347826"},
# {"onebest":"生活中了就是周转现在开通后","speed":"4.024768"},
# {"onebest":"发到您的", "speed":"8.510638"},
# {"onebest":"都会","speed":"4.255319"},
# {"onebest":"现在","speed":"6.451613"},
# {"onebest":"可以享有就是看吗", "speed":"5.161290"},
# {"onebest":"可以","speed":"6.451613"},
# {"onebest":"改天先生那是的", "speed":"4.046243"},
# {"onebest":"另外再见", "speed":"5.479452"}
# ]
方法:
print([{'onebest':l[i],'speed':l[i+1]} for i in range(len(l)) if i % 2 == 0])
输出
C:\python3\python.exe D:/python/untitled2/python_5/lession.py
[{'onebest': '您好', 'speed': '3.64'}, {'onebest': '请问您是刘晓宇同学的家长吗', 'speed': '6.25'}, {'onebest': '是的有什么事情吗', 'speed': '6.15'}, {'onebest': '您好我是学大教育的刘老师', 'speed': '5.06'}, {'onebest': '这次给给您打电话主要是想了解一下孩子上学期的协议情况', 'speed': '5.86'}, {'onebest': '针对于上学期的学习状况', 'speed': '5.37'}, {'onebest': '我们学校邀请您和孩子周末过来听一下针对性的辅导课好吧好吧', 'speed': '5.36'}, {'onebest': '可以我想问一下都有什么课程呢', 'speed': '5.65'}, {'onebest': '呃主要是有英语和语文', 'speed': '4.35'}, {'onebest': '你看', 'speed': '3.77'}, {'onebest': '到时候咱们再联系好吧', 'speed': '6.10'}, {'onebest': '好的', 'speed': '6.45'}, {'onebest': '恩再见', 'speed': '4.84'}]
6.7 作业题
x = {
'name':'alex',
'Values':[{'timestamp':1517991992.94,
'values':100,},
{'timestamp': 1517992000.94,
'values': 200,},
{'timestamp': 1517992014.94,
'values': 300,},
{'timestamp': 1517992744.94,
'values': 350},
{'timestamp': 1517992800.94,
'values': 280}
],}
# 将上面的数据通过列表推导式转换成下面的类型:
# [[1517991992.94, 100], [1517992000.94, 200], [1517992014.94, 300], [1517992744.94, 350], [1517992800.94, 280]]
解答:
l2 = [[i['timestamp'],i['values']] for i in x['Values'] ]
第7章 内置函数
|
7.1 作用域相关
7.1.1 locals***
函数会以字典的类型返回当前位置的全部局部变量
7.1.2 globals***
函数以字典的类型返回全部全局变量
例:
a = 1
b = 2
print(locals())
print(globals())
# 这两个一样,因为是在全局执行的。
##########################
def func(argv):
c = 2
print(locals())
print(globals())
func(3)
#这两个不一样,locals() {'argv': 3, 'c': 2}
#globals() {'__doc__': None, '__builtins__': <module 'builtins' (built-in)>, '__cached__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000024409148978>, '__spec__': None, '__file__': 'D:/lnh.python/.../内置函数.py', 'func': <function func at 0x0000024408CF90D0>, '__name__': '__main__', '__package__': None}
7.2 其它相关
7.2.1 eval***
解释:执行字符串类型的代码,并返回最终结果
eval('2 + 2') # 4
n=81
eval("n + 4") # 85
eval('print(666)') # 666
7.2.2 exec***
解释:执行字符串类型的代码
例:
s = '''
for i in [1,2,3]:
print(i)
'''
exec(s)
输出
C:\python3\python.exe D:/python/untitled2/python_5/lession.py
1
2
3
7.2.3 compile
解释:将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值
参数说明:
u 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。
u 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。
u 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为'single'。
'''
>>> #流程语句使用exec
>>> code1 = 'for i in range(0,10): print (i)'
>>> compile1 = compile(code1,'','exec')
>>> exec (compile1)
>>> #简单求值表达式用eval
>>> code2 = '1 + 2 + 3 + 4'
>>> compile2 = compile(code2,'','eval')
>>> eval(compile2)
>>> #交互语句用single
>>> code3 = 'name = input("please input your name:")'
>>> compile3 = compile(code3,'','single')
>>> name #执行前name变量不存在
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
name
NameError: name 'name' is not defined
>>> exec(compile3) #执行时显示交互命令,提示输入
please input your name:'pythoner'
>>> name #执行后name变量有值
"'pythoner'"
注释:有返回值的字符串形式的代码用eval,没有返回值的字符串形式的代码用exec,一般不用compile
7.2.4 print
input:函数接受一个标准输入数据,返回为 string 类型。print:打印输出。
print(111,222,333,sep='*') # 111*222*333
print(111,end='')
print(222) #两行的结果 111222
f = open('log','w',encoding='utf-8')
print('写入文件',file=f,flush=True)
7.2.5 hash
获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值
print(hash(12322))
print(hash('123'))
print(hash('arg'))
print(hash('alex'))
print(hash(True))
print(hash(False))
print(hash((1,2,3)))
输出
12322
-2996001552409009098
-4637515981888139739
2311495795356652852
1
0
2528502973977326415
'''
将不可变元素定义一个值,除了int和bool
7.2.6 callable**
解释:函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功
>>>callable(0)
False
>>> callable("runoob")
False
>>> def add(a, b):
... return a + b
...
>>> callable(add) # 函数返回 True
True
>>> class A: # 类
... def method(self):
... return 0
...
>>> callable(A) # 类返回 True
True
>>> a = A()
>>> callable(a) # 没有实现 __call__, 返回 False
False
>>> class B:
... def __call__(self):
... return 0
...
>>> callable(B)
True
>>> b = B()
>>> callable(b) # 实现 __call__, 返回 True
7.3 数据类型相关
u bool :用于将给定参数转换为布尔类型,如果没有参数,返回 False。
u int:函数用于将一个字符串或数字转换为整型。
u float:函数用于将整数和字符串转换成浮点数
u complex:函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。
7.3.1 int
print(int()) # 0
print(int('12')) # 12
print(int(3.6)) # 3
print(int('0100',base=2)) # 将2进制的 0100 转化成十进制。结果为 4
7.3.2 complex
>>>complex(1, 2)
(1 + 2j)
>>> complex(1) # 数字
(1 + 0j)
>>> complex("1") # 当做字符串处理
(1 + 0j)
# 注意:这个地方在"+"号两边不能有空格,也就是不能写成"1 + 2j",应该是"1+2j",否则会报错
>>> complex("1+2j")
(1 + 2j)
7.4 数学运算
u abs:函数返回数字的绝对值。
u divmod:计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。
u round:保留浮点数的小数位数,默认保留整数。
u pow:求x**y次幂。(三个参数为x**y的结果对z取余)
u sum:对可迭代对象进行求和计算(可设置初始值)。
u min:返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值)。
u max:返回可迭代对象的最大值(可加key,key为函数名,通过函数的规则,返回最大值)。
7.4.1 divmod
print(abs(-5)) # 5
print(divmod(7,2)) # (3, 1)
print(round(7/3,2)) # 2.33
print(round(7/3)) # 2
print(round(3.32567,3)) # 3.326
print(pow(2,3)) # 两个参数为2**3次幂
print(pow(2,3,3)) # 三个参数为2**3次幂,对3取余。
7.4.2 sum****
print(sum([1,2,3]))
print(sum((1,2,3),100))
print(max([1,2,3])) # 返回此序列最大值
ret = max([1,2,-5,],key=abs) # 按照绝对值的大小,返回此序列最大值
print(ret)
dic = {'a':3,'b':2,'c':1}
print(max(dic,key=lambda x:dic[x]))
# x为dic的key,lambda的返回值(即dic的值进行比较)返回最大的值对应的键
7.4.3 min****
print(min([1,2,3])) # 返回此序列最小值
ret = min([1,2,-5,],key=abs) # 按照绝对值的大小,返回此序列最小值
print(ret)
dic = {'a':3,'b':2,'c':1}
print(min(dic,key=lambda x:dic[x]))
# x为dic的key,lambda的返回值(即dic的值进行比较)返回最小的值对应的键
7.5 数据结构相关
列表和元祖(2)
u list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素)。
u tuple:将一个可迭代对象转化成元祖(如果是字典,默认将key作为元祖的元
相关内置函数(2)
u reversed:将一个序列翻转,并返回此翻转序列的迭代器。
u slice:构造一个切片对象,用于列表的切片。
字符串相关(9)
u str:将数据转化成字符串。
u format:与具体数据相关,用于计算各种小数,精算等。
u bytes:用于不同编码之间的转化
u bytearry:返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256
u ord:输入字符找该字符编码的位置
u chr:输入位置数字找出其对应的字符
u ascii:是ascii码中的返回该值,不是就返回/u...
u repr:返回一个对象的string形式(原形毕露)
数据集合
u dict:创建一个字典。
u set:创建一个集合。
u frozenset:返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
相关内置函数
u len:返回一个对象中元素的个数。
u sorted:对所有可迭代的对象进行排序操作。
7.5.1 reversed
建列表生成一个翻转后的迭代器
ite = reversed(['a',2,3,'c',4,2])
for i in ite:
print(i)
li = ['a','b','c','d','e','f','g']
sli_obj = slice(3)
print(li[sli_obj])
sli_obj = slice(0,7,2)
print(li[sli_obj]
7.5.2 encode
s = '完'
b1 = s.encode('utf-8')
print(b1)
输出
b'\xe5\xae\x8c'
7.5.3 repr
解释:返回一个对象的string形式(原形毕露)
# %r 原封不动的写出来
# name = 'taibai'
# print('我叫%r'%name)
# repr 原形毕露
print(repr('{"name":"alex"}'))
print('{"name":"alex"}')
7.5.4 sorted****
解释:对所有可迭代的对象进行排序操作
L = [('a', 1), ('c', 3), ('d', 4),('b', 2), ]
sorted(L, key=lambda x:x[1]) # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda s: s[2]) # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
sorted(students, key=lambda s: s[2], reverse=True) # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
7.5.5 enumerate****
解释:返回一个枚举对象
l1 = ['wang','li','zhao']
for index,count in enumerate(l1):
print(index,count)
输出
0 wang
1 li
2 zhao
7.5.6 any**
# all 可迭代对象中,全都是True才是True
# any 可迭代对象中,有一个True 就是True
# print(all([1,2,True,0]))
# print(any([1,'',0]))
7.5.7 zip****
解释:函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
l1 = [1,2,3,]
l2 = ['a','b','c',5]
l3 = ('*','**',(1,2,3))
for i in zip(l1,l2,l3):
print(i)
输出
l1 = [1,2,3,]
l2 = ['a','b','c',5]
l3 = ('*','**',(1,2,3))
for i in zip(l1,l2,l3):
print(i)
7.5.8 map****
解释:会根据提供的函数对指定序列做映射
>>>def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
7.5.9 filter
#filter 过滤 通过你的函数,过滤一个可迭代对象,返回的是True
#类似于[i for i in range(10) if i > 3]
# def func(x):return x%2 == 0
# ret = filter(func,[1,2,3,4,5,6,7])
# print(ret)
# for i in ret:
# print(i)
第8章 匿名函数
定义:将一些简单的函数用一行来体现
u 参数可以多个,用逗号隔开
u 匿名函数不管逻辑多复杂,只能写一行,且逻辑执行的结束后的内容就是返回值
u 返回值和正常的函数一样可以是任意数据类型
格式:
calc (函数名) = lambda(定义匿名函数关键字和def类似) n(参数) n**n(返回值)
print(calc(10))
例:
def func2(x,y):
return x + y
func1 = lambda x,y: x + y
print(func1(3,4))
例2:
res = map(lambda x: x**2,[1,5,7,4,8])
for i in res:
print(i)
输出
C:\python3\python.exe D:/python/untitled2/python_5/lession.py
1
25
49
16
64
8.1 练习
l1 = [ {'sales_volumn': 0},
{'sales_volumn': 108},
{'sales_volumn': 337},
{'sales_volumn': 475},
{'sales_volumn': 396},
{'sales_volumn': 172},
{'sales_volumn': 9},
{'sales_volumn': 58},
{'sales_volumn': 272},
{'sales_volumn': 456},
{'sales_volumn': 440},
{'sales_volumn': 239}]
按照数字升序排序
print(sorted(l1,key = lambda x:x['sales_volumn']))
输出
C:\python3\python.exe D:/python/untitled2/python_5/lession.py
[{'sales_volumn': 0}, {'sales_volumn': 9}, {'sales_volumn': 58}, {'sales_volumn': 108}, {'sales_volumn': 172}, {'sales_volumn': 239}, {'sales_volumn': 272}, {'sales_volumn': 337}, {'sales_volumn': 396}, {'sales_volumn': 440}, {'sales_volumn': 456}, {'sales_volumn': 475}]
第9章 拾遗
9.1 except StopIteration
for循环其实就是迭代器原理,我们之前在讲循环对象的时候,曾提到一个StopIteration的异常,该异常是在循环对象穷尽所有元素时的报错。
s1 = 'fkdsafhdskfhsdklfjdslfksd'
s1_obj = s1.__iter__()
while True:
try:
print(s1_obj.__next__())
except StopIteration:
break
输出:
C:\python3\python.exe D:/python/untitled2/python_5/练习.py
f
k
d
s
a
f
python_函数进阶(5)的更多相关文章
- Python_函数进阶
楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print ...
- 深入理解javascript函数进阶系列第一篇——高阶函数
前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...
- 【python 3】 函数 进阶
函数进阶 1.函数命名空间和作用域 命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 *内置命名空间中存放了python解释器为我们提供的名字:input , print , str ...
- day11.1函数进阶 列表集合 字典中的函数变量,函数作为形参
函数进阶 1.函数作为变量 a=123 name="gao" nums=[1,2,3] data=nums#指向同一个内存地址 #查看内存地址篇章 def func(): prin ...
- python基础 (初识函数&函数进阶)
函数基础部分 .什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名 ...
- day 10 - 1 函数进阶
函数进阶 命名空间和作用域 命名空间 命名空间 有三种内置命名空间 —— python解释器 就是python解释器一启动就可以使用的名字存储在内置命名空间中 内置的名字在启动解释器的时候被加载进内存 ...
- python基础之 初识函数&函数进阶
函数基础部分 1.什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名 ...
- python函数进阶(函数参数、返回值、递归函数)
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...
- python大法好——递归、内置函数、函数进阶
1.递归(自己干自己) def fun(n): n=n/2 print(n) if(n>2) fun(n) #函数调用 fun(10) 结果是5 2 1 0 递归的执行过程:递归执行到最里面一层 ...
随机推荐
- vue中导出Excel表格
项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地.当然我们也可以通过一些处理来修改要导出的数据格式,具体需求具体对待. 1.首先我们需要安装 ...
- access函数的使用检查文件的权限【学习笔记】
#include "apue.h" #include <fcntl.h> int main(int argc,char **argv) { ) err_quit(&qu ...
- Why is an 'Any CPU' application running as x86 on a x64 machine?
It's likely that you linked some assemblies that are not Any CPU, but include native code (or are ...
- nodejs api 中文文档
文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格 ...
- hdu 4398 Template Library Management(贪心+stl)
题意:n道题,每道题需要一个模板,现在手头有m个模板(标号1~m),解题的时候,如果没有需要的模板,可以向朋友借,但是用完之后必须在还给朋友一个模板(也就是说保持手头拥有m个模板),求解完n道题最少需 ...
- driver, module以及怎么看他们
1. driver和module的区别 https://unix.stackexchange.com/questions/47208/what-is-the-difference-between-ke ...
- I.MX6 新版、旧版u-boot不兼容问题
/************************************************************************* * I.MX6 新版.旧版u-boot不兼容问题 ...
- C - Soldier and Cards
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description Two bo ...
- Integrate Your Code with the Frameworks---整合你的代码和框架
Back to Frameworks Integrate Your Code with the Frameworks When you develop an app for OS X or iOS, ...
- Nginx: 统计PV、UV、独立IP
1.概念: UV(Unique Visitor):独立访客,将每个独立上网电脑(以cookie为依据)视为一位访客,一天之内(00:00-24:00),访问您网站的访客数量.一天之内相同cookie的 ...