函数进阶
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