# 定义一个函数,声明2个形参defmy_max(x, y):# 定义一个变量z,该变量等于x、y中较大的值
z = x if x > y else y
# 返回变量z的值return z
# 定义一个函数,声明一个形参defsay_hi(name):print("===正在执行say_hi()函数===")return name +",您好!"
a =6
b =9# 调用my_max()函数,将函数返回值赋值给result变量
result = my_max(a , b)# 9print("result:", result)# 调用say_hi()函数,直接输出函数的返回值print(say_hi("ZYZMZM"))# 运行结果
result:9===正在执行say_hi()函数===
ZYZMZM,您好!
# 定义了支持参数收集的函数deftest(*blogs ,num):print(blogs)# ('ZYZMZM-blog', 'JIMMY-blog')# books被当成元组处理for b in blogs :print(b)print(num)# 20# 调用test()函数
test("ZYZMZM-blog","JIMMY-blog", num =20)
# 定义了支持参数收集的函数deftest(x, y, z=3,*blogs,**scores):print(x, y, z)print(blogs)print(scores)
test(1,2,"ZYZMZM-blogs","JIMMY-blogs", 语文=89, 数学=94)# 运行结果123('ZYZMZM-blogs','JIMMY-blogs'){'语文':89,'数学':94}
# 定义函数,该函数会包含局部函数defget_math_func(type, nn):# 定义一个计算平方的局部函数defsquare(n):return n * n
# 定义一个计算立方的局部函数defcube(n):return n * n * n
# 定义一个计算阶乘的局部函数deffactorial(n):
result =1for index inrange(2, n +1):
result *= index
return result
# 调用局部函数iftype=="square":return square(nn)eliftype=="cube":return cube(nn)else:return factorial(nn)print(get_math_func("square",3))# 输出9print(get_math_func("cube",3))# 输出27print(get_math_func("",3))# 输出6
# 定义函数类型的形参,其中fn是一个函数defmap(data, fn):
result =[]# 遍历data列表中每个元素,并用fn函数对每个元素进行计算# 然后将计算结果作为新数组的元素for e in data :
result.append(fn(e))return result
# 定义一个计算平方的函数defsquare(n):return n * n
# 定义一个计算立方的函数defcube(n):return n * n * n
# 定义一个计算阶乘的函数deffactorial(n):
result =1for index inrange(2, n +1):
result *= index
return result
data =[3,4,9,5,8]print("原数据: ", data)# 下面程序代码3次调用map()函数,每次调用时传入不同的函数print("计算数组元素的平方")print(map(data , square))# [9, 16, 81, 25, 64]print("计算数组元素的立方")print(map(data , cube))# [27, 64, 729, 125, 512]print("计算数组元素的阶乘")print(map(data , factorial))# [6, 24, 362880, 120, 40320]# 获取map的类型print(type(map))# <class 'function'>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
使用函数作为返回值
Python还支持使用函数作为其他函数的返回值。
defget_math_func(type):# 定义一个计算平方的局部函数defsquare(n):return n * n
# 定义一个计算立方的局部函数defcube(n):return n * n * n
# 定义一个计算阶乘的局部函数deffactorial(n):
result =1for index inrange(2, n +1):
result *= index
return result
# 返回局部函数iftype=="square":return square
iftype=="cube":return cube
else:return factorial
# 调用get_math_func(),程序返回一个嵌套函数
math_func = get_math_func("cube")# 得到cube函数print(math_func(5))# 输出125
math_func = get_math_func("square")# 得到square函数print(math_func(5))# 输出25
math_func = get_math_func("other")# 得到factorial函数print(math_func(5))# 输出120
接下来了解一下
reduce()
的用法。reduce把一个函数作用在一个序列
[
x
1
,
x
2
,
x
3
,
.
.
.
]
[x1,x2,x3,...][x1, x2, x3, ...]
[
x
1
,
x
2
,
x
3
,
.
.
.
]
上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
r
e
d
u
c
e
(
f
,
[
x
1
,
x
2
,
x
3
,
x
4
]
)
=
f
(
f
(
f
(
x
1
,
x
2
)
,
x
3
)
,
x
4
)
r
e
d
u
c
e
(
f
,
[
x
1
,
x
2
,
x
3
,
x
4
]
)
=
f
(
f
(
f
(
x
1
,
x
2
)
,
x
3
)
,
x
4
)
比方说把序列[1, 3, 5, 7, 9]变换成整数13579,就可以用reduce实现:
from functools importreducedefchange(x, y):return x *10+ y
print(reduce(change,[1,3,5,7,9]))# 13579
from functools importreducedefchange(x, y):return x *10+ y
defdigit(x):
digits ={'0':0,'1':1,'2':2,'3':3,'4':4, \
'5':5,'6':6,'7':7,'8':8,'9':9}return digits[x]print(reduce(change,map(digit,'13579')))# 13579
1
2
3
4
5
6
7
8
9
10
整理成一个stoi的函数就是:
from functools importreduce
digits ={'0':0,'1':1,'2':2,'3':
3,'4':4, \
'5':5,'6':6,'7':7,'8':8,'9':9}defstoi(s):defchange(x, y):return x *10+ y
defdigit(x):return digits[x]returnreduce(change,map(digit, s))
num = stoi('13579')print(num, end=" ")print(type(num))# 13579 <class 'int'>
def_odd_iter():
n =1whileTrue:
n +=2yield n
defchoose(n):returnlambda x:x % n >0defprime():yield2
it = _odd_iter()whileTrue:
n =next(it)yield n
it =filter(choose(n), it)for n in prime():if n <100:print(n, end=" ")else:break