python-函数式编程,反射,random,md5,pickle,json,re,time

函数式编程的优点:

可扩展性、可复用性(不修改以前代码)、可阅读性(初学者通俗易懂)


__init__:作为python包文件使用,否则只是个文件夹

__name__:文件内部调用时__name__==‘ __main__‘;外部调用时,__name__==文件名

__file__:当前文件路径

1、默认参数使用

>>> def person(name,action=‘eat...‘,where=‘beijing‘):
...     print name,action,‘in ‘+where
...
>>> person(‘cxiong‘)
cxiong eat... in beijing
>>> person(‘xmzhang‘,‘sleep‘)
xmzhang sleep in beijing
>>> person(‘cxiong‘,where=‘shanghai‘,action=‘work‘)
cxiong work in shanghai
>>> person(‘cxiong‘,‘work‘,‘wuhan‘)
cxiong work in wuhan

2、可变参数*arg包装为列表传入函数

>>> def show(*arg):
...     for item in arg:
...         print item
...
>>> show(‘cxiong‘,‘xmzhang‘)
cxiong
xmzhang
>>>

3、可变参数**kargs包装为字典传入函数

>>> def person(**kargs):
...      for item in kargs.items():
...          print item
...
>>> person(name=‘cxiong‘,age=29)
(‘age‘, 29)
(‘name‘, ‘cxiong‘)
>>> person(name=‘xmzhang‘,age=29)
(‘age‘, 29)
(‘name‘, ‘xmzhang‘)

将字典传输时,需要使用**kargs变量;

>>> user_dict={‘cxiong‘:29,‘xmzhang‘:29}
>>> person(**user_dict)
(‘cxiong‘, 29)
(‘xmzhang‘, 29)
>>> person(user_dict)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: person() takes exactly 0 arguments (1 given)
>>>

4、yield用法

xrange迭代调用时才创建对象,延时创建对象;

>>> for i in xrange(10):
...     print i
...
0
1
2
3
4
5
6
7
8
9
>>>

>>> def y():
...     yield 1
...
>>> y1=y()
>>> print y1
<generator object y at 0x0293C288>

>>> for item in y1:
...     print item
...
1
>>> def y():
...     yield 1
...     yield 2
...     yield 3
...     yield 4
...     yield 5
...
>>> y2=y()
>>> print y2
<generator object y at 0x02A31670>
>>> for item in y2:
...     print item
...
1
2
3
4
5
>>>

>>> def AlexReadlines():
...     seek=0
...     while True:
...         with open(‘c:/cc/abc.html‘,‘r‘) as f:
...             f.seek(seek)
...             data=f.readline()
...             if data:
...                 seek=f.tell()
...                 yield data
...             else:
...                 return
...
>>> for item in AlexReadlines():
...     print item
...
<h1>hello cccccccccc</h1>

>>> print AlexReadlines()
<generator object AlexReadlines at 0x02A32CD8>

with open不需要主动关闭文件流

>>> f=open(‘c:/cc/abc.html‘)
>>> f.read()
‘<h1>hello cccccccccc</h1>‘
>>> f.close()
>>>

>>> with open(‘c:/cc/abc.html‘) as f: 
...    f.read()
...
‘<h1>hello cccccccccc</h1>‘
>>>

def login(username):

if username==’alex’:

return ‘登陆成功’

else:

return ‘登陆失败’

yield可以实现函数执行过程未完成时不用等待函数的执行结果,即不阻塞;当工程需要调用函数时,直接调用next()方法即可;后面再细讲

5、lambda函数

result= ‘gt’ if 1>3 else ‘lt’

等价于

tmp=None

if 1>3:

tmp=’gt’

else:

tmp=’lt’

匿名函数只能调用一次;

tmp=lambda x,y:x+y

相当于

def sum(x,y)

return x+y

http://www.cnblogs.com/wupeiqi/articles/4276448.html

6、内置函数

>>> map(lambda x:x+1,[1,2,3])            #all序列
[2, 3, 4]
>>> filter(lambda x:x==1,[1,23,44])     #True序列
[1]
>>> reduce(lambda x,y:x+y,[1,2,3])     #累加
6
>>>

enumerate将其组成一个索引序列,利用它可以同时获得索引和值

>>> l1=[‘钱‘,‘房子‘,‘女人‘]
>>> for item in enumerate(l1):     
...     print item
...
(0, ‘\xc7\xae‘)
(1, ‘\xb7\xbf\xd7\xd3‘)
(2, ‘\xc5\xae\xc8\xcb‘)
>>> for item in enumerate(l1):
...     print item[0],item[1]
...
0 钱
1 房子
2 女人
>>>

占位符{},format替换占位符

>>> s=‘i am {0},{1}‘
>>> s.format(‘cxiong‘,29)
‘i am cxiong,29‘

字符串作为表达式运算

>>> a=‘8+8‘
>>> eval(a)
16
>>> b=‘4*2‘
>>> eval(b)
8

7、反射

__import__:字符串的形式导入模块

>>> tmp=‘sys‘
>>> model=__import__(tmp)
>>> model.path
[‘‘, ‘C:\\Python27\\lib\\site-packages\\pip-8.0.3-py2.7.egg‘, ‘C:\\Python27\\lib\\site-packages\\paramiko-1.16.0-py2.7.egg‘, ‘C:\\WINDOWS\\SYSTEM32\\python27.zip‘, ‘C:\\Python27\\DLLs‘, ‘C:\\Python27\\lib‘, ‘C:\\Python27\\lib\\plat-win‘, ‘C:\\Python27\\lib\\lib-tk‘, ‘C:\\Python27‘, ‘C:\\Python27\\lib\\site-packages‘]
>>>

getattr:字符串的形式执行函数

mysql,sqlserver

>>> f=getattr(model,‘path‘)
>>> f
[‘‘, ‘C:\\Python27\\lib\\site-packages\\pip-8.0.3-py2.7.egg‘, ‘C:\\Python27\\lib\\site-packages\\paramiko-1.16.0-py2.7.egg‘, ‘C:\\WINDOWS\\SYSTEM32\\python27.zip‘, ‘C:\\Python27\\DLLs‘, ‘C:\\Python27\\lib‘, ‘C:\\Python27\\lib\\plat-win‘, ‘C:\\Python27\\lib\\lib-tk‘, ‘C:\\Python27‘, ‘C:\\Python27\\lib\\site-packages‘]
>>>

8、常用模块random

>>> import random
>>> random.random()
0.20107276223352322
>>> random.random()
0.08696208484961188
>>> random.random()
0.2274291961816528

>>> random.randint(1,5)
5
>>> random.randint(1,5)
1
>>> random.randint(1,5)
1
>>> random.randint(1,5)
4
>>> random.randint(1,5)
3
>>>

应用场景:生成验证码

code=[]

>>> for i in range(4):
...     if i ==random.randint(1,4):
...         print random.randint(1,4)
...     else:
...         tmp=random.randint(65,90)
...         print chr(tmp)

9、常用模块hashlib:md5加密

>>> import hashlib
>>> hash=hashlib.md5()    #md5对象
>>> hash.update(‘admin‘)
>>> hash.hexdigest()
‘21232f297a57a5a743894a0e4a801fc3‘
>>> hash.hexdigest()

10、常用模块:序列化-pickle

序列化:二进制格式将Python对象进行格式化为字符串形式;

反序列化:可以将加密的字符串转化为原有对象

用途及作用:只能在python中使用;数据存储,将python所有的对象(类、函数、字典、列表等)序列化为文件进行保存;

python与python程序之间内存空间数据交互;因为硬盘中只能存放字符串,无法存放数据对象;

>>> import pickle
>>> l1=[‘cxiong‘,11,22,‘ok‘,‘xmzhang‘]
>>> pickle.dumps(l1)
"(lp0\nS‘cxiong‘\np1\naI11\naI22\naS‘ok‘\np2\naS‘xmzhang‘\np3\na."
>>> s1=pickle.dumps(l1)
>>> s1
"(lp0\nS‘cxiong‘\np1\naI11\naI22\naS‘ok‘\np2\naS‘xmzhang‘\np3\na."
>>> type(s1)
<type ‘str‘>
>>> l1=pickle.loads(s1)
>>> l1
[‘cxiong‘, 11, 22, ‘ok‘, ‘xmzhang‘]

In [17]: pickle.dump(l1,open(‘/tmp/1.txt‘,‘w‘))

In [18]: exit
[[email protected] ~]$ cat /tmp/1.txt
(lp0
S‘cxiong‘
p1
aI11
aI22
aS‘ok‘
p2
aS‘xmzhang‘
p3
a.

[[email protected] ~]$

In [2]: pickle.load(open(‘/tmp/1.txt‘,‘r‘))
Out[2]: [‘cxiong‘, 11, 22, ‘ok‘, ‘xmzhang‘]

11、常用模块:序列化-json

json:所有语言都支持的数据格式;json只能序列化常规的对象(字典、列表);json序列化后,字符串格式可见

json与pickle的区别

In [5]: name_dict={‘name‘:‘cxiong‘,‘age‘:29}

In [6]: json.dumps(name_dict)
Out[6]: ‘{"age": 29, "name": "cxiong"}‘

In [7]: pickle.dumps(name_dict)
Out[7]: "(dp0\nS‘age‘\np1\nI29\nsS‘name‘\np2\nS‘cxiong‘\np3\ns."

12、常用模块re

字符:

\d:数字

\w:字母

\t:空白

次数:

*:

+:

?:

{m}:

{m,n}:

match从头开始匹配;search全局匹配;只匹配第一个

In [18]: r1=re.match(‘\d+‘,‘asdfasd123asdfwe32‘)

In [19]: r2=re.search(‘\d+‘,‘asdfasd123asdfwe32‘)

In [20]: r1

In [21]: r2
Out[21]: <_sre.SRE_Match at 0x2e28370>

In [22]: r1.group()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-22-d8a389c401ef> in <module>()
----> 1 r1.group()

AttributeError: ‘NoneType‘ object has no attribute ‘group‘

In [23]: r2.grou
r2.group      r2.groupdict  r2.groups

In [23]: r2.group()
Out[23]: ‘123‘

findall匹配所有模式

In [24]: r3=re.findall(‘\d+‘,‘asdfasd123asdfwe32‘)

In [25]: r3
Out[25]: [‘123‘, ‘32‘]

compile编译模式

In [1]: import re

In [3]: com=re.compile(‘\d+‘)

In [4]: type(com)
Out[4]: _sre.SRE_Pattern

In [5]: com.findall(‘asdf123aadsf3454aafadsf523‘)
Out[5]: [‘123‘, ‘3454‘, ‘523‘]

groups()获取匹配组内容

In [6]: r2=re.search(‘(\d+)asdf(\d+)‘,‘1234asdf2345‘)

In [7]: r2.group()
Out[7]: ‘1234asdf2345‘

In [8]: r2.groups()
Out[8]: (‘1234‘, ‘2345‘)

资料:

https://deerchao.net/tutorials/regex/regex-1.htm

13、常用模块:time

三种表现形式:

时间戳:1970年1月1日之后的秒

元组
包含了:年、日、星期等...time.struct_time

格式化的字符串   2014-11-1111:11print time.time()

In [9]: import time

In [10]: time.time()
Out[10]: 1494069737.874593

In [11]: time.gmtime()
Out[11]: time.struct_time(tm_year=2017, tm_mon=5, tm_mday=6, tm_hour=11, tm_min=26, tm_sec=8, tm_wday=5, tm_yday=126, tm_isdst=0)

In [14]: time.strftime(‘%Y-%m-%d %H:%M:%S‘)
Out[14]: ‘2017-05-06 04:28:22‘

字符串格式--->元组格式

In [16]: time.strptime(‘2017-05-06‘,‘%Y-%m-%d‘)
Out[16]: time.struct_time(tm_year=2017, tm_mon=5, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=126, tm_isdst=-1)

元组格式--->时间戳格式

In [17]: time.localtime()
Out[17]: time.struct_time(tm_year=2017, tm_mon=5, tm_mday=6, tm_hour=4, tm_min=30, tm_sec=56, tm_wday=5, tm_yday=126, tm_isdst=1)

In [18]: time.mktime(time.localtime())
Out[18]: 1494070270.0

时间: 2025-01-16 11:27:26

python-函数式编程,反射,random,md5,pickle,json,re,time的相关文章

深入浅出 Python 函数式编程

1.函数式编程的定义与由来 如果程序中的函数仅接受输入并产生输出,即输出只依赖于输入,数据不可变,避免保存程序状态,那么就称为函数式编程(Functional Programming,简称FP,又称泛函编程). 这种风格也称声明式编程(Declarative Programming),与之相对的是指令式编程(Imperative Programming),后者中的对象会不断修改自身状态.函数式编程强调程序的执行结果比执行过程更重要,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算

【人生苦短 Python当歌】——Python函数式编程01

对Python有一定了解的人应该知道,Python并不是一门函数式编程语言,而是一门支持多种范式的语言,这也使得在Python中也能实现函数式编程, 对于学习到Python函数式编程的朋友,在这里推荐大家看一本名字叫<Python函数式编程>(Functional Programming in Python)从这本书中你应该能收获不少: 怎么说呢,函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就把复杂的任务分解成简单的任务,这种就称为面向过程的程序设

Python 函数式编程之迭代器、生成器及其应用

python 标准库中提供了 itertools, functools, operator三个库支持函数式编程,对高阶函数的支持,python 提供 decorator 语法糖. 迭代器 (iterator)和生成器(generator)概念是 python 函数式编程的基础,利用迭代器和生成器可以实现函数式编程中经常用到的 map(), filter(), reduce() 等过程以及 itertools, functools 中提供的绝大部分功能. 1.迭代器和生成器基础(next, ite

python函数式编程,列表生成式

1.python 中常见的集中存储数据的结构: 列表 集合 字典 元组 字符串 双队列 堆 其中最常见的就是列表,字典. 2.下面讲一些运用循环获取字典列表的元素 1 >>> dic={'name':'zhangsan','age':24,'city':'jinhua'} 2 >>> for key,value in dic.items(): 3 print(key,value) 4 5 6 name zhangsan 7 age 24 8 city jinhua 循环

我是如何开始去了解Python函数式编程--Python函数式编程初涉

Python函数式编程 1. 开始我们会了解什么是函数式编程: 函数:function 函数式:functional,一种编程范式 函数式编程特点:把计算视为函数而非指令,贴近计算 纯函数式编程:不需要变量,没有副作用,测试简单,支持高阶函数,代码简洁 Python支持的函数式编程特点: 不是纯函数式编程:允许有变量 支持高阶函数:函数也可以作为变量传入 支持闭包:有了闭包就能返回函数 有限度的支持匿名函数 2. 高阶函数 变量可以指向函数,函数名其实就是指向函数的变量,而高阶函数其实就是可以接

Python 函数式编程学习

描述:通过将函数作为参数,使得功能类似的函数实现可以整合到同一个函数. Before 1 def getAdd(lst): 2 result = 0 3 for item in lst: 4 result += item 5 return result 6 7 def getMul(lst): 8 result = 1 9 for item in lst: 10 result *= item 11 return result 12 13 print getAdd([1,2,3,4]) 14 pr

(转)Python函数式编程——map()、reduce()

转自:http://www.jianshu.com/p/7fe3408e6048 1.map(func,seq1[,seq2...]) Python 函数式编程中的map()函数是将func作用于seq中的每一个元素,并用一个列表给出返回值.如果func为None,作用通zip().当seq只有一个时,将func函数作用于这个seq的每一个元素上,得到一个新的seq. 举个例子来说明,(假设我们想要得到一个列表中数字%3的余数,那么可以写成下面的代码): >>> print map(la

Python函数式编程——map()、reduce()

文章来源:http://www.pythoner.com/46.html 提起map和reduce想必大家并不陌生,Google公司2003年提出了一个名为MapReduce的编程模型[1],用于处理大规模海量数据,并在之后广泛的应用于Google的各项应用中,2006年Apache的Hadoop项目[2]正式将MapReduce纳入到项目中. 好吧,闲话少说,今天要介绍的是Python函数式编程中的另外两个内建函数map()和reduce(),而不是Google的MapReduce. 1.ma

Python函数式编程——filter()、map()、reduce()

提起map和reduce想必大家并不陌生,Google公司2003年提出了一个名为MapReduce的编程模型[1],用于处理大规模海量数据,并在之后广泛的应用于Google的各项应用中,2006年Apache的Hadoop项目[2]正式将MapReduce纳入到项目中. 好吧,闲话少说,今天要介绍的是Python函数式编程中的另外两个内建函数map()和reduce(),而不是Google的MapReduce. 1.filter() 格式:filter( func, seq ) 该内建函数的作