码迷,mamicode.com
首页 > 编程语言 > 详细

Python笔记第3章,模块和模块的常用方法,函数式编程yield,三元运算Lambda表达式,内置涵数,常用模块

时间:2016-07-19 14:00:59      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:模块和模块的常用方法   函数式编程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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!