函数名称空间与作用域
名称空间
存放变量与值绑定关系的地方
1.内置名称空间
python解释器启动立刻创建结束立刻销毁
2.全局名称空间
伴随python文件的开始执行/执行完毕而产生/回收
3.局部名称空间
函数体代码运行产生结束销毁
# 加载顺序:内置名称空间 > 全局名称空间 > 局部名称空间
'''作用域'''
全局作用域
内置名称空间 全局名称空间
局部作用域
局部名称空间
作用域的查找顺序一定要先明确你当前在哪
如果当前在局部名称空间
局部名称空间 全局名称空间 内置名称空间
如果当前在全局名称空间
全局名称空间 内置名称空间
如果当前在内置名称空间
内置名称空间
# 顺序只能从内往外 不能反向
如果想在局部修改全局名称空间中的名字对应的值可以使用global关键字
count = 1
def index():
global count
count += 1
index()
![]()
匿名函数与列表生成式等知识补充
匿名函数
即没有函数名的函数
语法结构
lambda 形参:返回值
# 匿名函数一般不单独使用 需要结合内置函数/自定义函数等一起使用
l = [1, 2, 3, 4, 5, 6, 7]
res = map(lambda x: x + 10, l)
print(list(res)) #[11, 12, 13, 14, 15, 16, 17]
l = [1, 2, 3, 4, 5, 6, 7]
def index(x):
return x + 10
res1 = map(index,l)
print(list(res1)) #[11, 12, 13, 14, 15, 16, 17]
"""匿名函数主要用于一些比较简单的业务逻辑中 减少代码量"""
列表生成式
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
# 将列表中每个元素加一
new_list = []
for i in l1:
new_list.append(i+1)
print(new_list)
# 列表生成式
new_list = [i + 1 for i in l1]
print(new_list)
name_list = ['jason', 'kevin', 'tony', 'oscar']
# 将列表每个元素后面加上_NB的后缀
new_list = []
for name in name_list:
new_list.append(name + '_NB')
print(new_list)
# 列表生成式
new_list1 = [name+'_NB' for name in name_list]
print(new_list1)
![]()
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
# 筛选出加一之后大于60的元素
new_list = []
for i in l1:
if i+1 > 60:
new_list.append(i)
print(new_list)
# 列表生成式
new_list1 = [i for i in l1 if i+1 > 60]
print(new_list1)
![]()
三元表达式
"""
小知识补充
name = 'jason'
if name == 'jason': print('jason登录成功')
当if子代码只有一行的情况下可以整体写在一行 但是不推荐
"""
# while True:
# name = input('username>>>:')
# if name == 'jason':
# print('NB')
# else:
# print('SB')
# 当if判断仅仅是二选一的情况下 可以使用三元表达式
name = input('username>>>:')
res = 'NB' if name == 'jason' else 'SB'
print(res)
![]()
# 语法结构
A if 条件 else B
当if后面的条件为True的时候使用A
为False使用else后面的B
模块的使用
# 什么是模块与包
具有一定功能的代码集合
可以是py文件 也可以是多个py文件的组合即文件夹(包)
# 导入模块的本质
会执行模块内代码并产生一个该模块的名称空间
将代码执行过程中的名字存放该名称空间中
然后给导入模块的语句一个模块名 该模块指向模块的名称空间
'''重复导入相同的模块 只会执行一次'''
b.py
import aaa
aaa.py
name = 'jason'
def index():
pass
# 导入模块的两种句式
import 模块名
可以通过模块名点出所有的名字
from 模块名 import 子名1,子名2
只能指名道姓的使用import后导入的子名并且还存在冲突的风险
# from句式主要用于模块与当前文件不在同一级目录下使用
# 英文和中文模块名可以,数字因为有别的含义会报错
# 如果模块名较长或者不符合你的看法 可以起别名
import asjdkjkasdjaskdkasdasdjsjdksadksajdkasjd as ad
from d1.d2 import f1 as fff
内置模块之时间模块
import time
print(time.time()) # 1629346116.5301917
"""时间戳:是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒"""
print(time.strftime('%Y-%m-%d')) # 2021-08-19
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2021-08-19 12:11:32
print('该睡了')
time.sleep(3)
print('睡醒了') # 延时执行
def index():
print('123')
time.sleep(3)
print('哈哈哈')
# 统计index函数执行的时间
start_time = time.time()
index()
end_time = time.time()
print(end_time - start_time) # 结束时间-开始时间
import datetime
print(datetime.date.today()) # 2021-08-19
print(datetime.datetime.today()) # 2021-08-19 12:18:44.564270
# 获得本地日期 年月日
tday = datetime.date.today()
# 定义操作时间 day=7 也就是可以对另一个时间对象加7天或者减少7点
tdelta = datetime.timedelta(days=7) # 7 day
tdelta1 = datetime.timedelta(days=-7) # -7 day
print(tday + tdelta1)