Python 常用知识

Python 高级编程系列(一)

2017-07-28  本文已影响0人  lolipops

Python 常见用法(一)

顾名思义就是通过一个列表推导出另外一个

#-*- coding:utf-8 -*-
import time
__author__ = 'Administrator'
#"常用列表赋值"
number = range(100000000)
evens = []
i = 0;
begin = time.time()
while i < len(number):
    if i % 2 == 0:
        evens.append(i)
    i = i + 1;
end = time.time()
print("耗时为",end-begin)
#"推导公式赋值"
begin = time.time()
evens = [i for i in range(100000000) if i % 2 ==0]
end = time.time()
print("耗时为",end-begin)

#"结果分别为: 耗时为 35.95461106300354"
#"            耗时为 13.877903461456299"

#还有一种常见的情况 enumerate内建函数函数
i = 0
seq = ["one","two","three","four"]
for element in seq:
    seq[i] = '%d:%s' %(i,seq[i])
seq = ["one","two","three","four"]
for i,element in enumerate(seq):
    seq[i] = '%d:%s' %(i,seq[i])

第一种在其他语言中使用这样赋值会比较常见,但是Python使用这种赋值语句执行速度会比较慢,因为通过这种方式解释程序必须通过一个计数器跟踪列处理列表的修改,第二种效率更高同时更加简练涉及到的变量更少,缺陷自然减少。

line = "helloworld"
itertable = iter(line)
num = 0;
while True:
    try:
        #num = num+1;           放这里num输出 11
        print(itertable.__next__())
        num = num+1;            #这里num输出 10
    except StopIteration:
        break
print(num)

itertool 是一个用C语言写的迭代器模块,据说是最高效的迭代器。



def function():
    a,b = 0,1
    while b < 100:
        yield b
        a,b = b,a+b
fib = function()
while True:
    try:
        print(fib.__next__())
        num = num+1;
    except StopIteration:
        break
[print(function.)]
print(num)

iter = (x**2 for x in range(10) if x % 2 ==0 )
# "这种方式生成的也是一个迭代器"
  1. 装饰函数

装饰器使得函数和方法的封装(接收一个函数返回另一个功能强大的函数)

def mydecorator(args):  #装饰器函数的参数  可以不要
    def mydecorator(func):  #装饰器自身实现 必须要的
        def _mydecorator(*arg,**kwargs):  ##处理参数,相当于再嵌套一层参数传递的函数 这是固定结构
            def wrapper():      #包装器
                ## 在调用时实际数是做一些填充工作 常常用来检测一个函数的执行时间
                print(func.__name__+"  函数 begin 时间为:" +  str(time.time())+"mydecorator 的参数  " + args)
                func(*arg,**kwargs)
                print(func.__name__+"  函数end 时间为: " + str(time.time()) +"mydecorator 的参数  " + args)
                return func
            wrapper()
        return _mydecorator
    return  mydecorator
@mydecorator("mycanshu")    ## 这是一种比较实用的方式不改变函数的内在结构把功能加上去 等价于 myfun = mydecorator(myfun) 其中 mycanshu 是装饰器的参数
def myfunc(x,y):
    time.sleep(3)
    print(1+2+x+y)

myfunc(3,4)

输出
# "myfunc  函数 begin 时间为:1501228594.8052733mydecorator 的参数  mycanshu"
# "10"
# "myfunc  函数end 时间为: 1501228597.8063107mydecorator 的参数  mycanshu"

  1. 装饰类
    类装饰和函数装饰类似
class test_deco:
    def __init__(self):
        print("调用构造函数")
    @staticmethod   ##静态方法
    def show_function():
        print("这是静态的请求方法")
    @staticmethod
    def out__function():
        print("这是静态的解锁方法")

def mydecorator(cls,myfun_arg):
    print(cls.__name__,myfun_arg)    #这里输出的是test_deco myfun_arg
    def __mydecorator(func):
        print(func.__name__) #这里输出的是myfun
        def __mydecorator(*arg,**kwargs):
            print(arg)  这里输出的时(1,2)
            def wrapper():
                print("这里")
                print(func.__name__+"  函数 begin 时间为:" + str(time.time())+"   mydecorator 的参数 " + myfun_arg )
                cls.show_function()
                func(*arg,**kwargs)
                cls.show_function()
                print(func.__name__+"  函数end 时间为: " + str(time.time()) +"mydecorator 的参数  " + myfun_arg)
            wrapper()
                        #分别输出
            '''
            这里
            myfun  函数 begin 时间为:1501230826.2434075   mydecorator 的参数 myfun_arg
            这是静态的请求方法
            myfun() show 2
            这是静态的请求方法
            myfun  函数end 时间为: 1501230829.2444615mydecorator 的参数  myfun_arg
            '''
        return __mydecorator
    return __mydecorator
@mydecorator(test_deco,"myfun_arg")


def myfun(x,y):
    time.sleep(3)
    print("myfun() show",x*y)

myfun(1,2)
上一篇下一篇

猜你喜欢

热点阅读