lamada匿名函数:
python 使用lamada创建匿名函数
lamada拥有一个自己的命名空间,其只能访问自己的参数
a = lambda b,c:b+c
print(a(1,2))
a = lambda x,y:x*y+1
print(a(20,5))
传20,5 给a =》(20*5+1) = 101
lambda在调用的时候才对变量赋值,而不是定义的时候:
###lambda在运行的时候才调用其他变量,而不是定义的时候
num2 = 100
sum1 = lambda num1 : num1 + num2 ;
num2 = 10000
sum2 = lambda num1 : num1 + num2 ;
print( sum1( 1 ) )
print( sum2( 1 ) )
output :
10001
10001
直接通过lambda对(1, 2)排序
a = [(1, 2), (4, 1), (9, 10), (13, -3)]
a.sort(key=lambda x: x[1])
output:
[(13, -3), (4, 1), (1, 2), (9, 10)]
global a 表示从全局变量哪到函数当中,这样就可以对这个全局变量进行修改了。
input()输入可以带上字符:
info = input("请输入")
print(info)
常见对象自省:
dir,查看一个对象的所有属性和方法。
type,返回一个对象的类型。
inspect,查看一个模块的信息(inspect.getsource(hello)/(hello.hi))#直接查看源码
inspect.getabsfile(hello) # 查看一个模块的路径
python的迭代器与生成器,迭代器是python最强大的功能之一:
1、迭代器是访问集合的一种方式,迭代器是一个可以记住遍历的位置的对象。
2、迭代器从集合的第一个元素开始访问,直到所有元素被访问完,迭代器只能往前不会后退。
3、迭代器的两种基本用法:iter()、next()。
4、可迭代对象是指其在创建的时候设立了__iter__方法,这样才能用迭代器。
example:
list1 = [5,1,3,7]
it = iter(list1) #创建一个list的迭代器
for i in it:
print(i) #遍历这个迭代器
print(next(it)) #输出这个迭代器
print(next(it))
print(next(it))
print(next(it))
a = [2,3]
b = [3,4]
c = zip(a, b) #打成迭代器
a,b = c
print(a)
print(b)
创建迭代器:
# -*- coding = UTF-8 -*-
class Student:
def __iter__(self):
self.a = 1
return self
def __next__(self): # python2.x中使用next,python3.x中使用__name__
x = self.a
self.a += 10
return x
if __name__ == "__main__":
a = Student()
it = iter(a)
times = 0 # 这里这个迭代器只走10遍
for counter, i in enumerate(it):
if (counter == 10):
break
print('遍历迭代器',i)
print(next(it))
print(next(it))
print(next(it))
在python中,使用yield的被称作生成器:
生成器是一个返回迭代器的函数,在调用生成器运行的过程中。
每次遇到yield时函数会暂停并保存当前的运行信息,返回yield值,并且在下次执行这个迭代器的时候,
函数会从上次断掉的地方再次执行。
比如读数据读时候,数据很大,一次读完内存顶不住,用迭代器只取前面部分。
例子:
# -*- coding = UTF-8 -*-
def f():
for i in range(0,10):
yield i
res = f()
print(next(res)) #next 拿出第一个yield
print(next(res))
print(next(res))
print(next(res))
打印:
0、1、2、3
表示中断把结果输出,