标签:模块和模块的常用方法 函数式编程yield 三元运算lambda表达式 内置涵数 常用模块
<--目录-->
模块和模块的常用方法
函数式编程
yield
三元运算
Lambda表达式
内置涵数
常用模块
【模块和模块的常用方法】
至关重要的__init__.py #包一定要有这个__init__.py文件,他才是包,这样才能通过form 包名
import 模块名(.py文件名)来去引用这个包的某个模块的某个函数功能
判断是否为主文件:__name__
if __name__ == ‘__main__‘
当前文件路径: __file__
当前文件描述: __doc__
1)if __name__ ==
‘__main__‘
例子1:
在main的包下面,有着index模块
在file的包下面,有着demo模块
cat index.py#!/usr/bin/env python#coding:utf-8print __name__ python index.pyprint __main__ cat demo.py#!/usr/bin/env python#coding:utf-8print __name__ python demo.pyprint __main__ 例子2:cat index.py#!/usr/bin/env python#coding:utf-8from file import demoprint ‘index‘,__name__ cat demo.py#!/usr/bin/env python#coding:utf-8print ‘demo‘,__name__def Foo(): print "老狗去砍柴" python index.pydemo,file.demoindex,__main__
总结:通过if __name__ ==
‘__main__‘:
来判断当前这个.py脚本是不是主程序,如果是主程序就执行,好处就是当黑客来攻击的时候,来调用我的主程序他调用不上
2)当前文件路径: __file__
3)当前文件描述: __doc__
例子:
[root@localhost opt]# pwd;ls /opt/ test.py cat test.py #!/usr/bin/env python #coding:utf-8 ‘‘‘ This is g test @author:wsyht ‘‘‘
4)print __file__ #查看当前文径路径
5)print __doc__ #查看模块(.py文件)的注释
[root@localhost opt]# python test.py test.py This is g test@author:wsyht
【函数式编程】
参数 def Fun(arg,*args,**kargs):
默认参数 print
arg
可变参数 print args
print kargs
返回值 return
‘success‘
1)默认参数和返回值示例
例子1:
def foo(name): print name,‘去砍柴‘ foo(‘wsyht‘) foo(‘jenkins‘) foo(‘peter‘)
例子2:
def login(username): if username == "wsyht": return ‘登陆成功‘ else: return ‘登陆失败‘ def detail(user): print user,‘验证成功‘ if __name__ == ‘__main__‘: user= raw_input(‘请输入用户名:‘) res = login(user) #检查用户是否登陆成功 if res == "登陆成功" detail(user) #显示详细信息 else: print "没奖金了"
例子3:
def foo(name,action=‘砍柴‘,where=‘‘): 设置默认值=砍柴,可以加多个默认参数,但默认参数的一定要放在最后面 print name,‘去‘,action,where foo(‘wsyht‘,‘砍柴‘) foo(‘jenkins‘,‘吃饭‘) #不设置第二个值,就会使用设置好的默认参数"砍柴" foo(‘peter‘,where=‘上海‘) #默认按位置传参,指定where=‘上海‘,就是可以不用按顺序传,给他的值就是上海,不管上面where的位置在哪 foo(‘jim‘,where=‘上海‘,action="oo") #默认按位置传参,指定where=‘上海‘,就是可以不用按顺序传,给他的值就是上海,不管上面where的位置在哪
2)可变参数示例
例子4:
#!/usr/bin/env Python #coding:utf-8 ‘‘‘ def show1(arg): for item in arg: print item def show2(arg1,arg2): print arg1,arg2 #show1([‘Lyang‘,‘wsyht‘]) show2(‘Liyang‘,‘zhangsan‘) def show(*arg): #加一个*你就可以加N个参数 for item in arg: print item show(‘wsyht‘,‘tom‘,‘peter‘,‘jenkins‘,‘jack‘) ‘‘‘ ‘‘‘ def show(**kargs): for item in kargs.items(): print item show(name=‘wsyht‘,age=‘26‘) ‘‘‘ #以元组方式传进去 def show(**kargs): for item in kargs.items(): print item user_dict={‘k1‘:123,‘k2‘:456} show(**user_dict) #元组方式传进去前面要加两个*
【yield的使用】
代码示例1:
#!/usr/bin/env python #coding:utf-8 ‘‘‘ print range(10) print xrange(10) for item in xrange(10): #便 利才生成数字 print item ‘‘‘ def foo(): yield 1 #eclipse上打上断点,debug测试 yield 2 yield 3 yield 4 yield 5 re = foo() #print re #调用的是生成器 for item in re: #便利的时候才能使用re print item
代码示例2:
#!/usr/bin/env python #coding:utf-8 def WsyhtReadlines(): seek = 0 while True: with open(‘F:/wsyht.txt‘,‘r‘) as f: f.seek(seek) data = f.readline() #读取一行 if data: seek = f.tell() yield data else: return #如果return了,那么整个函数将退出 #print WsyhtReadlines() #这样输出就是一个生成器 for item in WsyhtReadlines(): print item ‘‘‘ f = open(‘d:/temp.txt,‘r‘) f.read() f.close() with open(‘d:/temp.txt‘,‘r‘) as f: #这样写就不需要再对文件close了 print ‘xxxx‘ print ‘ok‘ ‘‘‘
【三元运算和Lambda表达式】
1)三元运算
代码实例:
result = ‘gt‘ if 1>3 else ‘lt‘ print result 例子: #!/usr/bin/env python #coding:utf-8 temp = None if 1>3: temp = ‘gt‘ else: temp = ‘lt‘ print temp #上面方法实现跟下面代码方法实现效果一样 result = ‘gt‘ if 1>3 else ‘lt‘ print result
2)Lambda表达式
代码实例:
a = lambda x,y:x+y print a(4,10)
例子:
#!/usr/bin/env pythondef foo(x,y): return x+yprint foo(16,10) temp = lambda x,y:x+y print temp(16,10) ‘‘‘temp = lambda x:x*x print temp(4)‘‘‘‘‘‘temp = lambda x,y,z:x+y+z print temp(1,3,5)‘‘‘ 其它示例:>>> [i*2 for i in range(10)] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]f>>> map(lambda x:x*2, range(10))[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]>>> map(lambda x:x**x, range(10)) [1, 1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]>>>
【内置函数】
help() #查看帮助
dir()
#把相应的key列出来,所有的内置函数
vars()
#列出所有key和Values,所有的内置函数
type() #查看类型
import temp
#导入模块
reload(temp) #重复导入模块
id() #查看内存地址
#help,dir(),vars(),type()演示
>>> a = [] #它是一个类,调用一个类来创建类表 >>> a1 = list() >>> help(a) #查看帮助 >>> print dir() #把相应的key列出来,所有的内置函数 >>> print vars() #列出所有key和Values,所有的内置函数 >>> print type(a) #查看类型 >>> print type(a1) #查看类型
#reload(demo)演示
#file包下有一个demo.py模块文件
#main包下有一个index.py文件
#cat demo.py #!/usr/bin/env python #coding:utf-8 print ‘demo.py‘ #python index.py #python index.py #!/usr/bin/env python #coding:utf-8 from file import demo #当导入的时候就会执行一篇demo模块里面的所有代码 #from file import demo #Python下再用重复的代码导入相同的模块是不会导入的,他只导入一次 #如果想导两次,就要用reload(demo) from file import demo reload(demo)
#id演示,查看所占用的内存空间
>>> t1=123 >>> t2=888 >>> print id(t1) 28244048 >>> print id(t2) 28560048
cmp() 判断前后值大小,前大-1,后大1,同大0
abs() 求觉对值
bool()
0为False,其它为True
divmod() 求商取余
man() 求最大值
min() 求最小值
sum()
求和
pow() 求次方
>>> cmp(2,3) #后面大负1 -1 >>> cmp(5,3) #前面大正1 1 >>> cmp(5,5) #等大出零 0 >>> print abs(-9) #求觉对值 9 >>> print bool(0) #求布尔值 False >>> print bool(1) True >>> print bool(15) True >>> print bool(-3) True >>> print divmod(9,4) #求商取余 (2, 1) >>> print divmod(14,4) (3, 2) >>> print divmod(15,3) (5, 0) >>> print max([11,22,33,333]) #求最大值 333 >>> print min([11,22,33,333]) #求最小值 11 >>> print sum([11,22,33]) #求和 66 >>> print pow(2,3) #2的3次方 8
all() 一假则假,全真才真
any() 一真则真,全假才假
>>> print all([1,2,3,0]) #一假则假 False >>> print all([1,2,3,1]) #全真则真 True >>> print any([0,0,0,0]) #全假则假 False >>> print any([1,0,0,0]) #一真则真 True >>> print any([1,2,3,1]) True >>> print bool(‘‘) False >>> print bool(None) False
ord() ASCALL码对应的数字
hex() 十六进制转换
oct()
八进制转换
bin() 二进制转换
>>> print chr(65) #ASCALL码对应的字符 A >>> print chr(66) B >>> print chr(67) C >>> print chr(68) D >>> print chr(69) E >>> print ord(‘A‘) #ASCALL码对应的数字 65 >>> print ord(‘B‘) 66 >>> print hex(2000) #十六进制转换 0x7d0 >>> print oct(2000) #八进制转换 03720 >>> print bin(2) #二进制转换 0b10
enumerate() 加序列号
format() 格式化输出
>>> li = [‘手表‘,‘汽车‘,‘房‘] >>> for item in li:print item ... 手表 汽车 房 >>> for item in enumerate(li):print item #enumerate是加序列号 ... (0, ‘\xe6\x89\x8b\xe8\xa1\xa8‘) (1, ‘\xe6\xb1\xbd\xe8\xbd\xa6‘) (2, ‘\xe6\x88\xbf‘) >>> for item in enumerate(li,1):print item #括号第二个参数是指起始值 ... (1, ‘\xe6\x89\x8b\xe8\xa1\xa8‘) (2, ‘\xe6\xb1\xbd\xe8\xbd\xa6‘) (3, ‘\xe6\x88\xbf‘) >>> for item in enumerate(li,3):print item ... (3, ‘\xe6\x89\x8b\xe8\xa1\xa8‘) (4, ‘\xe6\xb1\xbd\xe8\xbd\xa6‘) (5, ‘\xe6\x88\xbf‘) >>> for item in enumerate(li,1):print item[0],item[1] ... 1 手表 2 汽车 3 房 >>> s=‘My Name {0} {1}‘ >>> print s.format(‘is‘,‘wsyht‘) My Name is wsyht >>> s=‘My Name {0},{1}‘ >>> print s.format(‘is‘,‘wsyht‘) My Name is,wsyht
#调用函数的两种方法
def function(arg): print arg function(‘wsyht‘) #第一种调用方法 apply(function,(‘wsyht‘)) #执行函数,第二种调用方法,这种应用不广泛,知道就好
#map的使用,所有数进行相加,相减,相乘等
>>> print map(lambda x:x+1,[1,2,3]) #all[2, 3, 4] >>> li = [11,22,33] #第一种方法>>> temp=[]>>> for item in li:temp.append(item + 100)... >>> print temp[111, 122, 133] >>> def foo(arg):return arg + 100 #第二种方法... >>> li = [11,22,33]>>> temp=[]>>> for item in li:temp.append(foo(item))... >>> print temp[111, 122, 133] >>> def foo(arg):return arg + 100 #使用map的方法... >>> li = [11,22,33]>>> temp = map(foo,li)>>> print temp[111, 122, 133] >>> li = [11,22,33]>>> temp = map(lambda arg:arg+100,li) #最简单的map方法把他便利出来>>> print temp[111, 122, 133]
#filter的使用,过滤条件,只有是True序列的,才会对他进行相加,相减操作
#!/usr/bin/env python #coding:utf-8 li = [2,5,11,22,33] def foo(arg): if arg<22: return True else: return False temp = filter(foo,li) print temp
#reduce的使用,累加,累乘操作
>>> li=[2,5,7] >>> print reduce(lambda x,y:x+y,li) #最少要有两个变量x,y 14 >>> print reduce(lambda x,y:x*y,li) 70
#zip的使用,把他们的列表的每一列拼接成一组打印出来
>>> x = [1,2,3] >>> y = [4,5,6] >>> z = [7,8,9] >>> q = [1,3,5] >>> print zip(x,y,z,q) [(1, 4, 7, 1), (2, 5, 8, 3), (3, 6, 9, 5)] >>> q = [1,3,5] >>> x = [2,4,6] >>> z = [2,4] >>> print zip(q,x,z) [(1, 2, 2), (3, 4, 4)]
#eval的使用
>>> a = ‘8*8‘ >>> print a 8*8 >>> print eval(a) 64
#反射,__import__()的使用,通过字符串的形式去导入模块,并以字符串的形式执行函数
附加知识:
getattr()
#获取模块的函数数
hasattr() #判断模块有没有这个函数
delattr() #删除这个模块的某个函数
#查看帮助
#import os
#help(os)
演示1:通过字符串的形式去导入模块
>>> temp = ‘sys‘ >>> model = __import__(temp) >>> print model.path [‘‘, ‘/usr/local/python2.7/lib/python27.zip‘, ‘/usr/local/python2.7/lib/python2.7‘, ‘/usr/local/python2.7/lib/python2.7/plat-linux2‘, ‘/usr/local/python2.7/lib/python2.7/lib-tk‘, ‘/usr/local/python2.7/lib/python2.7/lib-old‘, ‘/usr/local/python2.7/lib/python2.7/lib-dynload‘, ‘/usr/local/python2.7/lib/python2.7/site-packages‘]
#演示2:
main包下有三个模块,index.py ,mysqlserver.py,sqlserver.py
cat mysqlserver.py #!/usr/bin/env python def count(): return 2
cat sqlserver #!/usr/bin/env python def count(): return 2
#index.py例子1,通过字符串的形式去导入模块
#!/usr/bin/env python ‘‘‘ import mysqlserver print mysqlserver.count() import sqlserver print sqlserver.count() ‘‘‘ temp = ‘mysqlserver‘ #动态切换模块,模块下执行的方法一样,当一个宕掉了,可以快速切换,比上述方法方便快速 model = __import__(temp) model.count()
#index.py例子2,
cat index.py temp = ‘mysqlserver‘ #模块名字 func = ‘count‘ #函数名字 model = __import__(temp) #以字符串的形式导入模块 function = getattr(model,func) #获取model模块找func函数 print function() #以字符串的形式执行函数 #val = hasattr(model,‘version‘) #判断model模块里有没有version这个函数 #print val #dels = delattr(model,‘count‘) #删除model模块里的count函数 #print dels
#用在开发大型程序,随时可以切换数据库的场景下
【常用模块】
本文出自 “wsyht90的博客” 博客,请务必保留此出处http://wsyht2015.blog.51cto.com/9014030/1827654
Python笔记第3章,模块和模块的常用方法,函数式编程yield,三元运算Lambda表达式,内置涵数,常用模块
标签:模块和模块的常用方法 函数式编程yield 三元运算lambda表达式 内置涵数 常用模块
原文地址:http://wsyht2015.blog.51cto.com/9014030/1827654