python开发day12

1. 装饰器 decoratos  (专业提高往篇)

什么是装饰器

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

作用:

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

函数装饰器

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

语法:

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

 语句块

扫描二维码关注公众号,回复: 1860802 查看本文章

 Return 函数对象

@装饰器函数名,< 换行>

def 函数名(形参列表):

语句块

示例:

 def mydeco(fn):

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

    def fx():

        print("fx被调用")

    return fx

@ mydeco# 这里加装饰器和不加装饰器有何区别

def myfunc():

    print("函数myfunc被调用")

myfunc()

myfunc()# 调用第二次

myfunc()# 调用第三次

结果为:

装饰器函数被调用了.....

fx被调用

fx被调用

fx被调用

在不改变原函数和调用者行为的情况下来改变原有函数功能

示例:

写一个操作数据的函数(此函数用来示意存钱操作)

#此示例示意在加一个装饰器用来添加余额变动提示功能:

#d

def send_message(fn):

    def fy(name,x):

        fn(name,x)#先办业务

        print('发短信给',name,'办理了',x,'')

    return fy

#小赵写了一个装饰器函数:

def privillage_check(fn):

    def fx(name,x):

        print('正在检查权限...')

        fn(name,x)#权限通过可以调用相应函数

    return fx

#操作数据的函数(函数用来示意存钱操作)

@send_message#1

@privillage_check#2

def savemoney(name,x):#3

    print(name,'存钱',x,'')

    #用来存钱a

@privillage_check

def withdraw(name,x):

    print(name,'取钱',x,'')

    #用来取钱b

savemoney('xiaozhang',200)

savemoney('xiaoyuan',500)

withdraw('xiaoqi',400)

    #c写的程序

结果为:

正在检查权限...

xiaozhang 存钱 200

发短信给 xiaozhang 办理了 200

正在检查权限...

xiaoyuan 存钱 500

发短信给 xiaoyuan 办理了 500

正在检查权限...

xiaoqi 取钱 400

2.函数的文档字符串

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

语法:

def 函数名(形参列表):

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

函数语句块

示例:

Def hello():

’’’此函数用来打招呼…

这是函数的文档字符串’’’

Pass

>>> help(hello)

说明:

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

2. 在交互模式下输入:hello(函数名)

可以查看函数文档字符串

函数的__doc__属性

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

函数的__name__属性

__name__用来记录函数的名称

3. 函数的定义语法:

@装饰器1

@装饰器2

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

’’’文档字符串’’’

语句块

面试题 , 思考?

# L = [1,2,3]

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

#     lst.append(n)

#     print(lst)

# f(4,L)

# f(5,L)

# f(100)

# f(200)

# f(300)

结果为

[1, 2, 3, 4]

[1, 2, 3, 4, 5]

[100]

[100, 200]

[100, 200, 300]

如果 lst = None

L = [1,2,3]

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

    if lst is None:

        lst = []

    lst.append(n)

    print(lst)

f(4,L)

f(5,L)

f(100)

f(200)

f(300)

结果为:

[1, 2, 3, 4]

[1, 2, 3, 4, 5]

[100]

[200]

[300]

模块 Module

什么是模块

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

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

模块的作用:

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

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

模块的分类:

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

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

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

4, 用户自己 编写的模块(可以作为其他人的第三方模块)

模块的导入 import

import 语句

语法:

Import 模块名1[as模块新名1],模块名2[as模块新名2]

示例:

Import   math  #导入数学模块

Import  sysos #导入sys os 模块

Import  copy  as  cp

作用:

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

属性用法:

模块名·属性名

helpobj) 可以查看模块的文档字符串

练习:

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

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

(要求用math模块内的函数和变量)

答案:

1

import math

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

r = int(input("请输入一个圆的半径: "))

area = math.pi * r ** 2

print("面积是: ", area)

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

area = float(input("请输入一个圆的面积: "))

r = math.sqrt(area / math.pi)

print("半径是: ", r)

 2

import math as m

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

r = int(input("请输入一个圆的半径: "))

area = m.pi * r ** 2

print("面积是: ", area)

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

area = float(input("请输入一个圆的面积: "))

r = m.sqrt(area / m.pi)

print("半径是: ", r)

3

# import math as m

from math import pi, sqrt

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

r = int(input("请输入一个圆的半径: "))

area = pi * r ** 2

print("面积是: ", area)

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

area = float(input("请输入一个圆的面积: "))

r = sqrt(area / pi)

print("半径是: ", r)

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   *

dir  函数

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

作用:

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

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

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

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

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

数学模块 math

数学模块用法:

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 (xy次方)

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

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

时间模块用法:

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、写一个程序,输入您的出生日期

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

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

   答案(1

import time

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

year = int(input("请输入年: "))

month = int(input("请输入月: "))

day = int(input("请输入日: "))

# 得到出生时距离1970年的秒数

birth_second = time.mktime((year,

                            month,

                            day,

                            0,

                            0,

                            0,

                            0,

                            0,

                            0))

cur_second = time.time()  # 得到当前距离1970年的秒数

# 得到当前已生出多少秒

life_second = cur_second - birth_second

print("您已出生%d" % (life_second / 60 / 60 // 24))

# 算出你出生的那天是星期几

birth_tuple = time.localtime(birth_second)

week = {0: "星期一",

        1: "星期二",

        2: "星期三",

        3: "星期四",

        4: "星期五",

        5: "星期六",

        6: "星期日"}

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

HH:MM:SS

答案:

# import time

# def run_clock():

#     while True:

#         t = time.localtime()  # 得到本地时间元组

#         hms = t[3:6]  # 切片取出时,分,秒

#         print("%02d:%02d:%02d" % hms,end='\r')  # hms 绑定有三个元素的元组

#         time.sleep(1)

# if __name__ == '__main__':

#     run_clock()

3、编写一个闹钟程序,启动时设置定时时间,到时间后打印‘时间到’然后退出

# import time

# def alarm(hour, minute):

#     while True:

#         t = time.localtime()  # 得到元组

#         hm = t[3:5]  # 得到当前时间 的 小时和分钟

#         print('%02d:%02d:%02d' % t[3:6],end='\r')

#         if hm == (hour, minute):

#             print("时间到!  ")

#             return

#         time.sleep(0.01)

# if __name__ == '__main__':

#     h = int(input("请输入定时的小时: "))

#     m = int(input("请输入定时的分钟: "))

#     alarm(h, m)

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

Sn = 1+1+1/2+1/3+1/4+…1/n

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

n50时,Sn的值

答案:

# import math

# def fun(n):

#     # 方法1

#     # Sn = 0

#     # for i in range(0, n + 1):

#     #     Sn += 1 / math.factorial(i)

#     # return Sn

#     # 方法2

#     return sum(map(lambda x: 1/math.factorial(x), range(n + 1)))

# print(fun(50))

猜你喜欢

转载自blog.csdn.net/weixin_42312995/article/details/80753066