Python 高级编程系列(一)

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使用这种赋值语句执行速度会比较慢,因为通过这种方式解释程序必须通过一个计数器跟踪列处理列表的修改,第二种效率更高同时更加简练涉及到的变量更少,缺陷自然减少。

  • 二: 迭代器

    1 . 通过 iter() 內建函数构建

    2 . __next__() 函数取值(python2 使用的是 next()函数)

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语言写的迭代器模块,据说是最高效的迭代器。



  • 三: 生成器

    1 . 基于 yield 返回的也是一个迭代器 (个人理解yield相当于一个列表缓冲区暂存数据,处理完之后返回结果) 常用在 将返回一个序列作为循环时
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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容