python基础18_作用域与名称空间

扩展:先讲讲函数对象的概念

"""
什么是函数对象,就是把函数看成是一个对象,或者是一个变量
"""
print(0)  #这是不是调用的print这个函数
a = print  #是不是把函数赋值给a,也就是a就相当于这个函数
a(1)
b = print(1) # 就是会调用print(1)这个函数,并且把返回值赋值给函数本身
print(b)
aa = [type, 1,2,3]
print(aa[0]("hello"))  #也可以把函数放在容器(比如列表,元组,字典等)里面使用

def func(a):
    """
    也可以把函数当做参数去传
    :param a:
    :return:
    """
    b = a("请输入你的名字")
    print(b)
func(input)

def func2():
    """
    函数也可以是返回值
    :return:
    """
    return input
func2()("请输入你的年龄")

名称空间

#名称空间
# 堆栈
# 堆就是名称空间 就是存储变量名的地方
# 三种名称空间
# 内建名称空间:存储内置变量名 内置函数名
#全局名称空间:存储的自定义的在外部的变量名,函数名
#局部名称空间:在函数内部定义的形参,函数名,变量名
# 一个程序里的数据都是会存储在对应的位置
# 名称空间 --> 用来存储名字的地方!!!

作用域

# 作用域就是数据的使用范围
# 也就是内建名称空间和全局名称空间存储的数据,全局都可以使用
# 局部作用域: 这个数据只有在局部位置才能使用(比如函数内)
name = "李白"
print(name)
def fun():
    print(name)
fun()
def fun():
    name = "杜甫"
    print(name)
fun()
print(name)

 global 和 nonlocal

name = 12
def func():
    global name
    name = 13
func()
print(name)
def func():
    global name #把变量定义成全局变量,修改的是全局变量
    name = 14
    age =15
    sex = "男"
    def func_0():
        global name
        global age
        nonlocal sex#把变量定义成外层的局部变量,修改的是外层的局部变量
        age = 16
        name = 15
        sex = "女"
    func_0()
    print(age)
    print(sex)
func()

匿名函数 | lambad函数

格式是

lambda 参数:具体功能代码

lamda是没有名字的,也就是说如果要使用的话,需要赋值让这个变量代表lambda这个函数

def func(a,b):
    print(a+b)
func(12,22)
dunc_0 = lambda a,b: print(a+b)
dunc_0(22,44)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值