函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数
函数
定义函数
def my_abs(x):
if x >= 0:
return x
else:
return -x
result =my_abs(10)
print(result)
高级特性
切片
Slice
L[:3]
迭代
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
print key #注意这个缩进 代替了{ }
for ch in 'ABC':
print ch
for x, y in [(1, 1), (2, 4), (3, 9)]:
print x, y
函数式编程
函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数
Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。
def add(x, y, f):
return f(x) + f(y)
print add(-5, 6, abs)
结果:11
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。
map/reduce
如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。
map
将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
reduce
把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
#map
def f(x):
return x * x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
#reduce
def fn(x, y):
print x,y, x * 10 + y
return x * 10 + y
print reduce(fn, [1, 3, 5, 7, 9])
filter()
也接收一个函数和一个序列。和map()
不同的时,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True
还是False
决定保留还是丢弃该元素。
def is_odd(n):
return n % 2 == 1
print filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
IO编程
读文件
f = open('D:logslog.txt', 'r')
print f.read()
写文件
f = open('/Users/michael/test.txt', 'w')
f.write('Hello, world!')
f.close()
中文注释
#
## -*- coding: utf-8 -*-
__author_='robin'
# 中文注释
print "Hello World!"
必须放在第一行
TCP编程
#
## -*- coding: utf-8 -*-
# 导入socket库:
import socket
# 创建一个socket:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:
s.connect(('m.y**t**.com', 80))
while True:
data = s.recv(1024)