首页 文章 精选 留言 我的

精选列表

搜索[快速入门],共10000篇文章
优秀的个人博客,低调大师

开发神技能 | Python Mock 的入门

Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西。准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。简单的说,mock库用于如下的场景: 假设你开发的项目叫a,里面包含了一个模块b,模块b中的一个函数c(也就是a.b.c)在工作的时候需要调用发送请求给特定的服务器来得到一个JSON返回值,然后根据这个返回值来做处理。如果要为a.b.c函数写一个单元测试,该如何做? 一个简单的办法是搭建一个测试的服务器,在单元测试的时候,让a.b.c函数和这个测试服务器交互。但是这种做法有两个问题: 测试服务器可能很不好搭建,或者搭建效率很低。 你搭建的测试服务器可能无法返回所有可能的值,或者需要大量的工作才能达到这个目的。 那么如何在没有测试服务器的情况下进行上面这种情况的单元测试呢?Mock模块就是答案。上面已经说过了,mock模块可以替换Python对象。我们假设a.b.c的代码如下: import requests def c(url): resp = requests.get(url) further process with resp 如果利用mock模块,那么就可以达到这样的效果:使用一个mock对象替换掉上面的requests.get函数,然后执行函数c时,c调用requests.get的返回值就能够由我们的mock对象来决定,而不需要服务器的参与。简单的说,就是我们用一个mock对象替换掉c函数和服务器交互的过程。你一定很好奇这个功能是如何实现的,这个是mock模块内部的实现机制,不在本文的讨论范围。本文主要讨论如何用mock模块来解决上面提到的这种单元测试场景。 Mock的安装和导入 在Python 3.3以前的版本中,需要另外安装mock模块,可以使用pip命令来安装: $ sudo pip install mock 然后在代码中就可以直接import进来: import mock 从Python 3.3开始,mock模块已经被合并到标准库中,被命为unittest.mock,可以直接import进来使用: from unittest import mock Mock对象 基本用法 Mock对象是mock模块中最重要的概念。Mock对象就是mock模块中的一个类的实例,这个类的实例可以用来替换其他的Python对象,来达到模拟的效果。Mock类的定义如下: class Mock(spec=None, side_effect=None, return_value=DEFAULT, wraps=None, name=None, spec_set=None, **kwargs) 这里给出这个定义只是要说明下Mock对象其实就是个Python类而已,当然,它内部的实现是很巧妙的,有兴趣的可以去看mock模块的代码。 Mock对象的一般用法是这样的: 找到你要替换的对象,这个对象可以是一个类,或者是一个函数,或者是一个类实例。 然后实例化Mock类得到一个mock对象,并且设置这个mock对象的行为,比如被调用的时候返回什么值,被访问成员的时候返回什么值等。 使用这个mock对象替换掉我们想替换的对象,也就是步骤1中确定的对象。 之后就可以开始写测试代码,这个时候我们可以保证我们替换掉的对象在测试用例执行的过程中行为和我们预设的一样。 举个例子来说:我们有一个简单的客户端实现,用来访问一个URL,当访问正常时,需要返回状态码200,不正常时,需要返回状态码404。首先,我们的客户端代码实现如下: !/usr/bin/env python -- coding: utf-8 -- import requests def send_request(url): r = requests.get(url) return r.status_code def visit_ustack(): return send_request('http://www.ustack.com') 外部模块调用visit_ustack()来访问UnitedStack的官网。下面我们使用mock对象在单元测试中分别测试访问正常和访问不正常的情况。 !/usr/bin/env python -- coding: utf-8 -- import unittest import mock import client class TestClient(unittest.TestCase): def test_success_request(self): success_send = mock.Mock(return_value='200') client.send_request = success_send self.assertEqual(client.visit_ustack(), '200') def test_fail_request(self): fail_send = mock.Mock(return_value='404') client.send_request = fail_send self.assertEqual(client.visit_ustack(), '404') 找到要替换的对象:我们需要测试的是visit_ustack这个函数,那么我们需要替换掉send_request这个函数。 实例化Mock类得到一个mock对象,并且设置这个mock对象的行为。在成功测试中,我们设置mock对象的返回值为字符串“200”,在失败测试中,我们设置mock对象的返回值为字符串”404″。 使用这个mock对象替换掉我们想替换的对象。我们替换掉了client.send_request 写测试代码。我们调用client.visit_ustack(),并且期望它的返回值和我们预设的一样。 上面这个就是使用mock对象的基本步骤了。在上面的例子中我们替换了自己写的模块的对象,其实也可以替换标准库和第三方模块的对象,方法是一样的:先import进来,然后替换掉指定的对象就可以了。 稍微高级点的用法 class Mock的参数 上面讲的是mock对象最基本的用法。下面来看看mock对象的稍微高级点的用法(并不是很高级啊,最完整最高级的直接去看mock的文档即可,后面给出)。 先来看看Mock这个类的参数,在上面看到的类定义中,我们知道它有好几个参数,这里介绍最主要的几个: · name: 这个是用来命名一个mock对象,只是起到标识作用,当你print一个mock对象的时候,可以看到它的name。 · return_value: 这个我们刚才使用过了,这个字段可以指定一个值(或者对象),当mock对象被调用时,如果side_effect函数返回的是DEFAULT,则对mock对象的调用会返回return_value指定的值。 · side_effect: 这个参数指向一个可调用对象,一般就是函数。当mock对象被调用时,如果该函数返回值不是DEFAULT时,那么以该函数的返回值作为mock对象调用的返回值。 其他的参数请参考官方文档。 mock对象的自动创建 当访问一个mock对象中不存在的属性时,mock会自动建立一个子mock对象,并且把正在访问的属性指向它,这个功能对于实现多级属性的mock很方便。 client = mock.Mock() client.v2_client.get.return_value = '200' 这个时候,你就得到了一个mock过的client实例,调用该实例的v2_client.get()方法会得到的返回值是”200″。 从上面的例子中还可以看到,指定mock对象的return_value还可以使用属性赋值的方法。 对方法调用进行检查 mock对象有一些方法可以用来检查该对象是否被调用过、被调用时的参数如何、被调用了几次等。实现这些功能可以调用mock对象的方法,具体的可以查看mock的文档。这里我们举个例子。 还是使用上面的代码,这次我们要检查visit_ustack()函数调用send_request()函数时,传递的参数类型是否正确。我们可以像下面这样使用mock对象。 class TestClient(unittest.TestCase): def test_call_send_request_with_right_arguments(self): client.send_request = mock.Mock() client.visit_ustack() self.assertEqual(client.send_request.called, True) call_args = client.send_request.call_args self.assertIsInstance(call_args0, str) Mock对象的called属性表示该mock对象是否被调用过。 Mock对象的call_args表示该mock对象被调用的tuple,tuple的每个成员都是一个mock.call对象。mock.call这个对象代表了一次对mock对象的调用,其内容是一个tuple,含有两个元素,第一个元素是调用mock对象时的位置参数(args),第二个元素是调用mock对象时的关键字参数(*kwargs)。 现在来分析下上面的用例,我们要检查的项目有两个: visit_ustack()调用了send_request() 调用的参数是一个字符串 patch和patch.object 在了解了mock对象之后,我们来看两个方便测试的函数:patch和patch.object。这两个函数都会返回一个mock内部的类实例,这个类是class _patch。返回的这个类实例既可以作为函数的装饰器,也可以作为类的装饰器,也可以作为上下文管理器。使用patch或者patch.object的目的是为了控制mock的范围,意思就是在一个函数范围内,或者一个类的范围内,或者with语句的范围内mock掉一个对象。我们看个代码例子即可: class TestClient(unittest.TestCase): def test_success_request(self): status_code = '200' success_send = mock.Mock(return_value=status_code) with mock.patch('client.send_request', success_send): from client import visit_ustack self.assertEqual(visit_ustack(), status_code) def test_fail_request(self): status_code = '404' fail_send = mock.Mock(return_value=status_code) with mock.patch('client.send_request', fail_send): from client import visit_ustack self.assertEqual(visit_ustack(), status_code) 这个测试类和我们刚才写的第一个测试类一样,包含两个测试,只不过这次不是显示创建一个mock对象并且进行替换,而是使用了patch函数(作为上下文管理器使用)。 patch.object和patch的效果是一样的,只不过用法有点不同。举例来说,同样是上面这个例子,换成patch.object的话是这样的: def test_fail_request(self): status_code = '404' fail_send = mock.Mock(return_value=status_code) with mock.patch.object(client, 'send_request', fail_send): from client import visit_ustack self.assertEqual(visit_ustack(), status_code) 就是替换掉一个对象的指定名称的属性,用法和setattr类似。 如何学习使用mock? 你肯定很奇怪,本文不就是教人使用mock的么?其实不是的,我发现自己在学习mock的过程中遇到的主要困难是不清楚mock能做什么,而不是mock对象到底有哪些函数。因此写这篇文章的主要目的是为了说明mock能做什么。 当你知道了mock能做什么之后,要如何学习并掌握mock呢?最好的方式就是查看阅读官方文档,并在自己的单元测试中使用。 最后,学习mock技能你应该要能够感受到一种控制的快感,就是你能享受控制外部服务的快乐。当你感受到这种快感的时候,你的mock应该就达到熟练使用的水平了。 官方文档 Python 2.7 mock还未加入标准库。 · http://www.voidspace.org.uk/python/mock/index.html Python 3.4 mock已经加入了标准库。 · https://docs.python.org/3.4/library/unittest.mock-examples.html · https://docs.python.org/3.4/library/unittest.mock.html 来自:diabloneo https://segmentfault.com/a/1190000002.jpg"max-width: 100%;min-height: 1em;color: rgb(62, 62, 62);font-size: 16px;white-space: normal;background-color: rgb(255, 255, 255);line-height: 25.6px;text-align: center;box-sizing: border-box !important;word-wrap: break-word !important;">

优秀的个人博客,低调大师

给Android开发的Python入门指南

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 首先是安装和配置环境 安装和配置Python有2种方式: 一种是通过安装Anaconda, Anaconda类似一个包管理工具,里面集合了关于Python的很多信息,包括三方库、网站博客等。此外还有一个比较大的特点是Anaconda里面有很多的数据科学和深度学习方面的库,安装很方便。 另一种是手动安装Python,和IDE工具,比如PyCharm 作为Android开发者,初期还是建议用第二种方式,主要是PyCharm和Android Studio的界面和功能比较类似,能很快地上手。 安装Python和PyCharm Python Python的下载地址:https://www.python.org/downloads/ 需要注意的是现在Python3已经很流行了,所以下载安装最新的Python3.x版本安装就好 安装好以后,打开终端,输入python3不报错,就表示安装成功 PyCharm PyCharm的下载地址:https://www.jetbrains.com/pycharm/download/#section=mac PyCharm下载一个社区版就行,社区版是免费的 PyCharm运行第一个Python 打开PyCharm以后,你应该就会发现,这和我们一直用的Android Studio简直是一个模子里刻出来的! PyCharm里面除了有终端可以直接执行shell命令外,还有Python的终端,可以在里面直接执行Python代码: 编写第一个Python程序 首先我们要新建一个Python文件,也就是以.py结尾的文件 创建完文件以后,就可以编写Python代码了,这里我们简单举例输出'hello world' 文件内容如图中所示,需要注意写明文件的编码格式,同时要想执行这个文件的话,需要声明main入口。直接在代码里面输入main就会有代码提示出来,很方便 代码写完以后,我们就来运行试试。运行可以直接在终端里面运行。运行命令为python3 xxx.py。还有一种更快捷的方式是直接用Pycharm的run图标,就像我们运行Android项目一样。但在运行之前,需要配置下代码的运行环境。 最后点击run运行图标,就会执行我们刚刚编写的Python程序了。 常见的一些设置 设置文件开头的注释模版 我们一般新建一个文件,都需要注释一些信息,比如创建的时间、作者、功能等。这些可以通过模板来做,和Android Studio类似。 这样设置以后每次新建Python文件就都会有一个注释的头部信息了 添加新的三方库 我们在开发中肯定会需要添加很多的三方库,Pycharm安装三方库也很方便: 修改Pycharm的主题和字体等 这个设置和Android Studio也是类似的 其他的和Android Studio都是类似的,比如快捷键这些,大家用一用就有感觉了。

优秀的个人博客,低调大师

Python3入门(十三)面向对象

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 一、简介 类(class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例 方法:类中定义的函数 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写 局部变量:定义在方法中的变量,只作用于当前实例的类 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其

优秀的个人博客,低调大师

Docker入门基础之容器使用

Docker简介 Docker 是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Ubuntu Docker 安装 1、Docker官方安装方法 Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 Ubuntu 版本是否支持 Docker。获取安装包: root@ubuntu:~# wget -qO- https://get.docker.com/ | sh 安装完成后有提示: If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like: ​ sudo usermod -aG docker runoob Remember that you will have to log out and back in for this to take effect! 启动docker服务 root@ubuntu:~# sudo service docker start 2、通过安装URLOS获得 URLOS基于Docker运行,安装了URLOS,就等于安装了Docker,我们可以使用URLOS官方安装命令: curl -LO www.urlos.com/iu && sh iu 或 curl -O https://www.urlos.com/install && chmod 544 install && ./install Docker容器使用Docker客户端Docker 客户端非常简单 ,可以直接输入 Docker 命令来查看到 Docker 客户端的所有命令选项。 root@ubuntu:~# docker 可以通过命令docker command --help更深入的了解指定的 Docker 命令使用方法。例如我们要查看docker stats指令的具体使用方法: root@ubuntu:~# docker stats --help 启动容器(交互模式)我们如果要使用版本为16.04的ubuntu系统镜像来运行容器时,命令如下: root@ubuntu:~# docker run -it ubuntu:16.04 sh 如果要使用版本为15.04的ubuntu系统镜像,则命令如下: root@ubuntu:~# docker run -it ubuntu:15.04 sh 各个参数解析: docker: Docker 的二进制执行文件。 run:与前面的 docker 组合来运行一个容器。 -it:其实是两个参数组成, -i 和 -t,-i:允许你对容器内的标准输入 (STDIN) 进行交互。-t:在新容器内指定一个伪终端或终端。 ubuntu:15.04:指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。 sh:执行命令。 将上面的命令稍作修改,在结尾处加上一句命令,执行后: root@ubuntu:~# docker run -it ubuntu:16.04 sh -c "while true; do echo hello urlos; sleep 1; done" hello urlos hello urlos hello urlos hello urlos hello urlos hello urlos ^Croot@ubuntu:~# 我们可以看到终端上不断输出 hello urlos ,这时按键盘Ctrl+c来终止输出。启动容器(后台模式)我们将上面的命令再稍作修改,把 -it 替换为 -d 看看结果: root@ubuntu:~# docker run -d ubuntu:16.04 sh -c "while true; do echo hello urlos; sleep 1; done" 0cf141fd0745fb4dc104bec1a3238a1bd8dad7aa72926dea0a39ddc7ba54fe32 在输出中,我们没有看到期望的"hello world",而是一串长字符0cf141fd0745fb4dc104bec1a3238a1bd8dad7aa72926dea0a39ddc7ba54fe32 这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。首先,我们需要确认容器有在运行,可以通过 docker ps 来查看: root@ubuntu:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0cf141fd0745 ubuntu:16.04 "sh -c 'while true; …" 2 minutes ago Up 2 minutes hopeful_matsumoto 然后使用 docker logs [ID或者名字]命令,查看容器内的标准输出: root@ubuntu:~# docker logs hopeful_matsumoto hello urlos hello urlos hello urlos hello urlos hello urlos hello urlos hello urlos hello urlos 我们可以看到,在容器内部已经输出了非常多的hello urlos,这说明容器处于后台运行模式。 运行一个WEB应用容器现在我们将在docker容器中运行一个 nginx 应用来运行一个web应用。 首先从Docker Hub公共镜像源中拉取镜像: root@ubuntu:~# docker pull nginx 然后运行这个镜像: root@ubuntu:~# docker run -d -p 8080:80 nginx 参数说明: -d:让容器在后台运行。 -p:让宿主机的8080端口映射给容器内部的80端口。 查看WEB应用容器 使用 docker ps 来查看我们正在运行的容器: root@ubuntu:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b394756b6c5d nginx "nginx -g 'daemon of…" 3 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp elastic_babbage 我们看到端口信息 0.0.0.0:8080->80/tcp,意思是宿主机的8080端口映射给容器内部的80端口。 这时我们可以通过浏览器访问WEB应用: 查看端口的快捷方法通过docker ps命令可以查看到容器的端口映射,docker还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。 上面我们创建的 web 应用容器 ID 为 b394756b6c5d 容器名为 elastic_babbage。 我可以使用 docker port b394756b6c5d 或 docker port elastic_babbage 来查看容器端口的映射情况。 root@ubuntu:~# docker port b394756b6c5d 80/tcp -> 0.0.0.0:8080 root@ubuntu:~# docker port affectionate_montalcini 80/tcp -> 0.0.0.0:8080 查看 WEB 应用程序日志使用docker logs [ID或者名字]可以查看容器内部的标准输出。 root@ubuntu:~# docker logs b394756b6c5d 192.168.43.131 - - [04/Jun/2019:06:28:42 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0" "-" 2019/06/05 06:28:42 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.43.131, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.43.122:8080" 192.168.43.131 - - [04/Jun/2019:06:28:42 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0" "-" 查看WEB应用程序容器的进程我们还可以使用 docker top 来查看容器内部运行的进程 root@ubuntu:~# docker top b394756b6c5d UID PID PPID C STIME TTY TIME CMD root 2069 2050 0 23:24 ? 00:00:00 nginx: master process nginx -g daemon off; systemd+ 2100 2069 0 23:24 ? 00:00:00 nginx: worker process 停止 WEB 应用容器使用 docker stop [ID或者名字] 命令停止容器 root@ubuntu:~# docker stop b394756b6c5d b394756b6c5d 启动 WEB 应用容器使用 docker start [ID或者名字] 命令启动已经停止的容器 root@ubuntu:~# docker start b394756b6c5d b394756b6c5d 重新启动WEB应用容器我们能还可以使用 docker restart [ID或者名字] 命令重新启动正在运行的容器 root@ubuntu:~# docker restart b394756b6c5d b394756b6c5d docker ps -l 查询最后一次创建的容器: root@ubuntu:~# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b394756b6c5d nginx "nginx -g 'daemon of…" 12 minutes ago Up 12 minutes 0.0.0.0:8080->80/tcp elastic_babbage 删除WEB应用容器我们可以使用 docker rm [ID或者名字] 命令来删除不需要的容器注意:删除容器时,容器必须是停止状态,否则会报如下错误: root@ubuntu:~# docker rm b394756b6c5d Error response from daemon: You cannot remove a running container b394756b6c5d95f1d43f11393c169cc73de40938d8f09db81077c8bce6e5881a. Stop the container before attempting removal or force remove 如果要删除正在运行的容器,这时我们只需要加入 -f 参数即可: root@ubuntu:~# docker rm -f b394756b6c5d b394756b6c5d

优秀的个人博客,低调大师

Python入门级经验总结

一、初识Python:Python的定位是“优雅”、“明确”、“简单”,全世界差不多有600多种编程语言,流行的也就那么20几种,Python就是其中一种。像YouTube、Instagram,还有国内的豆瓣等许多大型网站就是用Python开发的,还包括Google、Yahoo等大公司都大量地使用Python。据说Python可以只要20行就能完成C语言要写1000行代码才能搞定的任务。在平时编码过程中,Python通常都会提供一个比较完善的基础代码库,让你能直接调用,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,可直接使用现成的。当然除了内置的库外,Python还有大量的第三方库可供使用,方便至极。当前如火如荼的技术开源和互联网自由开放的精神是一致的,互联网上有无数非常优秀的像Linux一样的开源代码,不要高估自己写的代码真的有那么大的“商业价值”。夸张来说那些大公司的代码不愿意开放的重要原因是代码写得太烂了,一旦开源,就没人敢用他们的产品了。二、安装Python:1、选择版本:目前Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的(3.x版向下不兼容)。我安装的是最新的Python 3.5版本。可以安装最新的3.5Python版本。(当然也可以其他版本)2、不同操作系统安装Python:2.1、在Mac上安装Python:Mac系统是OS X 10.8~10.10,系统自带Python版本是2.7。可以选择安装最新的Python 3.5,方法有二:方法一:从Python官网下载Python 3.5的安装程序(网速慢的同学请选择国内镜像),双击运行并安装;方法二:如果安装了Homebrew,直接通过命令“brew install python3”安装即可。2.2、在Linux上安装PythonLinux预装 Python,但版本一般都非常低,需要升级版本可以参考:我没有linux环境,大家可以参考这个博文,作者说明很详细,我再此不再赘述。2.3、在Windows上安装Python Windows版本(64位OR 32位), 从Python的官网下载Python 3.5对应的64位安装程序或32位安装程序(网速慢的同学可以搜索镜像),然后,运行下载的EXE安装包。 注意选上:Add Python 3.5 to PATH,然后点击“Install Now”完成安装。三、启动和退出Python交互式环境:Windows上运行Python,先启动命令行(win+r),然后命令行输入python,点击回车,启动成功;输入exit()退出Python。Mac和Linux上运行Python,打开终端,然后命令行输入python3,点击回车,启动成功,输入exit()退出Python。四、第一个Python程序:“hello,python”Python有两种编码方式:交互式命令行写程序/文件式编辑4.1交互式命令行编码: 4.2文件式编码:编辑器:Notepad++,免费使用,有中文界面(个人推荐): 注:不可使用Word和Windows自带的记事本。因为Word保存的不是纯文本文件,而记事本会在文件开端加上特殊字符(UTF-8 BOM),会导致程序运行时出现错误。使用文本编辑器编码,文件保存后缀为.py,Python就可以直接运行程序了: 4.3、交互模式和直接运行.py文件的区别: 命令行直接输入Python进入交互模式,首先启动Python解释器(Cpython),然后需要用户手动一行一行地输入源代码,每输入一行立即执行一行。 而直接运行.py文件,启动Python解释器,然后直接执行.py文件的源代码,用户无法以交互的方式输入源代码。 两者可以结合:可以随时编码随时验证,一边文本编辑器写代码,同时打开交互式命令窗口,编码的过程中,把部分代码粘到命令行去验证。

优秀的个人博客,低调大师

Python3入门(五)循环语句

Python中的循环语句有 for 和 while。Python循环语句的控制结构图如下所示 一、while循环 1、Python中while循环格式为 while 判断条件: 语句 实例,输出5次 a = 0 while a < 5: a = a+1 print(a) 输出 1 2 3 4 5 需要注意冒号和缩进。另外,在 Python 中没有 do..while 循环,如果需要无限循环,可以将判断条件设置为True 2、while循环使用case语句 在while条件等于False的时候会执行 a = 0 while a < 5: a = a+1 print(a) else: print("大于等于5了,循环退出") 输出 1 2 3 4 5 大于等于5了,循环退出 二、for循环 1、for循环可以

优秀的个人博客,低调大师

Python3入门(四)条件控制

Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块,if的条件关键字为:if-elif-else a = True if a: print("hello") else: print("no") a为True会执行输出hello,False会执行输出no注意: 1、每个条件后面必须使用:,表示接下来是满足条件后要执行的语句;2、使用缩进来划分语句块,相同缩进的的语句在一起组成一个语句块;3、Python中没有Switch...case语句 一、实例 以下是一些简单的示例 num = int(input("输入一个数字: ")) if num < 0: print("输入的数字小于0") elif num == 0: print("输入的数字等于0") els

优秀的个人博客,低调大师

Python3入门(一)基础语法

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构 Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言 Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码 Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术 Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。 接下来一段时间我将和大家一起学习python,现在开始吧 一、Python标识符 在Python里,标识符由字母、数字、下划线组成。 在Python中,所有标识符可以包括英文、数字、以及下划线(_),但不能以数字开头。 Python中标识符是区分大小写的。 以下划线开头的标识符是有特殊意义的。以单下划线开头_foo的代表不能直接访问的类属性,需要通过类提供的接口进行访问,不能用from xxx或者import * 导入。以双下划线开头的__foo代表类的si'you'che'g私有成员,以双下划线开头和结尾的__foo__代表Python里特殊方法专用的表示,如__init__()代表类的构造函数。 二、Python保留字符 and exec not assert finally or break for pass class from print continue global raise def if return del import try elif in while else is with except lambda yield 三、行和缩进 Python和其他语言最大的区别就是,Python的代码块不使用大括号{}来控制类,函数以及其他逻辑判断,Python最具特色的就是用缩进来写模块。缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,必须严格执行,比如 if True: print("hello") else: print("no hello") 以下代码会执行错误,提示格式不对 if True: print("hello") else: print("no hello") print("error") 四、多行语句 Python中一般以新的一行作为语句的结束符,但是我们可以使用斜杠\将一行的语句分为多行显示,如下: a = "a" + "b" + "c" + \ "d" + \ "e" print(a) # 输出结果为abcde 语句中包含[]、{}或者()就不用使用多行连接符,如下 days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] print(days) # 输出['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] 五、Python引号 python可以用单引号'、双引号"、三引号"'或"""来表示字符串,其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当作注释。 word = 'word' sentence = '这是句子' paragraph = """这是一个段落。 包含了多个语句""" 六、Python注释 Python中单行注释采用#开头 # 第一个注释 print('hello') 多行注释采用三个单引号或者三个双引号 ''' 这是多行注释 这是多行注释 ''' 七、Python空行 函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。记住:空行也是程序代码的一部分 八、等待用户输入 下面程序将等待用户输入,按下回车键退出 name = input("Please input your name: ") print("Hello "+name) 八、一行显示多条语句 Python中可以在同一行中使用多条语句,语句直接用;分隔,但是个人不建议这么写,感觉不美观 name = input("Please input your name: "); a = "nihao" print("Hello " + name+", a = "+a) 九、输出语句 Python中通过print输出,这样是换行的,如果不想换行,可以使用逗号 a = "nihao" b = "hello" print(name, a) 本文到此结束啦,如果发现内容有误欢迎指正哦,也希望大家持续关注哦!!!

优秀的个人博客,低调大师

建站零基础入门【小白攻略】

使用阿里云建站有多种方式,本篇教程主要介绍自助建站的流程。 建站方式使用阿里云搭建网站有多种方式,您可参照下表选择合适的建站方式:建站方式 优势 适用人群自助建站 服务器购买、网站搭建、网站维护全程自主,弹性灵活。 希望自行设计、有动手意愿的用户。适用于刚接触云计算或对云服务器和建站不太了解的个人或小企业用户。云市场网站模板 即买即用,轻松便捷,后台管理方便,且有专人进行网站维护。 适合无特殊需求的个人和小企业用户,支持 PC、手机、微信等多种渠道,选择多样,成本较低。云市场企业官网定制 即买即用,轻松便捷,后台管理方便,且有专人进行网站维护。 适合看重网站个性化、预算相对充足、希望节省人力、使用需求迫切的企业用户。自助建站步骤步骤1. 选择服务器不同网站类型需要的ECS配置不同,请您

优秀的个人博客,低调大师

阿里云服务器入门使用

1.购买 登录官网查看云服务器购买列表,购买时选择地区、操作系统镜像等,购买云服务器后会发送短信通知,这里只列出一个: 【阿里云】尊敬的用户:您的云服务器ECS创建成功(实例名称:xxxxxxxxxx,公网IP:xxx.xxx.xxx.xxx)。系统用户名: root;若您忘记或未设置密码可进入ECS控制台-实例列表-重置密码。如您购买了数据盘请在实例创建后手动磁盘格式化分区,更多信息请查看站内信或邮件。 2.登录控制台 此时便可登录阿里云控制台,输入账号密码或者阿里云app扫码进入即可: 进入后都是一些服务器介绍,安全管控你等信息,可以自己了解一下,这时候点击左侧菜单,点击云服务器ECS,显示界面如图:点击实例,左上角的服务器区域选择购买时的区域,这时你的服务器信息就显示出来了,如图:一些基本的功能大家可以慢慢去探索,这里简要讲一下怎么把

优秀的个人博客,低调大师

git 入门教程之协同开发

前面我们已经介绍过远程仓库的相关概念,不过那时并没有深入探讨,只是讲解了如何创建远程仓库以及推送最新工作成果到远程仓库,实际上远程仓库对于团队协同开发很重要,不仅仅是团队协同开发的基础,也是代码备份的保障手段,现在我们先简单回忆下相关概念,以便为接下来的协同开发做好铺垫! 远程仓库和远程分支 远程仓库 远程仓库其实并不复杂,实际上只是本地电脑上的本地仓库在另一台远程电脑的备份而已. 相对本地仓库来说远程电脑上的版本库自然就是远程仓库,远程仓库使得我们的版本库更加安全,毕竟远程电脑可不是一般的电脑,出错的概率比我们平时工作所使用的电脑概率要小得多,这样一来即使不小心丢失了本地仓库的全部数据,只要远程仓库没有丢失,那我们就可以通过远程仓库重新取回最新数据! 还有一点,远程仓库让代码社交化,因为大家有了一致途径来访问远程仓库,团队也好或者陌生人也罢,只有你愿意,他们就可以获取远程仓库的最新代码并参与开发,这也是 github 的一大亮点! 远程分支 回顾好远程仓库的概念后,我们再来讲一下本地仓库的远程分支是什么意思? 当前你正在工作的电脑上存储的是本地仓库,如果没有远程仓库的支持,只能一个人鼓捣,别人无法共享你的工作成果,现在加入了团队开发流程,自然不再一个人独自开发,需要和团队其他人协同开发,共享开发成果. 所以本地仓库必然保存着远程仓库的基本信息,只有区分好自己的工作成果和公共成果,才能不乱套,又能做到信息及时共享. 实际上,在项目初期刚刚拷贝远程仓库(git clone)时,git 已经默认在本地仓库创建一个远程分支(origin/master),本地修改提交首先都是在本地仓库完成的,比如 git add,git commit 等命令,如果需要发布你的工作成果,那么就需要使用 git push origin <branch> 命令推送到远程仓库,这里的 origin 指的就是远程仓库名称(因为最初大家都是先从远程仓库克隆下来的,所以远程仓库存储的项目相当于原始项目,故而叫origin). git clone 命令帮助本地仓库的 master 分支和远程仓库的 master 分支建立了关联,一般称远程仓库名称为 origin. 查看远程仓库信息 : git remote 或 git remote -v # 查看远程仓库名称 $ git remote origin # 查看远程仓库详情 : 拉取和推送链接 $ git remote -v origin git@github.com:snowdreams1006/git-demo.git (fetch) origin git@github.com:snowdreams1006/git-demo.git (push) $ 本地分支推送到远程仓库 : git push origin <branch> 本地仓库和远程仓库的分支理论上应该一一对应,本地仓库的主干分支叫做 master ,而远程仓库也有相应的分支叫做 master ,这种映射关系是使用 git clone 命令时默认生成的,也是推荐的做法. 一般来说,本地仓库的分支推送到远程仓库指的就是推送到远程仓库同名的分支上,例如 git push origin master 意思是: 推将本地仓库的 master 分支推送到远程仓库的 master分支,当然你也可以推送其他分支到相应的远程分支上. 按照之前约定的分支管理策略来说,master 分支用于生产环境部署,dev 分支用于收集开发成果,feature 分支用于开发具体功能分支,既然如此,那这些本地分支哪些需要同步推送到远程仓库就比较清晰了! 推送本地 master 分支到远程仓库的 master 分支 : git push origin master 推送本地 dev 分支到元层仓库的 dev 分支 : git push origin dev # 查看当前分支 : `master` 主分支 $ git branch dev * master snow # 推送本地 `master` 分支到远程仓库 `origin` 上相应的 `master` 分支 $ git push origin master Counting objects: 15, done. Delta compression using up to 4 threads. Compressing objects: 100% (15/15), done. Writing objects: 100% (15/15), 1.31 KiB | 1.31 MiB/s, done. Total 15 (delta 9), reused 0 (delta 0) remote: Resolving deltas: 100% (9/9), completed with 3 local objects. To github.com:snowdreams1006/git-demo.git e60c8ad..dcce09c master -> master $ 正常来说,本地仓库的 master 分支应该领先远程仓库 origin 上的 master 分支若干个版本. 一旦我们已经将本地分支上的工作成果推送到远程仓库上相应分支时,本地仓库和远程仓库这时候就保持一致了. $ git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean $ 远程仓库下载到本地分支 : git fetch 远程仓库的操作可以简单归纳为两部分: 上传和下载. 本地仓库推送到远程仓库是上传,而远程仓库拉取到本地仓库就是下载. 团队多人协作开发时,大家都会定期或不定期往 master 或 dev 等分支上推送各自的更改,相应的我们就需要下载别人的最新工作成果. 现在模拟其他伙伴正在往 master 分支上推送更改,最好在另一个电脑另一个账户,当然模拟的话也可以是同一个电脑下其他目录,或者最简单的方式,直接登录 github 更改 master 分支上某个文件内容,简单起见,我们采用最后一种方式. 其他伙伴已往远程仓库上的 master 分支提交了新的版本: 创建 git-remote.txt 文件 现在我们想要下载其他人的最新工作成果,接下来让我们看看本地仓库的 master 还能和远程仓库的 master 分支保持一致吗? # 下载远程仓库的 `master` 分支 $ git fetch origin master remote: Enumerating objects: 4, done. remote: Counting objects: 100% (4/4), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From github.com:snowdreams1006/git-demo * branch master -> FETCH_HEAD dcce09c..10942ff master -> origin/master $ 执行 git fetch 命令后,远程仓库上的最新提交记录已经下载到本地仓库,同时更新了本地仓库的远程分支origin/master ,值得注意的是本地仓库的 master 分支并没有更新! 那你可能会有疑问了,我想要的结果是下载其他人的最新工作成果,怎么我本地仓库的 master 分支并没有更新呢? # 查看工作区 $ ls LICENSE README.md test.txt # 查看版本库状态 $ git status On branch master Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch) nothing to commit, working tree clean $ 既然 git fetch 并没有更新本地仓库的 master 分支,那它到底做了哪些工作呢? git fetch 会做的事情 实际上, git fetch 完成了仅有的但是很重要的两步操作: 从远程仓库下载本地仓库中缺失的提交记录 更新本地仓库的远程分支(比如origin/master) 通过上述两步操作完成的效果是: 将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态. 远程分支实际上是反映了远程仓库在你最后一次与它通信时的状态,而git fetch 就是你与远程仓库通信的方式了! git fetch 不会做的事情 git fetch 并不会改变你本地仓库的状态,所以也就不会更新你的 master分支,自然也不会修改你磁盘上的文件. 理解这一点很重要,因为许多开发人员误以为执行了 git fetch 以后,他们本地仓库就与远程仓库同步了. 实际上它可能已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件. 既然本地仓库的远程分支已更新,那么想要更新本地仓库的 master 分支该如何做呢?很简单,可以 git merge 啊! 远程仓库更新到本地分支 : git pull 其实通过 git fetch 命令我们已经下载了远程仓库的最新版本,只不过还没有合并到本地仓库而已,如何合并分支相信大家已经轻车熟路了,有很多方法: git merge origin/master git rebase origin/master git cherry-pick origin/master 实际上,先抓取更新(git fetch)再合并(git merge)这个流程很常用,因此 git 是有专门的命令来完成这两步操作的,这就是拉取更新**git pull** --- 刚好与推送更新 git push 相反! # 拉取最新版本 $ git pull Updating dcce09c..10942ff Fast-forward git-remote.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 git-remote.txt # 查看版本库状态 $ git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean # 查看工作区内容: 文件已更新 $ ls LICENSE README.md git-remote.txt test.txt $ 团队协作 掌握了远程仓库和远程分支的相关概念后,现在开始真正模拟团队协作开发了,为了简单起见,仍然以直接操作 github 上的 master 分支为例说明如何协同开发. (1). 其他人已往远程仓库推送2个版本 (2). 你正在本地仓库提交1个版本 $ echo "learn teamwork" >> test.txt $ git commit -am "learn teamwork" [master f971647] learn teamwork 1 file changed, 1 insertion(+) $ (3). 你推送到远程仓库前先拉取最新版本 # 拉取最新版本,并尝试合并 $ git pull remote: Enumerating objects: 8, done. remote: Counting objects: 100% (8/8), done. remote: Compressing objects: 100% (5/5), done. remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (6/6), done. From github.com:snowdreams1006/git-demo 10942ff..612e08a master -> origin/master Merge made by the 'recursive' strategy. git-remote.txt | 2 ++ 1 file changed, 2 insertions(+) # 查看版本库状态 $ git status On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean # 查看其他人工作成果 $ cat git-remote.txt git remote git clone git commit -am "fake second teamwork" # 查看自己即将推送的工作成果 $ cat test.txt add test.txt see https://snowdreams1006.github.io/git/usage/remote-repository.html learn git branch see https://snowdreams1006.github.io/git/usage/branch-overview.html git commit c1 git commit c2 and c3 git checkout -b dev fast forward not recommend Happy coding learn git stash learn git rebase learn teamwork $ (4). 你将本地仓库更改内容推送到远程仓库 # 推送到远程仓库 $ git push origin master Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (5/5), 564 bytes | 564.00 KiB/s, done. Total 5 (delta 3), reused 0 (delta 0) remote: Resolving deltas: 100% (3/3), completed with 3 local objects. To github.com:snowdreams1006/git-demo.git 612e08a..8fe5aba master -> master $ 现在前往 github 网站确认我们已经推送成功,我们的工作成果和其他人的工作成果同时存在于远程仓库中,这样就完成了一次团队协同开发的案例. 现在简单回顾一下整个协同开发流程: 其他人先于我们提交2个版本 我们本地提交1个版本 本地版本推送前拉取远程仓库 本地仓库推送到远程仓库 小结 查看远程仓库信息: git remote -v 本地仓库推送到远程仓库: git push origin <branch> 远程仓库抓取到本地仓库: git fetch 远程仓库拉取到本地仓库: git pull 相当于 git fetch 和 git merge 本地创建和远程仓库一致的分支: git checkout -b <branch> origin/<branch>,本地和远程分支名称最好一直,比如本地 master 和 远程 origin/master,本地 dev 和远程 origin/dev 本地分支和远程分支建立关联: git branch --set-upstream <branch> origin/<branch> ,足够任性的话,本地 dev 可以关联远程 remote-dev 等,不过建议名称最好一致. 团队协同开发时,不仅平时要定期拉取(git pull),推送到远程仓库前更应先拉取(git pull)再推送(git push),如出现冲突,解决冲突后再推送.

优秀的个人博客,低调大师

和我一起入门python爬虫

前几天就想写一个爬虫系列的文章,因为比较忙所以没有写(还不是因为懒),趁着现在屋里比较的凉爽,心也比较的静,总结下目前遇到的一些爬虫知识,本系列将从简单的爬虫开始说起,后会逐渐的提升难度,同时会对反爬手段做一个总结,以及用具体的事例来演示,不同的反爬现象和实现手段。 前言 本系列侧重点是应用和实战,所以,对于软件的安装这些基本操作不做详细讲解,我这里认为你已经有了一定的python基础,所以对于python的安装一定会有一定的了解了,这里废话不多说让我们进入正题。 环境准备 鉴于大多数人的系统是windows系统,所以这里的所有内容都是在Windows下进行的,另外推荐安装谷歌浏览器,使用语言python,版本3.6(低版本不能使用requests_html)。主要的爬虫模块requests_html。 爬虫具备的基本条件 作为一个合格的爬虫,首先得有一个headers,如何理解headers,我们打开谷歌浏览器,然后F12,选择network选项卡,打开百度的首页,然后打开然后选择其中的一个链接,然后点击新弹出的窗口的headers,看到有一个'Request Headers',我们看到下面红框的内容,这些由:组成的数据结构,共同构成了一个headers,在python中可以把这些字段作为一个字典传入。 爬虫的代码实现 下面我来看一个基本爬虫代码,爬取百度的导航栏文字内容。 1.导入requests_html模块。 fromrequests_htmlimportHTMLSession 2.创建一给session对象,目的是维持一次完整的会话。 session=HTMLSession() 3.通过get方法访问网络 url='https://www.baidu.com'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.62Safari/537.36'}req=session.get(url=url,headers=headers) get方法需要传入两个参数,一个是url,一个是headers(字典类型)。一般的我们传入一个user_agent就可以愉快的使用了。(这里只是说一般的对于有先网站服务器还会监测headers的其他属性内容)。我们会获取一个response对象。 拓展:如果查看requests_html的源码会发现默认是给了几个headers属性的。 defdefault_headers(): """ :rtype:requests.structures.CaseInsensitiveDict """ returnCaseInsensitiveDict({ 'User-Agent':default_user_agent(),#这个就是一个随机的useragent 'Accept-Encoding':','.join(('gzip','deflate')),#接收编码类型 'Accept':'*/*',#接收文件类型 'Connection':'keep-alive',#保持链接 }) 4.获取网页返回的状态码 一般的我们把200状态码认为是响应成功(并不一定是你想要的结果,比如登陆失败有些也是200)。 其他常见的还有,404网页访问失败,500服务器拒绝访问,302和301作为网页的重定向。 ifreq.status_code==200: print("ok") 5.获取正确的网页编码 因为每个页面的编码不同,可能导致在解析的时候出现乱码的情况,对此requests_html模块为我们提供了一个可以高准确率获取编码的方法,目前来看对于绝大对数html页面是没有问题的,所以可以放心使用。 req.encoding=req.apparent_encoding 6.查看获取html源码 此时我们已经获取了编码之后的对象了,如果我们需要查看获取的内容以及编码是否正确我们可以使用text属性来获取网页的源码,它是一个字符串格式的。 7.xpath表达式的使用 requets_html模块的一个好处就是集合了众多的网页解析模块比如,bs4,pyquery,lxml等,可以说相当的强大了,requests_html通过response的html属性调用xpath方法,来直接操作dom对象,通过观察我们获取百度导航栏的标题的xpath,代码我们可以这样写。 node_list=req.html.xpath("//div[@id='u1']/a/text()") 简单说下上面xpath表达式的含义,//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。/表示从根节点选取。后面跟的ediv表示是div节点,中括号里面一般是做属性判断@id就是判断id属性然后取其值为ul的,后面紧跟的/a,表示上面div节点的下级所有含有a的节点,然后后面的text()是表示获取该节点的文本信息。 8.综合整理下上面的代码如下: fromrequests_htmlimportHTMLSession fromtracebackimportformat_excclassBaiDu(): def__init__(self): self.session=HTMLSession() self.url='https://www.baidu.com' self.headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.62Safari/537.36'} self.timeout=20 defgethtml(self): try: req=self.session.get(url=self.url,headers=self.headers,timeout=self.timeout) ifreq.status_code==200: req.encoding=req.apparent_encoding title_info=self.parse_html(req) return'|'.join(title_info) except: print("出错了错误内容是",format_exc) defparse_html(self,req): node_list=req.html.xpath("//div[@id='u1']/a/text()") returnnode_listif__name__=='__main__': baidu=BaiDu() title=baidu.gethtml() print(title) 输出结果: 新闻|hao123|地图|视频|贴吧|学术|登录|设置|更多产品 好了,今天的内容就到这,内容比较的简单,简单的说了下爬虫的基本思路,后面会一步步加大难度,如有任何问题和疑问欢迎留言,如果您喜欢我的文章不防动动小手,转发到朋友圈分享给更多的朋友。

优秀的个人博客,低调大师

Auto-Keras与AutoML:入门指南

在本教程中,你将学习如何使用Auto-Keras(Google的AutoML的开源替代品)来实现自动化机器学习和深度学习。 目前来说,深度学习从业者在数据集上训练神经网络时,主要正在尝试优化和平衡两个目标: 1.定义适合数据集性质的神经网络体系结构; 2.在许多实验中调整一组超参数,这将导致模型具有高精度并能够推广到训练和测试集之外的数据。需要调整的典型超参数包括优化算法(SGD,Adam等),学习速率和学习速率调度以及正则化等。 根据数据集和具体问题,深度学习专家可以进行数十到数百次实验,以找到神经网络架构和超参数之间的平衡,这些实验通常需要计算数百到数千小时。 刚刚提到的这种模式仅适用于专家,那非深度学习专家呢? 这就需要Auto-Keras和AutoML: Auto-Keras和AutoML的最终目标是通过使用自动神经架构搜索(NAS)算

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册