今日内容之8月19日

函数(下)与时间模块

概要

* 函数名称空间与作用域

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

* 模块

* 时间模块

详情

函数名称空间与作用域

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

1.内置名称空间:python解释器启动时立即创建结束立即销毁
2.全局名称空间:python文件开始执行时创建,执行完毕时回收
3.局部名称空间:函数体代码运行时产生,结束销毁
#加载顺序:内置名称空间 -> 全局名称空间 -> 局部名称空间

作用域:函数发挥作用的地方

作用域的查找只能按
         '''局部名称空间 -> 全局名称空间 -> 内置名称空间'''
                   的顺序,不能折返。

image

在局部(例如函数内部)修改全局名称空间中变量的值可使用global关键字
count = 1
def index ():
    global count
    count+=1
index()
#不加global会报错是因为count +=1会创建count的变量,但是内存中没有它的值

image
随堂小练习:

#请判断代码中X的值。
x=1
def outer():
    x=2
    def inner():
        x=3
        print('inner x:%s' %x)
    inner()
    print('outer x:%s' %x)
outer()

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

匿名函数:没有函数名的函数

语法结构:lambda 形参:返回值
# 匿名函数一般不单独使用 需要结合内置函数/自定义函数等一起使用
eg:  将列表里的每个数各加11,随后输出
		l = [1,3,2,4]
		res = map(lambda x: x + 11, 1)
		print(list(res))
不用匿名函数也能这么表示:
    	def index(x):
            return x + 11
        res1 = map(index, l)
        print(list(res1))
#由此可见,匿名函数主要作用是在一些较为简单的业务逻辑中减少代码量

​ 列表生成式

#用循环结构实现将列表内每个元素加一,赋给新列表
list1 = [1,3,5,7,9,11]
new_list = []
for i in list1:
    new_list.append(i+1)
print(new_list)
#用列表生产式实现上述功能可减少代码量
new_list = [i + 1 for i in list1]
print(new_list)

image
​ 三元表达式

#当if子代码只有一行的情况下可以整体写在一行,不推荐使用!!!
 name = 'Leo'
 if name == 'Leo':print('Ultraman Leo')
 等价于
 while True:
        name = input('userName>>>')
        if name == 'Leo':
            print('Ultraman Leo')
#当if的判断逻辑仅仅是二选一的时候,可以使用三元表达式
name = input('userName>>>')
res = 'NB' if name == 'Leo' else 'not NB'
print(res)
#语法结构
  A	if 条件 else B
    if后面的条件为True的时候执行A,为False执行else后的B

模块

#定义
    模块是具有一定功能的代码集合,一般为.py文件或多个.py文件等组合的文件夹即包。
#本质
    执行模块内的代码并产生一个该模块的名称空间,将代码执行过程产生的名字存放于该名称空间中,然后给导入语句一个指向模块的名称空间的模块名。
    #ps:重复导入相同的模块,只会执行一次。
    b.py
         import aaa
    aaa.py
         name = 'Leo'
         def index():
            pass
#句式
    import 模块名 as 别名
    from 模块名 import 子名1,子名2  as 别名  
    '''
    	from是模块与当前文件不在同一级目录下使用
    	模块名可用tab键补全,过长可起别名。   
    '''
    eg:
        import asedjhfvcbgasewkhjfbgckjas as ased
        from d1.d2 import f1 as fff1

时间模块

​ 时间戳,从1970年1月1日午夜到程序运行时的秒数。

#时间模块是常用的内置模块
'''time模块'''
import time
print(time.time())     #1629376026.7200608
#年月日2021-08-19
print(time.strftime('%Y-%m-%d'))
#年月日时分秒2021-08-19 20:28:18
print(time.strftime('%Y-%m-%d %H:%M:%S'))
#阻塞.sleep括号内的秒数
print('稍等一下')
time.sleep(3)
print('来了')
# 通过时间差得出函数index执行的时间
def index():
    print('1,2,3 开始')
    time.sleep(3)
    print('哈哈哈')
start_time = time.time()
index()
end_time = time.time()
print(end_time - start_time)

image

'''时间模块也可以用datetime模块'''
import datetime
#返回当前年月日
print(datetime.date.today())
#返回当前年月日时分秒
print(datetime.datetime.today())
#可通过.timedelta函数获取加减指定时间后的时间
td = datetime.date.today()
td1 = datetime.timedelta(days=7)
td2 = datetime.timedelta(days=-7)
print(td + td1)
print(td + td2)
posted @ 2021-08-19 21:02  Leguan001  阅读(36)  评论(0)    收藏  举报