生成器 python0 1 8 27 64_python 生成式和生成器
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2017/10/17 21:46
# @Author : lijunjiang
# @File : test.py
"""
列表生成式
一個用來生成列表的特定語法形式的表達式。可以對一組元素進行過濾或得到對列表元素進行處理后得到的結果
可以快速的根據已存在的可迭代對象推導出一個新的list
語法格式:
[exp for val in collection if condition]
執行過程:
先對傳入的列表進行for循環得到將符合條件的元素再進行if判斷返回給exp
執行exp表達式,最后將處理后的結果以列表的形式返回一個列表
"""
tuple_test = [x*x for x in xrange(10) if x*x%2 == 0]
print(type(tuple_test))
print(tuple_test)
# 執行結果:
#
# [0, 4, 16, 36, 64]
# 等價于
tuple_test1 = []
for i in xrange(10):
if i*i%2 == 0:
tuple_test1.append(i)
print(type(tuple_test1))
print(tuple_test1)
# # 執行結果:
#
# [0, 2, 4, 6, 8]
"""
生成器
在Python中,這種一邊循環一邊計算的機制,稱為生成器
生成器是按照某種算法不斷生成新的數據,直到滿足某一個指定的條件結束
每次只生成一個元素,不必創建完整的list,從而節省大量的空間
構造生成器的兩種方式:
1、使用類似列表生成式的方式生成 (2*n + 1 for n in range(3, 11)) 將生成式的[],換為()
2、使用包含yield的函數來生成
如果計算過程比較簡單,可以直接把列表生成式改成generator;
但是,如果計算過程比較復雜,就只能通過包含yield的函數來構造generator。
"""
# 使用類似于列表生成式的方式來構造生成器
print('使用類似于列表生成式的方式來構造生成器')
print('generatot = (x*x for x in xrange(10) if x*x%2 == 0)')
generatot = (x*x for x in xrange(10) if x*x%2 == 0)
print(type(generatot))
print(generatot)
for i in generatot:
print(i)
print('使用包含yield的函數構造生成器')
def func1():
for i in xrange(10):
if i*i%2 == 0:
yield i*i
generatot1 = func1()
print(type(generatot1))
print(generatot1)
for i in generatot1:
print(i)
# 執行結果:
# 使用類似于列表生成式的方式來構造生成器
# generatot = (x*x for x in xrange(10) if x*x%2 == 0)
#
# at 0x0000000002BA1480>
# 0
# 4
# 16
# 36
# 64
# 使用包含yield的函數構造生成器
#
#
# 0
# 4
# 16
# 36
# 64
"""
生成式和生成器的區別:
生成式直接返回了表達式的結果列表,
生成器返回的是一個對象,該對象包含了對表達式結果的計算引用, 通過循環可以直接輸出
生成器不會一次性列出所有的數據,當你用到的時候,在列出來,更加節約內存的使用率。
"""
"""
可迭代對象(Iterable)
即可直接用于for循環的對象統稱為可迭代對象(Iterable)。
類型有:list、tuple、dict、set、str、生成器
可以使用isinstance()來判斷一個對象是否是Iterable對象
迭代器(Iterator)
可以被next()函數調用并不斷返回下一個值的對象稱為迭代器:Iterator
Python中的Iterator對象表示的是一個數據流,
Iterator可以被next()函數調用被不斷返回下一個數據,直到沒有數據可以返回時拋出StopIteration異常錯誤。
可以把這個數據流看做一個有序序列,但我們無法提前知道這個序列的長度。
同時,Iterator的計算是惰性的,只有通過next()函數時才會計算并返回下一個數據
http://www.cnblogs.com/yyds/p/6281453.html
"""
# 實現99乘法表
def func3():
for i in xrange(1, 10):
for j in xrange(1, i+1):
print('{0}*{1}={2}'.format(j, i, i*j)),
print('\n')
func3()
#執行結果:
# 1*1=1
#
# 1*2=2 2*2=4
#
# 1*3=3 2*3=6 3*3=9
#
# 1*4=4 2*4=8 3*4=12 4*4=16
#
# 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
#
# 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
#
# 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
#
# 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
#
# 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
總結
以上是生活随笔為你收集整理的生成器 python0 1 8 27 64_python 生成式和生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正确的python变量名_在Python
- 下一篇: 用python写网络爬虫 第2版 pd_