python学习(day4),,1、装饰器:‘‘‘实


1、装饰器:

‘‘‘实现装饰器只是储备:1、函数即“变量”2、高阶函数3、嵌套函数高阶函数+嵌套函数=》装饰器‘‘‘importtimedeftimmer(func):defwarpper(*args,**kwargs):start_time=time.time()func()stop_time=time.time()print("thefuncruntimeis%s"%(stop_time-start_time))returnwarpper@timmerdeftest1():time.sleep(3)print("inthetest1")test1()
importtimeuser,pwd="alex","123"defauth(auth_type):defouter_wrapper(func):print("authfunc:",auth_type)defwrapper(*args,**kwargs):print("authfuncargs:",*args,**kwargs)ifauth_type=="local":username=input("username:").strip()password=input("password:").strip()ifuser==usernameandpwd==password:print("\033[32;1muserhaspassedauthentication\033[0m")res=func(*args,**kwargs)print("-----c----")returnreselse:exit("\033[31;1minvalidusernameorpassword\033[0m")elifauth_type=="ldap":print("ldap,不会")returnwrapperreturnouter_wrapperdefindex():print("welcometoindexpage")@auth(auth_type="local")defhome():#home=wrapper()print("welcometohomepage")returnprint("fromhome")@auth(auth_type="ldap")defbbs():print("welcometobbspage")index()home()#wrapper()bbs()

2、迭代器:

fromcollectionsimportIterable#Iterable可迭代对象print(isinstance([],Iterable))#判断一个对象是否是Iterable可迭代对象print(isinstance(100,Iterable))#判断一个对象是否是Iterable可迭代对象fromcollectionsimportIterator#Iterator迭代器print(isinstance((iforiinrange(10)),Iterator))#判断一个对象是否是Iterator迭代器print(isinstance(iter([]),Iterator))#iter()方法可把一个Iterable可迭代对象,变成一个Iterator迭代器

3、生成器:

‘‘‘生成器:generator只有在调用时才会生成相应的数据只记录当前位置只有一个__nest()__方法。next()‘‘‘importtimedefconsumer(name):print("%s准备吃包子啦!"%name)whileTrue:baozi=yieldprint("包子[%s]来了,被[%s]吃了!"%(baozi,name))#c=consumer("liudeyi")#c.__next__()#c.send("韭菜馅")defproducer(name):c=consumer(‘A‘)c2=consumer(‘B‘)c.__next__()c2.__next__()print("老子开始准备做包子啦!")foriinrange(10):time.sleep(1)print("做了1个包子,分两半!")c.send(i)#send给generator的value会成为当前yield的结果并且send的返回结果是下一个yield的结果(或者引发StopIteration异常)c2.send(i)producer("alex")#a=[]#print(dir(a))#查看a下所有可调用方法

4、斐波那契数列:

deffib(max):n,a,b=0,0,1whilen<max:#print(b)yieldb#有yield的函数在Python中被称之为generator(生成器)a,b=b,a+bn=n+1return"done"f=fib(100)whileTrue:try:x=next(f)print(‘f:‘,x)exceptStopIterationase:#异常处理print(‘Generatorreturnvalue:‘,e.value)break#print(f.__next__())#print(‘=========‘)#print(f.__next__())#print(f.__next__())#print(f.__next__())#print(f.__next__())#print(f.__next__())#print(‘=====da=======‘)#foriinf:#print(i)

5、匿名函数:

calc=lambdax:x*3print(calc(3))

6、列表生成式:

#列表生成式:l=[i*2foriinrange(10)]print(l)b=(i*2foriinrange(10))print(b)print(b.__next__())foriinb:print(i)

7、内置方法:

#http://www.cnblogs.com/alex3714/articles/5740985.html#https://docs.python.org/3/library/functions.html?highlight=builtprint(all([0,1,2,-8]))#如果iterable的所有元素不为0、‘‘、False或者iterable为空,all(iterable)返回True,否则返回Falseprint(any([]))#如果iterable的任何元素不为0、‘‘、False,all(iterable)返回True。如果iterable为空,返回Falseprint(ascii([1,2,‘撒的发生‘]))print(bin(255))#将整数x转换为二进制字符串#res=filter(lambdan:n%2==0,range(100))#函数包括两个参数,分别是function和list。该函数根据function参数返回的结果是否为真来过滤list参数中的项,最后返回一个新列表res=map(lambdan:n*n,range(10))#map()是Python内置的高阶函数,它接收一个函数f和一个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并返回。foriinres:#lambda:匿名函数print(i)importfunctoolsres=functools.reduce(lambdax,y:x*y,range(1,10,2))#functools.reduce等同于内置函数reduce()print(res)#reduce()函数接收的参数和map()类似,一个函数f,一个list,但行为和map()不同,reduce()传入的函数f必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。print(globals())#globals函数返回一个全局变量的字典,包括所有导入的变量print(hex(255))#转16进制print(oct(255))#转8进制print(round(1.1314,2))#保留两位小数a={3:4,1:3,7:2,-7:9,2:5}print(sorted(a.items()))#sorted排序,按key排序print(sorted(a.items(),key=lambdax:x[1]))#按value排序a=[1,2,3,4]b=[‘a‘,‘b‘,‘c‘,‘d‘]foriinzip(a,b):#zip拉链print(i)#......

8、软件目录结构规范:

Foo/|--bin/||--foo||--foo/||--tests/|||--__init__.py|||--test_main.py||||--__init__.py||--main.py||--docs/||--conf.py||--abc.rst||--setup.py|--requirements.txt|--README

注:

bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。

foo/: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/存放单元测试代码; (3) 程序的入口最好命名为main.py。

docs/: 存放一些文档。

setup.py: 安装、部署、打包的脚本。

requirements.txt: 存放软件依赖的外部Python包列表。

README: 项目说明文件。

python学习(day4)

评论关闭