吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4826|回复: 17
收起左侧

[Python 转载] 【Python】人工智能全栈工程师(0基础到精通)教程 第十九课

[复制链接]
ParisGabriel 发表于 2018-7-17 23:58
本帖最后由 ParisGabriel 于 2018-7-18 00:05 编辑




ParisGabriel



感谢 大家的支持                                全部课程 原文地址 :
                                                                           http://www.cnblogs.com/ParisGabriel/tag/Python/                                                       


                    每天坚持手写  一天一篇 点个订阅吧  决定坚持几年 全栈工程师(包含:python、爬虫、Web、人工智能、h5等      讲完接着 java、黑客攻防 、渗透、                                                               易语言(比较简单学完python基本就会了)、等等到时候再说....  IT无止境!   灰常感谢    当个死粉也阔以                      

                                                                                Python人工智能从入门到精通

装饰器 decorators(专业提高篇)
  装饰器是一个函数 ,主要用来包装另一个函数或类
  装饰的目的是在 不改变函数的的原名(或类名)的情况下
  改变对象的行为
函数装饰器
  函数装饰器指装饰器传入的是一个函数,返回的也是一个函数
  原理就是改变原变量绑定的函数  语法:
  def 装饰器函数名(参数):
    语句块
    return 函数对象      例如:
[Python] 纯文本查看 复制代码
def mydeco(fn):
    def fx():
        print("=========这是myfunc调用之前==========")
        fn()
        print('---------这是myfunc调用之后----------')
    return fx


@mydeco
def myfunc():
    print("myfunc被调用")


# myfunc = mydeco(myfunc)  # 原理是改变原变量绑定的函数


myfunc()
myfunc()
myfunc()

[Python] 纯文本查看 复制代码
def message_send(fn):
    def fy(name, x):
        fn(name, x)
        print(name, "办理了", x, '元的业务![工商银行]')
    return fy


# ----- 以下是小王写的装饰器函数用来进行权限验证----
def privileged_check(fn):
    def fx(name, x):
        print("正在检查权限.... 通过")
        fn(name, x)
    return fx


# ------- 以下是老魏写的程序----------
@privileged_check
def save_money(name, x):  # 存钱
    print(name, '存钱:', x, '元')

# myfunc = mydeco(myfunc)
@message_send
@privileged_check
def withdraw(name, x):
    print(name, '取钱:', x, '元')


# -------以下是调用者小李写的程序
save_money('小张', 200)
save_money('小赵', 500)
withdraw('小杨', 300)

函数的文档字符串:
  函数内第一次未被赋值给任何变量的字符串是此函数的文档字符串
def 函数名(参数列表):
  函数文档字符串
  函数语句块
  help(函数变量) 查看函数信息
  fa.__doc__ 查看文档字符串
函数定义语句(def 语句)的完整语法:
  [ @装饰器]
  [ @装饰器]
  [ ... ]
  def 函数名([位置形参], [ *元组形参], [命名关键字形参], [**字典形参])
  文档字符串 模块 Module:
  模块是一个包含有一系列数据、函数、类等组成的程序组
  模块是一个文件,模块文件通常以.py结尾
  作用:
    让一些相关的数据、函数、类等有逻辑的组织在一起,使用逻辑结构清晰
    模块的数据、函数、类等 可提供给其他模块或程序使用
模块的分类;
  内建模块(builtins)在解析器的内可以直接使用、
  标准库模块,安装python时已安装且可以使用
  第三方模块(通常开源),需要自己安装
  用户自己编写模块(可以作为其他人的第三方模块)
模块的导入:
  import 语句:
  inport 模块名1 [ as 模块新名1], 模块2 [as 模块2新名], .........
  作用:
    将某模块整体导入到当前模块中
  impoer math 数学模块
  impoer sys os copy  用法:
    模块名.属性名
    模块名.函数属性名(实参)
from import
  语法:
    from 模块名 import 模块属性名1[as 属性新名1]
    模块属性名2[as 属性名2]
  作用:
    将谋模块的一个或多个属性导入到当前模块的作用域
from math import pi as p
from import *
  语法:
     from 模块名 import 模块属性名1 [as 属性新名1], 模块属性名2 [as 属性新名2], ....
  作用:
    将某模块的所有属性全部导入到当前模块
dir函数:
  dir([对象]) 返回一个字符串的列表
  说明:
    如果没有给参数调用,则返回当前作用域内的所有变量的列表
    如果给定一个对象作为参数,则返回这个对象的所有变量类型列表
    对于一个模块,返回这个模块的全部属性
    对于一个类 ,返回这个类的所有变量 ,并递归基类对象的所有变量
    对于他的对象,所有类变量和基类变量
内建模块 :
  math模块:数学模块 math
  • 模块名: math
  • 注:
    • linux下为内建模块
    • Mac OS下为标准库模块

数学模块用法:
import math# 或from math import *
[td]
变量描述
math.e自然对数的底e
math.pi圆周率pi
[td]
函数名描述
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个整型元素组成的,这九个元素自前至后依次为:
    • 四位的年(如: 1993)
    • 月 (1-12)
    • 日 (1-31)
    • 时 (0-23)
    • 分 (0-59)
    • 秒 (0-59)
    • 星期几 (0-6, 周一是 0)
    • 元旦开始日 (1-366)
    • 夏令时修正时间 (-1, 0 or 1).
  • 注:
    • 如果年份值小于100,则会自动转换为加上1900后的值

模块名: time时间模块用法:
import time# 或from time import xxx# 或from time import *
[td]
变量描述
time.altzone夏令时时间与UTC时间差(秒为单位)
time.daylight夏令时校正时间
time.timezone本地区时间与UTC时间差(秒为单位)
time.tzname时区名字的元组, 第一个名字为未经夏令时修正的时区名,
第一个名字为经夏令时修正后的时区名
注: CST为中国标准时间(China Standard Time UTC+8:00)[td]
函数名描述
time.time()返回从计算机元年至当前时间的秒数的浮点数(UTC时间为准)
time.sleep(secs)让程序按给定秒数的浮点数睡眠一段时间
time.gmtime([secs])用给定秒数转换为用UTC表达的时间元组
(缺省返回当前时间元组)
time.asctime([tuple])将时间元组转换为日期时间字符串
time.mktime(tuple)将本地日期时间元组转换为新纪元秒数时间(UTC为准)
time.localtime([secs])将UTC秒数时间转换为日期元组(以本地时间为准)
练习:
1. 请编写函数fun 其功能是计算下列多项式的和:
fn = 1 + 1/1! + 1/2! + 1/3! + 1/4! + .. + 1/n!
(建义用数学模块的factorial实现)求当n 等于100时,fn的值
看一下fn(100)的值是什么答案:

[Python] 纯文本查看 复制代码
import math
def fun(n):
    if n == 1:
        return 1 + 1 / 1
    return fun(n - 1) + (1 /  math.factorial(n))
print(fun(100))

2. 写一个程序,以电子时钟格式:
HH:MM:SS格式显示时间
要求每隔一秒变化一次答案:
[Python] 纯文本查看 复制代码
import time

while True:
    x = time.time() % (3600 * 24)
    h = x // 3600
    m = (x % 3600) // 60
    s = x % 60
    time.sleep(1)
    print('%02d:%02d:%02d' % (h + 8, m, s))

[Python] 纯文本查看 复制代码
# 方法二:

import time
while True:
    time.sleep(1)
    s = time.localtime()
    print('%02d:%02d:%02d' % (s[3], s[4], s[5]))

3 写函数f(n)求下多项式的和
fn = 1/1 - 1/3 + 1/5 - 1/7 + 1/9 .... 1/(2*n-1)的和求当n取值为1000000时,
1) 打印 f(1000000) 的值
2) 打印 f(1000000) * 4的值,看看是什么答案:
[Python] 纯文本查看 复制代码
def fn(n):[/size][/font][/color]    s = 0
    for x in range(1, n):
        if x % 2 == 0:
            s -= 1 / (x * 2 - 1)
        else:
            s += 1 / (x * 2 - 1)
    return s * 4  # 此处乘4
print(fn(1000000))


[Python] 纯文本查看 复制代码
方法二:
def fn(n):
    s = 0
    for x in range(1, n):
        if x % 2 != 0:
            s += (1 / (x * 2 - 1)) - (1 / ((x * 2 + 2) - 1))
    return s * 4
print(fn(1000000))



练习:
1. 输入一个圆的半径,打印出这个圆的面积
2. 输入一个圆的面积,打印出这个圆的半径(要求用math模块内的函数和数据实现)答案:
[Python] 纯文本查看 复制代码
import math
r = float(input("please input radius of a circle:"))
s = math.pi * r ** 2
print(s)
s = float(input("please input acreage of a circle:"))
x = s / math.pi
r = math.sqrt(x)
print(r)

  装饰器 decorators装饰器 顾名思义 在不改变原函数的基础上改变功能 就好比在卧室里贴壁纸
壁纸是后来加上去的 但是墙还是墙 没有任何变化 不管我是贴上去还是撕下来
不可能说吧墙砸烂再贴  墙是不需要变化的 我就可以改变墙的外观
墙就是原函数
壁纸就是内部装饰函数
装饰器本身也是一个函数 但是他要传入一个函数 返回一个函数
传入的函数: 形参就是原函数
返回的函数:就是装饰函数内部嵌套的函数 也是最终装饰函数 是它最终调用的原函数
这里利用内部嵌套函数调用外部函数的形参变量(原函数)用内部嵌套函数来装饰原函数
返回后的函数是内部嵌套的函数 外部函数被释放 这也是一个典型的闭包函数
调用装饰函数 @message_send 等同于 myfunc = mydeco(myfunc)
可以有多层装饰最外层依次包含内部
函数的文档字符串 就是给你写的函数加一个注解 但是这个不等同与注释 因为注释不会被解释执行器所识别
他是一个字符串形式的
函数名.__doc__ 查看该函数注解
4种模块:
内建模块是解释执行器自带的模块
标准库模块是安装python时自动安装的模块
第三方模块是自己下载安装是的模块
还有一种就是自己写的模块 可以自己用 也可以给别人用 相当于自定义第三方模块
import 调用模块 [一系列参数...]
math 、 time 标准库模块 直接导入就可以

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
imk + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小黑LLB 发表于 2019-2-3 19:25
楼主 写的好厉害 啊 整理的好全面 而且还有自己的感悟 赞赞赞
装饰器的例子 我喜欢,说的非常生动!!!
 楼主| ParisGabriel 发表于 2018-7-18 00:00
dy18 发表于 2018-7-18 00:06
131舍长 发表于 2018-7-18 00:11
深夜放毒
w460270218 发表于 2018-7-18 00:17
过来支持一下!
囧囧有神 发表于 2018-7-18 00:28
为什么觉的python越来越火le!
hsppc 发表于 2018-7-18 07:38
感谢分享,我要从头看到尾,正在慢慢看。
li645944229 发表于 2018-7-18 08:37
你写的?能坚持吗……
Luck鑫 发表于 2018-7-18 08:40
感谢分享
萌Honker 发表于 2018-7-18 08:42
支持支持
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 11:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表