第8章 函数

23 阅读2分钟

函数

def sum_2(a,b): # 形式参数
    return a+b


result = sum_2(9,8)  # 实际参数
# a = len('get')
# print(a)
# print(result)

def power(x, n=2): #  n:默认参数,缺省参数
    return x**n

a = power(4,3)
b = power(5,3)
c = power(6)
print(c)
print(b)
print(a)
a = int('16', 8)
print(a)

def infos(name,age=24,gender='女'):
    return '大家好,我叫%s ,我今年%d岁,我是一名%s生'%(name,age,gender)
s = infos('mia',24,'女')
lily = infos('lily')
jack = infos('jack',gender='男')
print(jack)
print(lily)

# 可变参数

def total(*args): # 可变参数
    print(args)
    result = 0
    for i in args:
        result += i*i
    return result

result = total(1,4,5,6,7,8,3)

print(result)
result = total(3,4,5)
a = [1,2,3,4,5]
result = total(*a)
print(result)


def f(**kwargs): # 可变参数,接收字典
    for k,v in kwargs.items():
        print(k,v)

d = {'name':'xiaoming','age':18}
f(**d)

变量作用域

# 全局变量
num1 = 10  # 不可变数据类型
list1 = [1,2,3,4,5]   # 可变数据类型

def f():
    global num1  # 声明在f中使用的num1是全局变量num1
    num2 = 20  # 局部变量
    num1 = 20
    list1[2] = 8
    print('在函数f中打印num1的值',num1)
    print('在函数f中打印list1的值',list1)
    print('num2的值',num2)



f()
# print('在函数f外打印变量num2的值',num2) # 局部变量不能在函数外使用
print('在函数f执行后打印num1的值',num1)
print('在函数f执行后打印list1的值',list1)

匿名函数

# fun = lambda a,b:a+b
# result = fun(5,2)
# print(result)

a = [1,2,3,4,5]
result = map(lambda x:x**3, a)  # 映射
print(list(result))

#  reduce  累积
from functools import reduce
result = reduce(lambda x,y:x*y,a)
print(result)

# filter 过滤
result = filter(lambda x:x%2,a)
print(list(result))



a = [1,2,3,40,5,6,0,6,0,5]  # 12340560605
result = filter(lambda x:x!=0,a)
print(list(result))

result = 0
mul = 1
for i in a[::-1]:
    result = result + i*mul
    mul = mul*10**len(str(i))
print(result)

result = reduce(lambda x,y:x*10**len(str(y))+y,a)
print(result)

上台阶

# 10阶楼梯,每次上1个台阶或者上2个台阶,问一共有多少种走法
# 3
# 1 1 1
# 1 2
# 2 1
# f(n) = f(n-1) + f(n-2)
# n=0,f(n)=0
# n=1,f(n)=1
# n=2,f(n)=2
def f(n):  # 计算出n阶楼梯,一共有多少种走法
    if n==0:
        return 0
    elif n==1:
        return 1
    elif n==2:
        return 2
    return f(n-1)+f(n-2)

print('楼梯有%d阶的时候,有%d种走法'%(5,f(5)))

a = [0,1,2]
for i in range(3,11):
    a.append( a[i-1] + a[i-2])
    print('楼梯有%d阶的时候,有%d种走法' % (i, a[-1]))