命名空间
命名空间一共分为三种
全局命名空间
局部命名空间
内置命名空间(是Python解释器为我们提供的名字,好比‘input,print’等)
三种命名空间之间的加载顺序:
加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)
三种命名空间之间的取值顺序:
在局部调用:
局部命名空间->全局命名空间->
内置命名空间
在全局调用:
全局命名空间->内置命名空间
作用域:
作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。
全局作用域:
包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效
局部作用域:
局部名称空间,只能在局部范围内生效
(globals() 函数会以字典类型返回当前位置的全部全局变量。)
(locals() 函数会以字典类型返回当前位置的全部局部变量。)
函数的嵌套:
嵌套函数,顾名思义就是函数里面 套函数。
def A():
print('a')
def B():
print ('b')
B()
print ('Over!!!')
A()
运行结果
a
b
Over!!!
函数名的本质:
1.可以被引用
2.可以被当作容器类型的元素
3.可以当作函数的参数和返回值
闭包:
内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数
def func():
name = 'eva'
def inner():
print(name)
作业:
# 2、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作
# import os
# def rep(file_name,new,old):
#
# with open(file_name,'r',encoding='utf-8') as read_f,
# open('h','w',encoding='utf-8') as write_f:
# for line in read_f:
# write_f.write(line.replace(new,old))
#
# os.remove(file_name)
# os.rename('h',file_name)
#
# rep('hello.txt','*','7')
# 3、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
# def func(obj):
# for i in obj:
# if i:
# print('该元素不为空',i)
# else:
# a = obj.index(i)
# print('该元素为空',i)
#
#
# func(['a','',''])
#
# 4、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# PS:字典中的value只能是字符串或列表
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# def value_len(leng):
# for k,v in leng.items():
# # print(k,v)
# if len(v) > 2:
# leng[k]=v[0:2]
# # print(leng)
# return leng
#
# print(value_len(dic))