首页 > 代码库 > python学习(day4)
python学习(day4)
1、装饰器:
‘‘‘ 实现装饰器只是储备: 1、函数即“变量” 2、高阶函数 3、嵌套函数 高阶函数+嵌套函数=》装饰器 ‘‘‘ import time def timmer(func): def warpper(*args,**kwargs): start_time = time.time() func() stop_time = time.time() print("the func run time is %s"%(stop_time-start_time)) return warpper @timmer def test1(): time.sleep(3) print("in the test1") test1()
import time user,pwd = "alex","123" def auth(auth_type): def outer_wrapper(func): print("auth func:",auth_type) def wrapper(*args,**kwargs): print("auth func args:",*args,**kwargs) if auth_type=="local": username = input("username:").strip() password = input("password:").strip() if user == username and pwd ==password: print("\033[32;1m user has passed authentication\033[0m") res = func(*args,**kwargs) print("-----c----") return res else: exit("\033[31;1m invalid username or password\033[0m") elif auth_type=="ldap": print("ldap,不会") return wrapper return outer_wrapper def index(): print("welcome to index page") @auth(auth_type="local") def home():# home = wrapper() print("welcome to home page") return print("from home") @auth(auth_type="ldap") def bbs(): print("welcome to bbs page") index() home()#wrapper() bbs()
2、迭代器:
from collections import Iterable#Iterable可迭代对象 print(isinstance([],Iterable))#判断一个对象是否是Iterable可迭代对象 print(isinstance(100,Iterable))#判断一个对象是否是Iterable可迭代对象 from collections import Iterator#Iterator迭代器 print(isinstance((i for i in range(10)),Iterator))#判断一个对象是否是Iterator迭代器 print(isinstance(iter([]),Iterator))#iter()方法可把一个Iterable可迭代对象,变成一个Iterator迭代器
3、生成器:
‘‘‘ 生成器 :generator 只有在调用时才会生成相应的数据 只记录当前位置 只有一个__nest()__方法。next() ‘‘‘ import time def consumer(name): print("%s 准备吃包子啦!" %name) while True: baozi = yield print("包子[%s]来了,被[%s]吃了!" %(baozi,name)) # c = consumer("liudeyi") # c.__next__() # c.send("韭菜馅") def producer(name): c = consumer(‘A‘) c2 = consumer(‘B‘) c.__next__() c2.__next__() print("老子开始准备做包子啦!") for i in range(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、斐波那契数列:
def fib(max): n,a,b = 0,0,1 while n < max: #print(b) yield b#有 yield 的函数在 Python 中被称之为 generator(生成器) a,b = b,a+b n = n+1 return "done" f = fib(100) while True: try: x = next(f) print(‘f:‘,x) except StopIteration as e:#异常处理 print(‘Generator return value:‘,e.value) break # print(f.__next__()) # print(‘=========‘) # print(f.__next__()) # print(f.__next__()) # print(f.__next__()) # print(f.__next__()) # print(f.__next__()) # print(‘=====da=======‘) # for i in f: # print(i)
5、匿名函数:
calc = lambda x:x*3 print(calc(3))
6、列表生成式:
#列表生成式: l = [i*2 for i in range(10)] print(l) b = (i*2 for i in range(10)) print(b) print(b.__next__()) for i in b: print(i)
7、内置方法:
#http://www.cnblogs.com/alex3714/articles/5740985.html #https://docs.python.org/3/library/functions.html?highlight=built print(all([0,1,2,-8]))#如果iterable的所有元素不为0、‘‘、False或者iterable为空,all(iterable)返回True,否则返回False print(any([]))#如果iterable的任何元素不为0、‘‘、False,all(iterable)返回True。如果iterable为空,返回False print(ascii([1,2,‘撒的发生‘])) print(bin(255))#将整数x转换为二进制字符串 #res = filter(lambda n:n%2==0,range(100))#函数包括两个参数,分别是function和list。该函数根据function参数返回的结果是否为真来过滤list参数中的项,最后返回一个新列表 res = map(lambda n:n*n,range(10))#map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。 for i in res:#lambda:匿名函数 print(i) import functools res = functools.reduce(lambda x,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=lambda x:x[1]))#按value排序 a = [1,2,3,4] b = [‘a‘,‘b‘,‘c‘,‘d‘] for i in zip(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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。