python基础-学习记录day10

94 阅读3分钟

函数进阶

1、函数的嵌套调用

# 1.在外函数内部调用内函数,即用函数名调用
# def func1():
#     print("这是外部函数")
#
#     def func2():
#         print("这是内部函数")
#
#     func2()  # 函数名调用内函数
#
#
# func1()
# 2.可以用return调用内函数
# def func1():
#     print("这是外部函数")
#
#     def func2():
#         print("这是内部函数")
#
#     return func2  # 返回了一个函数名  内函数名


"""
 func2 = func1()
 func2() = func1()()   # 调用我的内函数func2()
"""
# print(func1())
# func1()()  # 等价于 func2()
# 3.在一个函数里面调用别的函数
def print1():
    print("这是第一个函数")


def print2():
    print("这是定义的第二个函数")
    print1()  # 在print2()中调用print1()


print2()

2、函数的作用域

""
基本语法
运算符
条件判断(if)与顺序执行(循环while for )
基本数据类型(数值,字符串,列表,元组,字典,集合 )

代码的顺序都是从上往下执行的  我们的循环 重复的从上往下

函数  作用域

"""
# 1.全局变量和局部变量
# y = 10
#
#
# def func():
#     global y
#     y = 5
#     print('y1 =', y)
#
#
# func()
# print('y2 =', y)
# 2.E(enclosing):嵌套的父级函数的局部作用域
# def mytest1():
#     b = 6  # 作为我mytest1的局部变量   相对而言 b=6 作为我的mytest2的全局变量
#
#     def mytest2():
#         # print(b, id(b),'2b')
#         nonlocal b  # nonlocal 关键字用于在嵌套函数内部使用变量  用的比较少  很少去声明
#         b = 7  # 重新开辟了内存空间  注释掉直接打印b
#         print(b, id(b))
#
#     mytest2()
#
#     print(b, id(b))
#
#
# mytest1()
# 3.built-in 内建作用域
# 内建作用域是特质python api内置的一些操作,例如 len 、max等函数,无需声明就可使用。
x = max(1, 6)  # max为系统变量,它的作用域为python的所有模块
y = 1  # y为全局变量,它的作用域为当前模块


def outer():
    i = 3  # i的作用域为当前函数,包括嵌套函数

    def inner():
        count = 2  # count为局部变量,作用域只在当前函数有效


"""
局部变量  4 
全局变量  2 
嵌套的父级变量 3 
内建的作用域 1 
"""

3、函数变量的作用域

a = 1  # 全局变量


def func1():
    # 局部变量
    a = 2     # 只能在函数的内部访问
    print(a)  # 2
    # return a


func1()  # 2
print(a)  # 1
x = 2


def func():
    global x
    x = 3  # ----》声明为全局变量
    print(x)


func()
print(x)
# 来猜一猜他的运行结果 33

4、高阶函数

"""

什么是高阶函数?
有内置的高阶函数  也可以通过自定义去创造高阶函数
一个函数的函数名作为参数传给另外一个函数
一个函数返回值(return)为另外一个函数(返回为自己,则为递归)
"""

# 1.一个函数的函数名作为参数传给另外一个函数
# def func():
#     print("定义一个普通函数")
#
#
# def high_level(function):
#     print(function)  # <function func at 0x0000027ABED8CA60>
#     print("定义一个高阶函数")
#     # 在函数内部,通过传入的函数参数调用
#     function()
#
#
# high_level(func)

"""装饰 给一个添加另一个函数的功能  (后续再继续学习)"""
# 2.一个函数返回值(return)为另外一个函数(返回为自己,则为递归)
def func():
    print("定义一个普通函数")


def high_level(fun):
    print("定义一个高阶函数")
    return fun  # 返回的传入的函数名
    #  return fun() 这个是直接返回函数调用,递归函数就是如此


res = high_level(func)  # func是一个普通函数的函数名     func = high_level(func)
# 高阶函数返回函数之后在调用func函数
res()  # func()

5、练习:

定义一个函数,向函数内传入形参num, num1, num2,

如果num小于100,则计算num1 和 num2的积并打印;

否则计算num1和num2的和,然后打印输出

def product_or_sum(num, num1, num2):
    if num < 100:
        print(num1 * num2)
    else:
        print(num1 + num2)


product_or_sum(101, num2=1, num1=2)  # 3
product_or_sum(99, num2=10, num1=20)  # 200