函数名称空间与作用域 匿名函数与列表生成式等知识补充 模块 常见内置模块

今日内容概要

函数名称空间与作用域

匿名函数与列表生成式等知识补充

模块

常见内置模块

内容详细

函数名称空间与作用域

名称空间:存放变量与值的绑定关系的地方

1.内置名称空间 伴随python解释器的启动以及关闭创建和销毁
2.全局名称空间 伴随python文件的开始执行/执行完毕而产生/回收
3.局部名称空间 函数体代码运行产生结束销毁加载顺序:内置名称空间>>>全局名称空间>>>>>局部名称空间

局部没有到上一级的全局里面找找到了一个jack所以出来的就是jack


 

inner在他的局部中有一个x=3所以取3,outer在全局之中而全局之中有的就是x=2所以就取2

 

outer跟上面一样,但是由于现在局部中的x=3没有了所以就找他的上一级x=2所以inner也取2

 

两个局部之中都没有对应的值只能去全局之中找找到x=1

 

 由于在局部,全局,内置中都没有找到符合的值所以直接报错

 

如果想在局部修改全局名称空间中的名字对应的值可以使用global关键字
count = 1
def index():
global count
count += 1
index()

匿名函数与列表生成式等知识补充

匿名函数:没有函数名称的函数
(基本不会单独使用需要配合内置函数以及自定义函数一起使用)
语法结构:
landba 形参:返回值

l = [1, 2, 3, 4, 5, 6, 7]
res = map(lambda x: x + 10, l)
print(list(res))

def index(x):
    return  x + 10
res1 = map(index,l)
print(list(res1))

 列表生成式

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 'baga' 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)
tdelta1 = datetime.timedelta(days=-7)
print(tday + tdelta1)

 

 

 

 

posted @ 2021-08-19 16:49  ふじわらたくみ  阅读(42)  评论(0编辑  收藏  举报