一、三元运算(式)
对于一般简单的if else条件判断句可以用三元运算来表示
具体模式为:
if condition:
expr1
else:
expr2
等价于:
expr1 if condition else expr2
解释:如果if condition条件成立就执行expr1表达式,否则就执行else expr2表达式
示例①
>>> if 2 == 2:
... name = 'cool'
... else:
... name ='hot'
...
>>> name = 'cool' if 2==2 else 'hot'
>>> print name
cool
>>>
二、lambda表达式:
对于简单的函数可以用另外一种方式来代替,即lambda
比如有如下函数:
>>> def fun(arg):
... return arg + arg
...
>>>
>>> result = fun(100)
>>> print result
200
>>>
定义一个变量f_lambda,将lambda arg:arg+1赋予f_lambda
>>> f_lambda = lambda arg:arg +1
>>> result = f_lambda(111)
>>> print result
112
>>>
也可以用其他表达式:
>>> test = lambda a:a**2
>>> test_result = test(3)
>>> print test_result
9
>>>
从上面的例子可以看出,lambda后面表达式可以随意定义,只要符合Python的语法要求。
lambda表达式:
①用于处理简单逻辑
②会自动返回数据
三、内置函数map
map的作用是对序列中每个元素进行操作,然后输出新的序列
>>> num1 = [10,9,8,7,6]
>>> num2 = map(lambda a:a**2,num1)
>>> print num2
[100, 81, 64, 49, 36]
>>>
>>> num3 = [1,2,3,4,5]
>>> num4 = map(lambda a,b:a -b,num1,num3)
>>> print num4
[9, 7, 5, 3, 1]
>>>
或者
>>> num = [12,33,55,85]
>>> def func(arg):
... return arg + 10
...
>>> new_num = map(func,num)
>>> print new_num
[22, 43, 65, 95]
>>>
>>> new_num = []
>>> for item in num:
... new_item = item + 10
... new_num.append(new_item)
...
>>>
>>> print new_num
[22, 43, 65, 95]
filter的作用的是将序列中满足条件的过滤出来然后形成新的序列
>>> num1 = [10,9,8,7,6]
>>> tmp = filter(lambda arg:arg >5,num1)
>>> print tmp
[10, 9, 8, 7, 6]
>>>
或者
>>> tmp2 = filter(lambda n:n >5,num1)
>>> print tmp2
[10, 9, 8, 7, 6]
>>>
或者
#!/usr/bin/env python
# -*- coding:utf8 -*-
num = [11,22,0,33]
print filter(None,num)
[root@Python day004]# python lam.py
[11, 22, 33]
[root@Python day004]#
[root@Python day004]# cat lam.py
#!/usr/bin/env python
# -*- coding:utf8 -*-
num = [11,22,0,33,""]
print filter(None,num)
[root@Python day004]# python lam.py
[11, 22, 33]
[root@Python day004]# cat lam.py
#!/usr/bin/env python
# -*- coding:utf8 -*-
num = [11,22,0,33,"",False]
print filter(None,num)
[root@Python day004]# python lam.py
[11, 22, 33]
reduce的作用是对序列内的所有元素进行操作
>>> num1 = [10,9,8,7,6]
>>> result =reduce(lambda arg1,arg2:arg1+arg2,num1)
>>> print result
40
>>> num5 = [1,2,3,4,5,6]
>>> sum = reduce(lambda a,b:a+b,num5)
>>> print sum
21
>>>
# reduce的第一个参数,函数必须要有两个参数
# reduce的第二个参数,要循环的序列
# reduce的第三个参数,初始值
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def func():
pass
return 1
return 2
return 3
result = func()
print result
执行以上代码,输出结果:
D:\Python27\python.exe C:/Users/ryan/PycharmProjects/day04/yield.py
1
Process finished with exit code 0
发现函数返回的只有1,后面的2、3都没有返回,这里说明return语句结束后,代表函数体生命周期结束,接下来讲return替换成yield
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def func():
pass
yield 1
yield 2
yield 3
for i in func():
print i
输出结果:
1 2 3
1、对比range和xrange的区别
有如下例子:
>>> print range(8)
[0, 1, 2, 3, 4, 5, 6, 7]
>>> print xrange(8)
xrange(8)
>>>
从上面可以发现,range和xrange的区别是:
range可以生成一个列表,即在内存中创建指定的数字,而xrange则不会,接着往下看:
>>> for n in xrange(8):
... print n
...
0
1
2
3
4
5
6
7
>>>
xrange只有在进行循环的时候才会创建数字,即在迭代的时候才会去创建;
>>> def nrange(num):
... temp = -1
... while True:
... temp = temp +1
... if temp >= num:
... return
... else:
... yield temp
...
>>> nrange(10)
<generator object nrange at 0x7fe42d0bd820>
>>>
2、文件操作的read和xreadlines的区别
①read会读取所有内容到内存中
②xreadlines则只会在循环迭代时才获取数据
def NReadlines():
with open('log','r') as f:
while True:
line = f.next()
if line:
yield line
else:
return
for i in NReadlines():
print i
注:基于next自定义生成器NReadlines
def NReadlines():
with open('log','r') as f:
seek = 0
while True:
f.seek(seek)
data = f.readline()
if data:
seek = f.tell()
yield data
else:
return
for item in NReadlines():
print item
基于seek和tell自定义生成器NReadlines
七、装饰器
装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或者类,使用装饰器可以在函数执行前和执行后添加相应的操作
def wrapper(func):
def result():
print 'before'
func()
print 'after'
return result
@wrapper
def foo():
print 'foo'
import functools
def wrapper(func):
@functools.wraps(func)
def wrapper():
print 'before'
func()
print 'after'
return wrapper
@wrapper
def foo():
print 'foo'
示例代码:
#!/usr/bin/env python
#coding:utf-8
def Before(request,kargs):
print 'before'
def After(request,kargs):
print 'after'
def Filter(before_func,after_func):
def outer(main_func):
def wrapper(request,kargs):
before_result = before_func(request,kargs)
if(before_result != None):
return before_result;
main_result = main_func(request,kargs)
if(main_result != None):
return main_result;
after_result = after_func(request,kargs)
if(after_result != None):
return after_result;
return wrapper
return outer
@Filter(Before, After)
def Index(request,kargs):
print 'index'
if __name__ == '__main__':
Index(1,2)
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。