第三周练习 part4 --- 函数、高阶函数、局部变量、全局变量、递归

函数的使用、局部变量、局部作用域、高阶函数、递归

# 函数的基本使用


def fun1():
    '''函数描述'''
    print('----------1-----------')
    print('You are running function 1.')
    return 1


def fun2():
    """并不是函数,而是过程"""
    print('----------2-----------')
    print('This is has no return value')
x = fun1()
y = fun2()
print(x)
print(y)


def fun3(a, b):
    """求和函数"""
    print('----------3-----------')
    return a + b
print(fun3(1,2))


def fun4(a, b = 0):
    """带有默认参数"""
    print('----------4-----------')
    return a - b
print(fun4(4))  # 可以不输入,此时调用默认参数值
print(fun4(6, 1))  # 也可以指定别的值


def fun5(*args):  # 接收位置参数——>转换成元组
    """加一个 * 来接收未知数量的实参
    还可以将形参设置为(x, *args)"""
    print('----------5-----------')
    print(args)  # 以元组的形式输出
    print(*args)  # 以分立的元素输出
    return 0
fun5(1,2,3,4,'',['seven', 'eight'])


def fun6(**kwargs):  # 关键参数——>字典
    """将N个关键参数转化为字典"""
    print('----------6-----------')
    print(kwargs)
    print(kwargs['name'])
    print(kwargs['age'])
    print(kwargs['sex'])
    return 0
fun6(name='Lief', age=20, sex='M')


def fun7(name, age, sex = 'M', **kwargs):
    """实现必须输入姓名年龄,性别设置了默认值邮箱非必填"""
    print('----------7-----------')
    print(name)
    print(age)
    print(sex)
    print(kwargs['mail'])
    return 0
fun7('Lief', age=20, sex='F', mail='lingfenglee@qq.com')


def fun8(name, age, *args, **kwargs):
    """位置参数和关键参数混合使用"""
    print('----------8-----------')
    print(name)
    print(age)
    print(args)
    print(kwargs)
    return 0
fun8('Lief', 20, sex='F', mail='lingfenglee@qq.com')
fun8('Lingfeng', 22, 'WTF', sex='M', mail='lingfenglee@qq.com')


----------------------------------------------------------------------------------------------------------


# 局部变量、全局变量

name = 'Lief'


def change_name(name):
    """局部变量name改不了Lief"""
    name = 'Lee'
    print(name)
    return 0
change_name(name)
print(name)


table = [1, 2, 3, 4]


def change_table(table):
    """可以改全局变量"""
    table[2] = 99
    print(table)
    return 0
change_table(table)
print(table)


dictionary = {'Name': 'Lief','Age': '20','School': 'TJU' }


def change_dic(dictionary):
    """可以改全局变量"""
    dictionary['Name']='Lee'
    print(dictionary)
    return 0
change_dic(dictionary)
print(dictionary)


----------------------------------------------------------------------------------------------------------


# 局部作用域|全局作用域

x = 0
def grandpa():
    x = 1
    def father():
        x = 2
        def son():
            x = 3
            print(x)
        son()
    father()
grandpa()
print(x)



----------------------------------------------------------------------------------------------------------


# 高阶函数
#  1.把一个函数名当作实参传给另外一个函数
#  2.返回值中包含函数名

def add(a, b, f):
    return f(a)+f(b)
res = add(8, -9, abs)  # abs是内置函数,用于求绝对值
print(res)


----------------------------------------------------------------------------------------------------------


# 递归

def calc(n):
    if n < 10:
        return calc(n+1)
    print(n)
calc(1)

 

 

posted @ 2018-03-26 08:08  Lief_1997  阅读(164)  评论(0)    收藏  举报