#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2017/10/24 22:15
# @author : hezefan
# @file : 7.1.py
#函数的定义
def
sum(x,y):
print
(
'x={0}'
.format(x))
print
(
'y={0}'
.format(y))
print
(
'x+y={0}'
.format(x+y))
return
x+y
m=sum(
x
=
1
,
y
=
2
)
print
m
#函数的参数
#1、给Y变量设置一个默认值,如果不赋值,则y为默认值,
def
fanA(x,y=
0
):
##y不赋值的时候默认为0
print
(x)
print
(y)
fanA(
1
)
fanA(
1
,
10
)
##给默认y赋值一个实参,则y的值为实参
#2、参数为tuple 元组,##输出c的值为(3, 4, 5, 6),为一个元组.一个星号为元组
def
fanB(a,b,*c):
print
a
print
b
print
"length of c is:%d"
%
len
(c)
print
c
fanB(
1
,
2
,
3
,
4
,
5
,
6
)
#3、参数为字典dict,两个星号为字典
def
fanC(a,**b):
print
a
for
m
in
b:
print
m +
":"
+
str
(b[m])
fanC(
100
,
x
=
"hello"
,
y
=
'你好。'
)
##第一种赋值方式
args={
'x'
:
1
,
'y'
:
2
}
##第二种赋值方式
fanC(
100
,**args)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2017/10/25 19:47
# @author : hezefan
# @file : 7.2.py
'''高阶函数'''
#高阶函数:把函数当做参数传递的一种函数,如下举例:
def
add(x,y,f):
print
(f(x)+f(y))
add(-
10
,
8
,
abs
)
#map()函数
#内置高阶函数接收一个函数和一个可叠代的对象
def
f2(x):
return
x*x
#元素乘以元素
l=[
1
,
2
,
3
,
4
,
5
]
print
(
map
(f2,l))
#reduce函数,
#输入一个方法,一个函数,(和一个数字,可以不加上)
def
f3(x,y):
return
x+y
print
(
reduce
(f3,l,
10
))
#输出列表的和加上10,相当于1+2+3+4+5+10
#filter函数
#输入一个函数和可迭代对象,删选出符合函数的元素
def
f4(x):
return
x%
2
==
1
print
(
filter
(f4,l))
#sorted函数
#对字典进行排序
mm=
dict
(
b
=
1
,
a
=
2
,
c
=
10
,
d
=
5
)
test=
sorted
(mm.iteritems(),
key
=
lambda
d:d[
1
])
##次数的函数名字是随意命名的
print
(test)
#匿名函数,快速定义一个函数
#lambda来定义函数
m=
lambda
x,y:x+y
print
(m(
1
,
2
))
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2017/10/25 21:31
# @author : hezefan
# @file : 7.3.py
'''生成式,和生成器'''
#列表生成式
li = [x*x
for
x
in
xrange
(
1
,
101
)
if
x%
2
==
0
]
print
(li)
#列表生成器
#最简单的办法,把原来的生成式的[]换成()就OK了,生成一个列表对象(列表生成器)
li = (x*x
for
x
in
xrange
(
1
,
101
)
if
x%
2
==
0
)
print
(li)
print
(li.
next
())
##输出光标的下一项
print
(li.
next
())
print
(li.
next
())
for
i
in
li:
print
(i)
#函数中生成列表生成器
#yidle方法 相当于return,但是返回值的时候会挂起这个元素,下次执行的时候会记录这个点
def
f(n):
sum =
0
i =
0
while
(i<n):
sum =sum +i
i+=
1
yield
(sum)
##返回一个对象生成器
print
(
type
(f(
10
)))
##返回一个生成器
for
x
in
f(
10
):
print
x
##生成器:返回一个可迭代的对象,以及generator对象,必须通过循环才能一一取出结果
##生成式:一次性生成所有的数据,然后保存在内存中,适合小量的数据
##可迭代对象:可以通过循环调用出来就是可迭代的对象,生成器也是一个可迭代的对象
##迭代器:就是生成器呗next不断调用返回下一个元素,就是迭代器
#乘法口诀:
for i in xrange(1,10): for j in xrange(1,i+1): print('{0}*{1}={2}'.format(j,i,j*i)), ##,可以取消换行 print