1.函数
# 函数 def 实现代码复用
# 声明函数
def print_name():
print('我叫老李')
# 调用函数
print_name()
def add(x, y, z=4): # x,y形参 z 默认参数
print(x, y, z)
# 可变参数 *args,**kwargs
def demo(x, y, z=2, *args, **kwargs):
isum = 0
isum = x + y + z
for i in args: # (3, 4, 5, 6, 7)
isum += i
for j in kwargs.values(): # {'a': 1, 'b': 2}
isum += j
print(isum)
# print(x)
# print(y)
# print(*args) #拆包 3 4 5 6 7
# print(args) #未拆包 (3, 4, 5, 6, 7) 元组
# print(kwargs) # {'a': 1, 'b': 2} 字典
demo(1, 2, 3, 4, 5, 6, 7, a=1, b=2)
# 组合参数
def demo2(x, y, z=2, *args, **kwargs):
print(x)
# 函数嵌套调用
def test1():
print('test1')
test2()
print('test2 调用完毕')
def test2():
print('test2')
test3()
def test3():
print('test3')
if __name__ == '__main__':
test1()
# 全局变量,局部变量
name = '老王' # 全局变量
age = 12
sex = '男'
def show():
global age, sex # global声明 age,sex参数是修改的全局变量
age = 100 # 全局变量
sex = '女' # 全局变量
name = '老三' # 局部变量 只针对函数内部有效
print(name, age, sex)
if __name__ == '__main__':
show()
print(name, age, sex)
# 返回值
def fn(x, y):
z = x + y
return z # 函数结束
if __name__ == '__main__':
result = fn(1, 2)
print(result + 1)
# 返回多个值 是元组类型
def fn1(name, age):
name = "我叫%s" % name
age = "今年%s岁" % age
return name, age
result1 = fn1('老王', 12)
print(result1) # 元组 ('我叫老王', '今年12岁')
name1, age1 = fn1('老王', 12)
print(name1, age1) # 拆包 我叫老王 今年12岁
# 递归函数
# 6! 6*5*4*3*2*! = 720
def six(num):
if num == 1:
return num
return num * six(num - 1)
result2 = six(6)
print(result2)
# 匿名函数 lambda a,b:a+b 没有名字的函数,只能有一个式子
def fun(a, b): return a + b
result3 = fun(1, 2)
print(result3)
# 高阶函数
"""
map()函数接收两个参数,一个是函数,一个是Iterable,
map将传入的函数依次作用到序列的每个元素,
并把结果作为新的Iterator返回。 (可以用next()使用)
"""
def f(x):
return x * x
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(r)) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
lmap = list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
print(lmap) # ['1', '2', '3', '4', '5', '6', '7', '8', '9']
"""
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,
reduce把结果继续和序列的下一个元素做累积计算
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
"""
from functools import reduce
def fn_reduce(x, y):
return x*10 + y
print(reduce(fn_reduce, [1, 3, 5, 7, 9])) # 13579
# 编写一个prod()函数,可以接受一个list并利用reduce()求积
def prod(L):
return reduce(v_fn, L)
def v_fn(x, y):
return x*y
print('3 * 5 * 7 * 9 =', prod([3, 5, 7, 9]))
if prod([3, 5, 7, 9]) == 945:
print('测试成功!')
else:
print('测试失败!')