python基础学习第六天

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础学习第六天相关的知识,希望对你有一定的参考价值。

6.1 装饰器

6.2 生成器

6.3 模块

    time

    random


6.1 装饰器

闭包


定义:如果在一个内部函数里,对在外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包

def xx():

x=10:

def yy(): # 条件一 xx就是内部函数

print(x) # 条件二 外部环境的一个变量

return yy # 结论: 内部函数inner就是一个闭包


关于闭包,闭包=内部函数+定义函数时的环境


@xx      # 等于 xx=yy(xx)

def xx():

    print "123"



弄一个空的数组,用于保存数组信息,按每行打印然后将字符串组合,再附加到空的数组中,最后再进行比较

方法一: 

file=[]

with open("test","r",encoding="utf-8") as f:

    for i in f.readlines():

        c=‘‘.join(i.strip())

        file.append(c)

    if file[0] == "xiong" and file[1] == "xiong1":

        print("ok")


方法二:

file=[]

with open("test","r",encoding="utf-8") as f:

    for i in f.readlines():

        file.extend(i.split())

    print(file[0])



6.2 生成器

   两种创建方式:

    1: a=(x*x for x in range(10))    元组


    2:yield   在函数里只要有yield就是生成器


    什么是可迭代对象? (对象拥有iter方法的成为可迭代对象)

        a=[1,2,3]   列表对象



for i in 反面跟着的是可迭代对象


第一次send前如果没有next, 只能传一个send(None)


    列表生成式:  生成器就是一个可迭代对象(Iterable)

        a=[x*x for x in range(10)]      直接计算出平方结果[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


        a=(x*x for x in range(10))      打印出生成器对象,不会有结果

                                        <generator object <genexpr> at 0x00000000021669E8>

        a.__next__()   # 使用该内置方法可以将值打印出来,但是不建议使用

        建议使用 print(next(a)) 方法          py2中使用的是s.next()

                只能从0开始到最后

    迭代器

        # 生成器都是迭代器,迭代器不一定是生成器 能使用iter的可迭代对象

            # 

            l=[1,2,4,5]

            d=iter(l)

            print(d)        # 结果 <list_iterator object at 0x000000000063B1D0>


        # 什么是迭代器?  迭代器包含生成器

            # 满足两个条件:1、有iter方法, 2、有next方法


    for 循环内部三件事:

        1、 调用可迭代对象的iter方法返回一个迭代器对象

        2、 循环调用迭代器对象的next方法 

        3、 处理StopIteration


6.3 模块  time

        time.sleep()         # (秒)
        print(time.time())   # 时间戳 1506492926.3223119    从1970年1月1日开始记秒
        print(time.localtime())    
          # time.struct_time(tm_year=2017, tm_mon=9, tm_mday=27, tm_hour=14, tm_min=11, tm_sec=46, tm_wday=2, tm_yday=270, tm_isdst=0)
        time.strftime()      # now_time=time.localtime()     
                             # print(time.strftime("%Y-%m-%d %H:%M:%S",now_time))
                             # 结果: 2017-09-27 14:04:27
        ti=time.strptime(‘2017-09-27 14:15:26‘,‘%Y-%m-%d %H:%M:%S‘)     # 格式化字符串打印的结果与time.time一样,但有值之后就能直接取出年月日值
            print(ti.tm_hour)   # 14   这样能直接打印出月份


        print(time.mktime(time.localtime()))        # 将当前时候转换为时间戳


    # datetime

        import datetime

        print(datetime.datetime.now())      # 获取当前时间

    # random  随机数 限定0-1
        print(random.random())     #随机获取一个0-1之间的随机数
        print(random.randrange(1,100))  # 随机生成一个范围内的数值
        print(random.sample([‘123‘,‘32‘,‘3‘],2))    # 列表随机生成一个2位的数[‘32‘, ‘123‘]
        print(random.choice([‘1‘,‘2‘,‘3‘]))         # 随机生成一个数值

    # chr  转换ascii码对应的数值表 如65对应A      65-91表示ASCII码的 A-Z

        常见字符的ASCII码值如下:空格的ASCII码值为32;数字0到9的ASCII码值分别为48到57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。


    # 生成一个6位的随机生成数

        import random

        def v_random():
            a_num=‘‘
            for i in range(6):
                r_num=random.choice([random.randrange(10),chr(random.randint(65,91)),chr(random.randint(97,122))])
                a_num+=str(r_num)
            print(a_num)

        v_random()              # 打印结果 cyY4N6


一脸懵逼学习中,喉咙发炎好了,又蛋的感冒了,一周又过完了, 2017年09月28日复习一天 


本文出自 “xiong” 博客,请务必保留此出处http://xiong51.blog.51cto.com/5239058/1969258

以上是关于python基础学习第六天的主要内容,如果未能解决你的问题,请参考以下文章

python基础学习第六天

Python 3 学习的第六天——Python基础

python基础学习第六天

python学习第六天:python基础(dictset)

python基础(第六天)

Python全栈开发学习笔记-06.第六天