今天主要是学习了Python的time和闭包这些新知识。还有一些文本规范之类的。
用的工具是pycharm。在官网下载社区版就可以免费使用了。
pycharm里的代码对齐快捷键是:crtl+alt+L
还有就是Python与其他语言不同的一点是:在def 定义函数语句之前要空出两行。(否则就会出现波浪线)
今日学习摘要:
(一)datetime和time
import datetime
import time
首先需要引入datetime和time模块
(1)获取当前时间
current_time = datetime.datetime.now() # 输出当前时间
print("默认格式:{}".format(current_time))
(2)年月日时分秒
print("year:{}".format(current_time.year)) # 输出年月日时分秒
print("month:{}".format(current_time.month))
print("day:{}".format(current_time.day))
print("hour:{}".format(current_time.hour))
print("minutes:{}".format(current_time.minute))
print("second:{}".format(current_time.second))
(3)sleep()休眠函数
可以用来计算时间间隔方面、多线程也会用到:time.sleep(seconds)
time.sleep(5) # sleep
last_time = datetime.datetime.now()
print("last_time:{}".format(last_time))
print("时间差:{}".format(last_time - current_time)) # 计算时间间隔
(4)时间的自定义格式 strftime()
format_time = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")
print("自定义格式:{}".format(format_time))
(5)对传入的时间戳进行格式化 fromtimestamp(timestamp)
时间戳的获取:ts=time.time()
ts = time.time()
print(datetime.datetime.fromtimestamp(ts)) # 默认格式化
print(datetime.datetime.fromtimestamp(ts).strftime("%Y/%m/%d %H:%M:%S"))
(6) 时间间隔类 timedelta
days = datetime.timedelta(days=1)
today = datetime.datetime.today() # 今天的日期
days = datetime.timedelta(days=1)
yesterday = today - days
print("昨天的日期:{}".format(yesterday.strftime("%Y-%m-%d")))
(二)闭包
闭包是指当一个嵌套函数的内部函数引用了外部函数的变量,外边函数的返回值是内部函数的引用。
# 闭包
def sum_(x, y):
return x + y
def sum_outside(x):
def sum_inside(y):
return x + y
return sum_inside # 切记要把内部函数返回
sm1 = sum_(1, 2) # add
print("1+2={}".format(sm1))
print("sm1的类型:{}".format(type(sm1))) # type()输出变量类型
sm_func = sum_outside(10)
print("sm_func={}".format(sm_func))
print("sm_func's type={}".format(type(sm_func))) # type=function
运行结果
sm_func返回得到的是一个函数类型,0x00000225DC45AEE0是sum_inside的地址。因为返回的是一个函数,故sm_func是一个函数,可被正常调用。但外部变量x=10;
sm2 = sm_func(1)
print("sm2={}".format(sm2))
相当于10+1;得到11,可用type()去求sm2的类型 是int。
累加器
def counter_outside(base=0):
cnt_base = [base]
def counter(step=1):
cnt_base[0] += step
return cnt_base[0]
return counter
counter = counter_outside() # counter=function
print("1:{}".format(counter()))
print("2:{}".format(counter()))
print("3:{}".format(counter()))
得到结果是1,2,3.
(2)装饰器
将内部需要调用的函数通过外部函数引入。
# 装饰器
def dog(func):
def say():
print("123456")
func()
print("345678")
return say
def hello():
print("fffffff")
func_outside = dog(hello)
func_outside()
运算结果
也可写为如下,省去传参步骤,可读性更强。
def dog(func):
def say():
print("123456")
func()
print("345678")
return say
@dog
def hello():
print("fffffff")
hello()
函数不定长参数(使传参不受个数限制)
不定长参数接受任意个数的参数传入
def yun_suan(func):
def counter(*args):
start_time = time.time()
func(*args)
end_time = time.time()
return counter
@yun_suan
def sum_1(x, y):
print("{}+{}={}".format(x, y, x+y))
@yun_suan
def multip(x, y, z):
print("{}*{}*{}={}".format(x, y, z, x*y*z))
sum_1(1, 2)
multip(1, 2, 3)
不定长参数的装饰器可以用于更多的函数,感觉很实用。
最近两天的Python学习就是这些,有问题请多指教