学习Python基础知识笔记~~~~~~~~~~~~~~~~~
(1)generator 生成器
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们 仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中, 这种一边循环一边计算的机制,称为生成器(Generator)。
(2)filter 选择器
filter函数,接受2个参数,一个已定义的函数或lambda表达式,和一个可迭代的对象
他的作用过程是,将第二个可迭代对象的内部参数,一个一个传入function内部使用,如果返回值是True,则加入结果,反之,则不加入
最终,生成一个迭代器,由所有返回结果为True的元素组成。
(3)decorator 装饰器
就是把一个函数当参数传到另一个函数中,然后再回调。根据《函数式编程》中的first class functions中的定义的,你可以把函数当成变量来使用,所以,decorator必需得返 回了一个函数出来给func。同样的,可以有多个decorator或是带参数的decorator。
(1). yield 生成器
1 def co(n): 2 a, b= 0,1 3 4 while n<5: 5 yield {"{}".format('a'):a,"{}".format('b'):b} 6 a+=1 7 b+=1 8 n+=1 9 c = list(co(2)) 10 print(c) 11 for i in co(2): 12 print(i) 13 14 output: 15 16 F:\spark\python35\python.exe F:/learnPython/weixin/ML/sparklearn.py 17 [{'a': 0, 'b': 1}, {'a': 1, 'b': 2}, {'a': 2, 'b': 3}]18 {'a': 0, 'b': 1} 19 {'a': 1, 'b': 2} 20 {'a': 2, 'b': 3} 21 22 Process finished with exit code 0
(2)filter选择器
1 a = [i for i in range(10)] 2 print(a) 3 def test_filter(s): 4 if s%2==0: 5 return True 6 else: 7 return False 8 print(list(filter(test_filter,a))) 9 10 11 output: 12 13 F:\spark\python35\python.exe F:/learnPython/weixin/ML/sparklearn.py 14 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 15 [0, 2, 4, 6, 8] 16 17 Process finished with exit code 0
1 import time 2 # print(time.strftime("%Y-%m-%d %X",time.localtime(int(time.time())))) 3 def now(): 4 print(time.strftime("%Y-%m-%d %X",time.localtime(int(time.time())))) 5 # f = now() 6 f = now 7 # f() 8 # print(now.__name__) 9 # print(f.__name__) 10 11 def logs(fuc): 12 def wrapper(*args,**kw): 13 print('call {}'.format(fuc.__name__)) 14 return fuc(*args,**kw) 15 return wrapper 16 17 @logs 18 def now_2(): 19 print(now()) 20 21 now_2() 22 23 24 ########OUTPUT########## 25 26 F:\spark\python35\python.exe F:/learnPython/weixin/ML/sparklearn.py 27 call now_2 28 2018-01-17 19:43:24 29 None 30 31 Process finished with exit code 0
2).复杂一点
1 def log_2(text): 2 def decorator(func): 3 def wrapper(*args,**kw): 4 print("{},{}".format(text,func.__name__)) 5 return func(*args,**kw) 6 return wrapper 7 return decorator 8 @log_2('hello world ! ') 9 def now_3(): 10 print(now()) 11 now_3() 12 13 #######OUTPUT######## 14 F:\spark\python35\python.exe F:/learnPython/weixin/ML/sparklearn.py 15 hello world ! ,now_3 16 2018-01-17 19:51:59 17 None 18 19 Process finished with exit code 0 20 ##################
(3)class类型的装饰器
1 class makeHtmlTagClass1(object):
2 def __init__(self,tag,css_class=""):
3 self._tag = tag
4 self._css_class = " class='{0}'".format(css_class) \
5 if css_class != "" else ""
6
7 def __call__(self,fn):
8 def wrapped(*args,**kwargs):
9 return "<"+self._tag + self._css_class+">" \
10 + fn(*args,**kwargs) + "</" +self._tag+">"
11 return wrapped
12 @makeHtmlTagClass1(tag="b",css_class="bold_css")
13 @makeHtmlTagClass1(tag="i",css_class="italic_css")
14 def hello(str):
15 return "Hello , {}".format(str)
16
17 print(hello("HqIWaS ChAlS"))
18
19 ######OUTPUT########
20
21 F:\spark\python35\python.exe F:/learnPython/weixin/ML/sparklearn.py
22 <b class='bold_css'><i class='italic_css'>Hello , HqIWaS ChAlS</i></b>
23 ##################