推导表达式
li1 = list()
for i in range(10): # 迭代循环内容
li1.append(i)
print( li1 )
----》》》 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
li2 =[i for i in range(10)] # 推导表达式的语法
# 列表元素, for 循环
print(li2)
----》》》 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
li3= ['bin' for i in range(6)]
# 列表元素, for 循环
print(li3)
----》》》 ['bin', 'bin', 'bin', 'bin', 'bin', 'bin']
推导表达式 加判断
for i in range(10): if i % 2 == 0: li4.append(i) print(li4) ----》》》》 [0, 2, 4, 6, 8] li5 = [i for i in range(10) if i % 2 == 0 ] 三元表达式
# 添加的值,for 循环, 判断/条件 print(li5) ----》》》》 [0, 2, 4, 6, 8]
迭代器:
1,迭代器协议:对象必须提供一个 next 方法,执行该方法后要么返回迭代的下一项,要么就引起 Stoplteration 异常,
以终止迭代,(只能往后走,不能往前找,)
2,可迭代对象:实现了地带协议的对象,(如何迭代对象内部定义一个 __iter__() 方法)
3,协议是一种约定,可迭代对象实现了迭代协议,python 的内部工具(如 for 循环,sum,min,max海曙)
使用迭代器访问对象,
for 循环原理:
l = [1,3,4]
for i in l:
print(i)
原理:
将 iter(l) 的值 进行 next 方法
生成器有两种表现形式:
生成器表达 式,
yy =( i for i in range(10) ) 与推导表达 式不同之处在于【】和()
函数形式
def test():
yield 1
yield 2
yield 取代了 return
函数中 只要有 yield,其运行就得到生成器,
生成器自动实现了迭代器协议,(iter)
def cy(*args):
count = 0
while 1:
if count < len(args):
yield args[count]
count += 1
else:return StopAsyncIteration
生成器
# 列表生成式
a = [ x for x in range(10)]
print(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 列表生成式
def f (n):
return n**3
a = [ f(x) for x in range(10)]
生成器:
a = (x for x in range(10))
print(a)
print( next(a) )
print( next(a) )
print( next(a) )
生成器:
a = (x for x in range(10))
for i in a:
print( i )
生成器:
def y ():
yield 1
def y ():
print('1')
yield 1
print('2')
yield 2
# a = (x for x in range(10))
# for i in a:
# print( i )
for i in y():
print(i)
斐波那契数列:
def f (x):
n, a, b = 0, 0, 1
while n < x :
print( b )
a, b = b ,a + b
n += 1
y = int (input(''))
f ( y )
: yield 的enxt 方法
def f (x):
n, a, b = 0, 0, 1
while n < x :
yield a
a, b = b ,a + b
n += 1
g = f (5)
print( g )
print( next(g) )
print( next(g) )
print( next(g) )
print( next(g) )
:send
def fo ():
print('123')
m = yield 1
print( m )
yield 2
n = fo()
n.send ( None ) ## 等于 next(b)
n.send ( 'abc' )
迭代器,: 生成器都是迭代器
l = [1,3,4,5]
b = iter(l)
: itter: 返回个可迭代对象
l = [1,3,4,5]
b = iter(l)
print(b)
print( next(b) )
for i in b:
print(i)
模块
1. time
import time
# time.sleep(2) # ****
# print(time.time()) # ****
# print( time.gmtime()) ## 世界标准时间
# print( time.localtime()) ## 电脑里的时间 ******
# print(time.clock())
st = time.localtime() ## 显示时间格式化 *********
print( time.strftime('%Y--%m--%d %H:%M:%S',st )) ##
print(time.strptime('2018--04--25 17:33:14', '%Y--%m--%d %H:%M:%S'))
a = time.strptime('2018--04--25 17:33:14', '%Y--%m--%d %H:%M:%S') ## 单独取出时间如 年
print( a[0])
print( a.tm_year)
print( time.ctime())
import datetime
print( datetime.datetime.now() )
2,random 随机函数
import random
print( random.random() )
print( random.randint(1,10) )
print( random.choice( 'hello') )
print( random.randrange( 1,10) )
3,os 系统操作
import os
print(os.getcwd()) ## 获取工作目录
os.chdir(r'c:users') ## 改变工作目录
print(os.curdir) ## 当前目录
print(os.pardir) ##
os.makedirs('a\b\c') ## 递归创建文件夹
os.mkdir('a') ## 创建文件夹
os.removedirs('a\b\c') ## 删除文件夹
os.removedirs('a\b\c') ## 递归删除文件夹
a = os.listdir( r'E:pycharm201804' ) ## 展示出目录里的全部
print( a )
os.remove( '1.png' ) ##删除文件
os.rename('set.py','装饰器.py') ## 重命名文件‘酒文件名’,‘新文件名’
q = os.stat('666.py') ## 获取文件信息
print(q)
print( os.sep ) ##
os.linesep ## 换行
os.environ ## 获取环境变量
os.path.dirname('201804/3.py') ## 获取文件所在的目录
os.path.join(a,b) ### 路径拼接
os.path.getatime() ## 最后一次存取时间
os.path.getmtime() ## 最后一次修改时间
4, sys
import sys
5, hashlib 加密
import hashlib
m = hashlib.md5 ## 加密算法
m.update( 'hello'.encode('utf8')) ##对 hello 加密
print( m.hexdigest() ) ## 加密后.
s = hashlib.sha256() ## 加密算法
模块调用
# 模块的调用: import 模块名 import 模块名 ,模块名 from 模块名 import 方法(函数名) from 模块名 import * from 模块名 import 方法(函数名)as 新方法 ## 包的调用 import 包名 import 模块名 import 包名.包名 import 模块名 import 包名.包名.模块名 import 方法 from 包名 import 模块名 __file__ 相对路径的内置变量 import os os.path.dirname( os.path.abspath(__file__) ) 上一级(得到绝对路径) if __name__ == '__main__':