1. map
map(function,sequence[,sequence,...]) ->list
*对sequence序列中的每一个元素item依次执行function(item)函数操作,返回值是个列表。
##用map函数将字符串中的每个数字转化成int型
2. reduce
reduce(function,sequence[,initial]) ->value
*对于序列中每个元素迭代调用function函数,function必须要有两个函数
reduce(lambda x,y:x+y,[1,2,3,4,5])-->((((1+2)+3)+4)+5)
##用reduce求阶乘
def cheng(x,y):
return x * y
def jiecheng(max):
print reduce(cheng,range(1,max))
3. filter
filter(function or None,sequence) -> list,tuple,or string
*function返回值为bool类型
##给定一个正整数,计算有多少对质数的和等于这个正整数,并输出结果。
n = input("Num:")
def is_prime(x):
if x==1:
return False
else:
for i in range(2,x):
if x%i == 0:
return False
else:
return True
prime_list = filter(is_prime, range(1, n))
count = 0
#for i in prime_list:
# for j in prime_list:
# if i+j==n and i<=j:
# count += 1
#print count
#for i in prime_list:
# if is_prime(n-i) and i<=n-i:
# print (i, n-i)
# count += 1
#print count
a = [(i, n-i) for i in prime_list if is_prime(n-i) and i<=n-i]
print a
print len(a)
4. sorted
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
cmp=用于比较的函数
*返回一个排序后的新列表,原列表不变,可作用于任意可迭代对象
*li.sort()作用于列表本身,只能用于列表排序
li = [1, 23, 43, 5, 65]
print sorted(li)
print li
li.sort()
print li
##sorted逆序排序
li = [1, 23, 43, 5, 65]
sorted(li, reverse=True)
##忽略大小写进行排序
name = ['alice', 'Bob', 'harry', 'Jenny', 'jack']
def ignore_case(s1,s2):
s1 = s1.lower()
s2 = s2.lower()
return cmp(s1, s2)
sorted(name, ignore_case)
##找出货物中价格最低的和数量最多的
goods = [
["apple", 2.00, 10],
["computer", 4000.00, 4],
["banana", 1.00, 40]
]
sorted(goods, key=lambda x: x[1])[0][0]
sorted(goods, key=lambda x: x[2])[-1][0]
**x = ["apple", 2.00, 10] ["computer", 4000.00, 4] ["banana", 1.00, 40]
5. 匿名函数
#lambda参数名:函数返回值
def mypower(x):
return x**2
map(lambda x:x**2, [1,2,3,4,5])
#参数名:支持可变参数, **kwargs......
mypower = lambda x,y=2:x**y
print mypower
print mypower(3)
6. 函数作为返回值
def cacl_sum(*args):
all_sum = 0
for i in args:
all_sum += 1
return all_sum
cacl_sum(1,2,3,4,5)
7. 闭包(closure)--函数嵌套函数
def lazy_sum(*args):
def cacl_sum():
all_sum = 0
for i in args:
all_sum += i
return all_sum
return cacl_sum
f = lazy_sum(1,2,3,4,5)
print f()
*当调用闭包lazy_sum时,每次调用都返回一个新的函数
8. 装饰器--基于闭包
**装饰器传参,可在装饰器外再加一层函数
#coding:utf-8
def addInfo(a):
def addInfo1(fun):
def wrapper():
print "######欢迎使用ATM[%s]系统!######" %(a)
fun()
print "######欢迎下次使用!######\n\n"
return wrapper
return addInfo1
#语法糖
@addInfo("登陆")
def login():
print "登陆......."
@addInfo("查询")
def index():
print "查询......."
@addInfo("转账")
def transferMoney():
print "转账......"
@addInfo("存储")
def saveMoney():
print "存钱......"
login()
index()
transferMoney()
saveMoney()
#通过装饰器计算函数执行时间
#coding:utf-8
import time
def Timer(fun): #login
def wrapper(*args, **kwargs): ##可传任意参数的万能装饰器
start_time = time.time()
fun(*args, **kwargs)
end_time = time.time()
count = end_time - start_time
print "[%s]函数运行了[%s]时间。。。" %(fun.__name__,count)
return wrapper
@Timer
#add =Timer(add)
def login():
print "login......"
login()
#time.time() ##获取时间戳
#time.ctime() ##获取时间日期
##编写Logger装饰器,实现被装饰函数运行后打印日志信息,日志格式为:
某时间 【某函数】函数运行时间为【多长时间】;
##被装饰的函数可以接收任意多个参数;
##装饰器可以传参数,并打印所传参数,格式为:装饰器所传参数为:XXX
#coding:utf-8
import time
def Logger(*args1, **kwargs1):
def log1(fun):
def wrapper(*args, **kwargs):
t = time.ctime()
start_time = time.time()
fun(*args, **kwargs)
end_time = time.time()
T = end_time - start_time
print "%s\t[%s]函数运行时间为[%s]" %(t, fun.__name__, T)
print "装饰器所传参数为:[%s,%s]" %(args1, kwargs1)
return wrapper
return log1
@Logger("i'm args", name = "sumin")
#login = Logger(login)
# login --->wrapper
def login(user,passwd):
print "login......"
print "%s登陆成功!" %(user)
login("user1", "123")
9. json = javascript object
import urllib2 #bs4
import json
##查询ip的所在地
#coding:utf-8
import urllib2 ##获取网页信息
import json ##数据类型转换
ip = raw_input("查询的IP:")
a =urllib2.urlopen("http://ip.taobao.com/service/getIpInfo.php?ip=%s" %(ip))
res = a.read()
dict_res = json.loads(res)
print "查询结果显示:", dict_res['data']['ip'], dict_res['data']['country'], dict_res['data']['city']