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基础学习第六天的主要内容,如果未能解决你的问题,请参考以下文章