Python学习记——(12)装饰器、模块、time、math

装饰器 decorators(专业提高往篇)

问题:

  函数名是变量,它绑定一个函数

  函数名 /  函数名()  区别

什么是装饰器

  装饰器是一个函数,主要作用是用来包装另一个函数或类(后面会讲)

  作用:是在不改变原函数名(或类名)的情况下改变被包装对象的行为

函数装饰器:函数装饰器是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数

语法:

    def 装饰器函数名(参数):

        语句块

        return 函数对象

    @装饰器函数名<换行>

    def 函数名(形参列表):

        语句块    

看懂下面代码的调用关系及打印结果

  def mydeco(fn):

      print('装饰器函数被调用了....')

      def fx():

          print('fx被调用')

      return fx

  @ mydeco  # 这里加装饰器和不加装饰器结果一样吗?为什么?

  def myfunc():

      print('函数myfunc被调用')

  myfunc()

  myfunc()  # 调用第二次

  myfunc()  # 调用第三次

函数的文档字符串

  函数内第一次未赋值给任何变量的字符串是此函数的文档字符串

  语法:

    def 函数名(形参列表):

        '''函数的文档字符串'''

        函数语句块

  示例:

    def hello():

        '''此函数用来打招呼...

        这是函数的文档字符串

        '''

        pass

    >>> help(hello)

  说明:

    1. 文档字符串通常用来说明本函数的功能和使用方法

    2. 在交互模式下,输入:help(函数名) 可以查看函数的文档字符串

函数的 __doc__ 属性

  __doc__ 属性用于记录文档字符串

函数的 __name__ 属性

  __name__ 用于记录函数的名称

函数的定义语法:

  @装饰器1

  @装饰器2

  ...

  def 函数名(位置形参, *元组形参(或*), 命名关键字形参, **字典形参):

      '''文档字符串'''

      语句块

面试题,思考?

L = [1, 2, 3]

def f(n=0, lst=[]):

     lst.append(n)

     print(lst)

f(4, L)  # 打印结果是什么?·[1, 2, 3, 4]

f(5, L)  # 打印结果是什么? [1, 2, 3, 4, 5]

f(100)  [100]

f(200)  # 打印结果是什么?为什么?  [100, 200]

如下代码的打印结果是什么?

L = [1, 2, 3]

def f(n=0, lst=None):

     if lst is None:

        lst = []

     lst.append(n)

     print(lst)

f(4, L)  # 打印结果是什么?·[1, 2, 3, 4]

f(5, L)  # 打印结果是什么? [1, 2, 3, 4, 5]

f(100)  #[100]

f(200)  # 打印结果是什么?为什么?  [200]

模块 Module

  什么是模块

    模块是一个包含有一系列数据,函数,类等组成的程序组

    模块是一个文件,模块文件名通常以'.py'结尾

  模块的作用:

    1. 让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰

    2. 模块中的变量,函数和类等可提供给其它模块或程序使用

  模块的分类:

    1. 内置模块(builtins) 在解析器的内部可以直接使用

    2. 标准库模块,安装python时已安装具可直接使用

    3. 第三方模块(通常为开源), 需要自己安装

    4. 用户自己编定的模块(可以作为其它人的第三方模块)

模块的导入 import

import 语句

  语法: import 模块名1 [as 模块新名1], 模块名2[as 模块新名2], ....

  示例:

    import math  # 导入数学模块

    import sys, os  # 导入sys和os模块

    import copy as cp

  作用:将一个模块整体导入到当前模块中

  属性用法: 模块名.属性名

  help(obj) 可以查看模块的文档字符串

练习:

  1. 输入一个圆的半径,打印出这个圆的面积

  2. 输入一个圆的面积,打印出这个圆的半径(要求用math模块内的函数和变量)

from import 语句

  语法:from 模块名 import 模块属性名 [as 属性新名1], 模块属性名2 [as 属性新名2]

  作用:将某模块的一个或多个属性导入到当前模块的作用域

  示例:

    from math import pi

    from math import sin

    from math import factorial as fac

from import * 语句

  语法:from 模块名 import *

  作用:将某模块的所有属性导入到当前的模块

  示例:

    from math import *

    s = sin(pi/2)

    print(factorial(10))

dir 函数

  dir([对象])   返回一个字符串列表

  作用:

    1. 如果没有参数调用,则返回当前作用域内所有变量的列表

    2. 如果给定一个对象作为参数,则返回这个对象的所在变量(属性)列表

       1) 对于一个模块,返回这个模块的全部变量

       2) 对于一个类对象,返回类对象的所有变量,并递归基类对象的所有变量

       3) 对于其它对象,返回所有变量、类变量和基类变量

数学模块 math

·  模块名: math

·注:

olinux下为内建模块

oMac OS下为标准库模块

数学模块用法:

import math

# 或

from math import *

变量 描述

math.e 自然对数的底e

math.pi 圆周率pi

函数名 描述

math.ceil(x) 对x向上取整,比如x=1.2,返回2

math.floor(x) 对x向下取整,比如x=1.2,返回1

math.sqrt(x) 返回x的平方根

math.factorial(x) 求x的阶乘

math.log(x[, base]) 返回以base为底x的对数, 如果不给出base,则以自然对数e为底

math.log10(x) 求以10为底x的对数

math.pow(x, y) 返回 x**y (x的y次方)

math.fabs(x) 返回浮点数x的绝对值

角度和弧度degrees互换

math.degree(x) 将弧度x转换为角度

math.radians(x) 将角度x转换为弧度

三角函数

math.sin(x) 返回x的正弦(x为弧度)

math.cos(x) 返回x的余弦(x为弧度)

math.tan(x) 返回x的正切(x为弧度)

math.asin(x) 返回x的反正弦(返回值为为弧度)

math.acos(x) 返回x的反余弦(返回值为为弧度)

math.atan(x) 返回x的反正切(返回值为为弧度)

时间模块 time

  此模块提供了时间相关的函数

时间简介

公元纪年是从公元 0000年1月1日0时开始的

计算机元年是从1970年1月1日0时开始的,此时时间为0,之后每过一秒时间+1

UTC 时间 (Coordinated Universal Time) 是从Greenwich时间开始计算的.UTC 时间不会因时区问题而产生错误

DST 阳光节约时间(Daylight Saving Time),又称夏令时, 是一个经过日照时间修正后的时间

时间元组

·时间元组是一个9个整型元素组成的,这九个元素自前至后依次为:

o四位的年(如: 1993)

o月 (1-12)

o日 (1-31)

o时 (0-23)

o分 (0-59)

o秒 (0-59)

o星期几 (0-6, 周一是 0)

o元旦开始日 (1-366)

o夏令时修正时间 (-1, 0 or 1).

·注:如果年份值小于100,则会自动转换为加上1900后的值

模块名: time

时间模块用法:

import time

# 或

from time import xxx

# 或

from time import *

变量 描述

time.altzone 夏令时时间与UTC时间差(秒为单位)

time.daylight 夏令时校正时间

time.timezone 本地区时间与UTC时间差(秒为单位)

time.tzname 时区名字的元组, 第一个名字为未经夏令时修正的时区名,

第一个名字为经夏令时修正后的时区名

注: CST为中国标准时间(China Standard Time UTC+8:00)

函数名 描述

time.time() 返回从计算机元年至当前时间的秒数的浮点数(UTC时间为准)

time.sleep(secs) 让程序按给定秒数的浮点数睡眠一段时间

time.gmtime([secs]) 用给定秒数转换为用UTC表达的时间元组

(缺省返回当前时间元组)

time.asctime([tuple]) 将时间元组转换为日期时间字符串

time.mktime(tuple) 将本地日期时间元组转换为新纪元秒数时间(UTC为准)

time.localtime([secs]) 将UTC秒数时间转换为日期元组(以本地时间为准)

练习:

  写一个程序,输入您的出生日期

    1) 算出你已经出生多少天?

    2) 算出你出生的那天是星期几

练习:

  1. 写一个程序,以电子时间格式显示时间:

     HH:MM:SS

    (要求:不停显示当前时间即可)

  2. 编写一个闹钟程序,启动时设置定时时间,到时间后打印"时间到" 然后退出

  3. 编写函数fun,其功能是求下列多项式的和:

    Sn = 1 + 1/1! + 1/2! + 1/3! + 1/4! +...+ 1/n!

    建议用数学模块中的math.factorial来求

    当n为50时,Sn的值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值