2021-09-25 Python入门(1)

本文介绍了Python中的时间模块datetime和time的使用,包括获取当前时间、格式化时间、时间间隔计算等。同时,深入探讨了闭包的概念,并给出了闭包的示例。此外,还讲解了装饰器的应用,展示了如何使用装饰器来增强函数功能。最后,提到了函数不定长参数及其在装饰器中的应用。
摘要由CSDN通过智能技术生成

今天主要是学习了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学习就是这些,有问题请多指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值