代码改变世界

初学Python-yield 三元运算 Lambda表达式 内置函数

2017-04-07 20:21  Eilleen-G  阅读(691)  评论(0编辑  收藏  举报

yield(保存函数的执行状态)

   一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

  yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。

#!usr/bin/env python
#coding:utf-8
def ReadLines():
    seek=0
    ''' 
    起始位置
'''
    while True:
        with open('E:/temp.txt','r')as f:
            f.seek(seek)
            data=f.readline()
            if data:
                seek=f.tell()
                '''
                读完的末位置 作为下次的首位置
                '''
                yield data
            else:
                return 

for item in ReadLines():
    
    print item

三元运算判断(简化代码)

temp=None
if 1>3:
    temp='gt'
else:
    temp='lt'
 #######################   
restult='gt' if 1>3 else 'lt'
print restult

Lambda表达式做运算(简化代码)

def foo(x,y,z):
    return x*y+z
print foo(1,3,4)

#############

temp=lambda x,y,z:x*y+z
print temp(1,3,4)

 内置函数

例如:reload(demo)注:demo是与main并列的file (package)下的module

#!usr/bin/env python
#coding:utf-8


a=[]
print dir()  #key  ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a']
print vars()  # key value  {'a': [], '__builtins__': <module '__builtin__' (built-in)>, '__file__': 'E:\\eclipse\\0409day01\\main\\index.py', '__package__': None, '__name__': '__main__', '__doc__': None}

a1=list()
b=()
b1=tuple()
d=()
d1=dict()

print type(a)#看变量是什么类型  <type 'list'>
print type(a1)
print type(b)#<type 'tuple'>


from file import demo
from file import demo#只执行一遍 demo Python 做了优化


reload(demo)#可以再次执行,即使上面已经执行过了


t1=1
t2=3334
print id(t1)#获内存地址
print id(t2)

  

 

print cmp(3,2)#做差
print abs(-9)
print bool(0)#false
print bool(2)#true
print divmod(9,4)#(2, 1)
print divmod(9,3)#(3, 0)分页
print pow(2,10)#指数,2的10次方

  

#!usr/bin/env python
#coding:utf-8

print range(2,10)#[2, 3, 4, 5, 6, 7, 8, 9]
print xrange(10)
for i in xrange(10):
    print i


print pow(2,10)#1024
print all([1,2,3,0])#False
print all([1,2,3,3])#True

print any([0,0,0,0])#False
print any([1,2,3,0])#True
print bool('')
print bool(None)
#### 用途 查询列表里有没有0和空 字符串


print chr(65)#A
print chr(66)#B
print chr(67)
print chr(68)
print chr(69)

print ord('A')#65
#######用途 动态生成验证码


print hex(2000)
print bin(2000)
print oct(2)
######进制转换




li=['手表','汽车','房子','']
for item in li:
    print item
for item in enumerate(li,1):
    print item[0],item[1]    
#####加序号


s='i am {0},{1}'
print s.format('Eilleen','xxx')

a='i am {0},{1}'
print a.format('Eilleen','xxx')
查0 验证码 进制转换

 

  

 1 ###########开发大型程序需要快速切换数据库#####################
 2 #####反射
 3 #不用import导入模块
 4  
 5 a='8*8'
 6 print eval(a)#里面可以用字符串
 7 
 8 import sqlserverhelper
 9 print sqlserverhelper.count()
10 #���л� 
11 import mysqlhelper
12 print mysqlhelper.count()
13 #和上面对比
14 #以字符串的形式导入模块
15 
16 temp='mysqlhelper'#'sqiserverhelper'
17 model=__import__(temp)
18 model.count
19 #以字符串的形式执行函数
20 temp='mysqlhelper'#'sqiserverhelper'
21 func='count'
22 model=__import__(temp)
23 function=getattr(model,func)
24 print function()
反射