Python Day11-LEGB-global-时间函数

1.LEGB规则对变量名进行作用域解析

我们已经知道了多个命名空间可以独立存在,而且可以在不同的层次上包含相同的变量名。“作用域”定义了Python在哪一个层次上查找某个“变量名”对应的对象。接下来的问题就是:“Python在查找‘名称-对象’映射时,是按照什么顺序对命名空间的不同层次进行查找的?”

答案就是:使用的是LEGB规则,表示的是Local -> Enclosed -> Global -> Built-in,其中的箭头方向表示的是搜索顺序。

  • Local 可能是在一个函数或者类方法内部。
  • Enclosed 可能是嵌套函数内,比如说 一个函数包裹在另一个函数内部。
  • Global 代表的是执行脚本自身的最高层次。
  • Built-in 是Python为自身保留的特殊名称。
    因此,如果某个name:object映射在局部(local)命名空间中没有找到,接下来就会在闭包作用域(enclosed)进行搜索,如果闭包作用域也没有找到,Python就会到全局(global)命名空间中进行查找,最后会在内建(built-in)命名空间搜索(注:如果一个名称在所有命名空间中都没有找到,就会产生一个NameError)。

2.global与nonlocal

  • global:函数内部访问全局变量时(改变值)需要在函数体内加global
  • nonlocal count:在内置函数中访问外部函数变量(改变),需要在内置函数中添加nonlocal

第一,两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。

第二,两者使用的范围不同。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误

3.时间函数

  • 用time模块的strftime函数时间日期的格式化时间
import time
print(time.strftime('%Y/%m/%d %H:%M:%S %A'))
格式符号 说明 格式符号 说明 格式 说明
%Y 年(2019) %B 月(June) %A 星期(Thursday)
%y 年(19) %b 月(Jun) %a 星期(Thu)
%I 时(02) %m 月(06) %w 星期(4)(0~6)(0是周日)
%H 时(14) %M 分(20) %S 秒(34)
%j 今年天数(171) %U 今年星期数(24) %d 日(20)
%x ( 06/20/19) %X (14:20:34) %c (Thu Jun 20 14:20:34 2019)

时间戳:从1970/01/01 00:00:00开始的秒偏移量

函数,【】可省略 说明
time.clock() 当前CPU时间(浮点型)
time.time() 当前的时间戳(浮点型)
time.mktime(时间元组) 返回当时的时间戳
time.localtime(【时间戳】) 返回当时的时间元组(默认现在)
time.gmtime(时间戳) 返回当时的时间元组(0°经线时间)
time.strptime(字符串,格式) 将字符串格式化为时间元组
time.strftime(格式) 将时间元组格式化为字符串
time.asctime(【时间元组】) 相当于time.strftime(’%c’【,时间元组】)
time.ctime(【时间戳】) 相当于time.asctime(localtime(时间戳))
time.tzname 本地时区名称
time.altzone 夏令时,离0°经线时间的秒偏移量
time.tiemzone 非夏令时,离0°经线时间的秒偏移量
time.sleep(秒数) 推迟调用线程的运行

时间元组struct_time

字段 说明
tm_year
tm_mon 月(1~12)
tm_mday 日(1~31)
tm_hour 时(0~23)
tm_min 分(0~59)
tm_sec 秒(0~61)(闰秒)
tm_wday 星期(0~6)(周一是0)
tm_yday 天(1~366)(闰年)
tm_isdst 夏令时(-1,0,1)
 import time
time.sleep(10)#休眠,秒为单位
time.time() #当前时间 秒
d = time.strptime("2020-1-13 11:16:25","%Y-%m-%d %H:%M:%S")  str-->tuple
d = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())   str<--tuple
time.clock() #cpu时间
发布了9 篇原创文章 · 获赞 0 · 访问量 131

猜你喜欢

转载自blog.csdn.net/m0_46243410/article/details/104398944