第 8 章 函数进阶

1. 重新认识函数

1️⃣函数也是对象。

a1 = 100            # a1是int类的实例对象
a2 = 'hello'        # a2是str类的实例对象
a3 = [10, 20, 30]   # a3是list类的实例对象

# welcome函数是function类的实例对象
def welcome():
    print('你好啊')

print(type(a1))
print(type(a2))
print(type(a3))
print(type(welcome))

上述代码中welcome函数的内存示意图:

图片[1]-第 8 章 函数进阶-大赛人网

2️⃣函数可以像对象一样,动态添加属性。

def welcome():
    print("你好")

# 动态添加属性
welcome.desc = "这是一个用于打招呼的函数"
welcome.version = 1.0
print(welcome.__dict__)

# 调用函数
welcome()
图片[2]-第 8 章 函数进阶-大赛人网

3️⃣函数可以赋值给变量。

def welcome():
    print('你好啊!')

# 把函数对象赋值给变量
say_hello = welcome

# 通过变量调用函数
say_hello()

# 通过函数名调用函数
welcome()

上述代码的内存结构示意图:

图片[3]-第 8 章 函数进阶-大赛人网

4️⃣可变参数 vs 不可变参数  

def welcome(data):
    print(f'函数收到的data是:{data},地址是:{id(data)}')
    data = 888
    print(f'被修改后的data是:{data},地址是:{id(data)}')

a = 666
print(f'函数外侧a的值是:{a},地址是:{id(a)}')
welcome(a)
print(f'函数调用后a的值是:{a},地址是:{id(a)}')

def welcome(data):
    print(f'函数收到的data是:{data},地址是:{id(data)}')
    data[2] = 99
    print(f'被修改后的data是:{data},地址是:{id(data)}')

a = [10, 20, 30]
print(f'函数外侧a的值是:{a},地址是:{id(a)}')
welcome(a)
print(f'函数调用后a的值是:{a},地址是:{id(a)}')

5️⃣函数也可以作为参数
    
def welcome():
    print('你好啊!')

def caller(f):
    print('caller函数开始调用')
    f()

caller(welcome)

6️⃣函数也可以作为返回值

def welcome():
    print('你好啊')
    def show_msg(msg):
        print(msg)
    return show_msg

# result = welcome()
# result('大赛人')
welcome()('大赛人')
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容