2.掌握基本的网络爬虫项目

6.运算符和操作对象

6.1
什么是运算符和操作对象

运算符是一些特殊符号的集合,操作对象是由运算符连接起来的对象

pythone支持以下7钟运算符:

1.算数运算符
2.比较运算符 3.赋值运算符

4.逻辑运算符 5.位运算符 6.成员运算符
7.身份运算符

6.2
算术运算符

图片 1

6.3
比较运算符

图片 2

6.4
赋值运算符

图片 3

6.5 位运算符

图片 4

图片 5

 

6.6
逻辑运算符

图片 6

6.7
成员运算符

图片 7

6.8
身份运算符

图片 8

6.9
运算符优先级

图片 9

把消息传递给UI

由于计算过程比较长,我们在通过进度条来显示当前进度的同时,还希望能实时的把计算的中间结果显示在UI上。当然,BackgroundWorker对这个用例也提供了很好的支持。它允许我们在执行计算的过程中给UI线程发送消息,下面看看具体的做法:

_demoBGWorker.WorkerReportsProgress = true;
_demoBGWorker.ProgressChanged += BGWorker_ProgressChanged;

首先要把WorkerReportsProgress
属性设置为 true,然后为ProgressChanged 事件添加处理方法:

private void BGWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    //修改进度条的显示。
    this.progressBarSum.Value = e.ProgressPercentage;

    //如果有更多的信息需要传递,可以使用 e.UserState 传递一个自定义的类型。
    //这是一个 object 类型的对象,您可以通过它传递任何类型。
    //我们仅把当前 sum 的值通过 e.UserState 传回,并通过显示在窗口上。
    string message = e.UserState.ToString();
    this.labelSum.Text = message;
}

继续更新
BGWorker_DoWork方法:

private void BGWorker_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker bgWorker = sender as BackgroundWorker;
    int endNumber = 0;
    if(e.Argument != null)
    {
        endNumber = (int)e.Argument;
    }

    int sum = 0;
    for (int i = 0; i <= endNumber; i++)
    {
        sum += i;

        string message = "Current sum is: " + sum.ToString();
        //ReportProgress 方法把信息传递给 ProcessChanged 事件处理函数。
        //第一个参数类型为 int,表示执行进度。
        //如果有更多的信息需要传递,可以使用 ReportProgress 的第二个参数。
        //这里我们给第二个参数传进去一条消息。
        bgWorker.ReportProgress(i, message);
        Thread.Sleep(600);
    }
}

OK,现在已经可以看到进度条和执行信息的更新了。

2.收入:薪酬高

2.数据类型

2.1 整型

int
通常被称为整型或整数,是正、负整数,不带小数点。

2.2 浮点型

浮点型
由整数部分与小数部分组成,也可以使用科学计数法表示。

2.3 复数

复数由实数部分和虚数部分构成,可以用a+bj或complex(a,b)表示,复数的实部a和虚部b都是浮点型。

2.4
数据类型转换

int(x)将x转换为一个整数

float(x)将x转换为一个浮点数

complex(x)将x转换为一个复数,实数部分为x,虚数部分为0.

complex(x,y)将x和y转换为一个复数。实数部分为x,虚数部分为y。x和y是数字表达式。

2.5 常量

所谓常量就是不能变的变量,比如常用的数字常数π就是一个常量。

在python中,通常用全部大写的变量名表示常量。

python中有两个比较常见的变量名,即PI和E.

PI:数学常量pi(圆周率,一般以π表示)。

E:数学常量e,即自然对数。

取消操作

在执行过程中允许用户取消当前的操作是一个基本的设计,BackgroundWorker自然有很好的支持:

_demoBGWorker.WorkerSupportsCancellation = true;

和WorkerReportsProgress属性一样,如果要支持取消操作我们需要设置
WorkerSupportsCancellation属性为
true。并且还要在BGWorker_DoWork方法中进行支持,在 for 循环中
Thread.Sleep(600)后面添加代码:

bgWorker.ReportProgress(i, message);
Thread.Sleep(600);

//在操作的过程中需要检查用户是否取消了当前的操作。
if (bgWorker.CancellationPending == true)
{
    e.Cancel = true;
    break;
}

如果检测到用户点击的取消按钮,就退出当前的计算过程。下面是点击取消按钮时要调用的代码:

_demoBGWorker.CancelAsync();

现在已经可以支持取消操作了,赶快试试吧!

图片 10 

5.表达式

表达式是值、变量和操作符的组合。单独一个值可以看作表达式,单独的变量也可以看作表达式。

把参数传递给运算过程

直接把100写死到运算过程中可不好,我们还打算允许用户指定求和的范围呢!所以需要把100作为参数传递给计算过程。在概述中我们通过调用RunWorkerAsync方法启动计算过程,其实这个方法可以接受一个
object 类型的参数。通过它我们就可以把任何数据传递给计算过程:

//别忘了设置滚动条。
this.progressBarSum.Maximum = 100;
_demoBGWorker.RunWorkerAsync(100);
//下面是更新后的 BGWorker_DoWork 方法:
private void BGWorker_DoWork(object sender, DoWorkEventArgs e)
{
    //在这里执行耗时的运算。
    int endNumber = 0;
    if(e.Argument != null)
    {
        endNumber = (int)e.Argument;
    }
    int sum = 0;
    for (int i = 0; i <= endNumber; i++)
    {
        sum += i;
    }
}

BGWorker_DoWork事件处理函数通过参数
e 的Argument属性传来了我们期望的运算信息。

 

3.变量和关键字

3.1 变量

变量指向各种类型的值的名字,以后再用到这个值时,直接引用名字即可,不用再写具体的值。

在python中,变量使用的环境非常宽松,没有明显的变量声明,而且类型不是固定的。

你可以把一个整数赋值给变量,如果觉得不合适,把字符串赋给变量也行。

在python中,等号(=)是赋值语句,可以把任意数据类型赋值给变量。

如果要定义一个名为a的变量,该怎么操作呢?输入如下:

>>>a=’xiaoming’

注意:字符串必须义引号标记开始,并以引号标记结束。

此操作解释:a是我们创建的变量,=是赋值语句,xiaoming是变量值,需要用引号标记。

整句话的意思是:创建变量a,并赋值为xiaoming。

要输出内容如下操作:

>>>print(a)

xiaoming

在使用变量前需要对其赋值。没有值的变量是没有意义的,编译器也不会编译通过。

同一个变量可以反复赋值,而且可以使不同类型的变量,输入如下:

>>>a=123

123

>>>a=’ABC’

ABC

这种变量本身类型不固定的语言称为动态语言,与之对应的是静态语言。

静态语言在定义变量时必须指定变量类型,如果赋值时类型不匹配就会报错。

和静态语言相比,动态语言更灵活。

当不能确定变量或数据的类型时,可以借助解释器内置的函数type进行确认。

在交互模式可以输入如下:

>>>type(‘hello,world’)

<class’str’>

测试得到的输入结果类型是字符串类型(str)。

3.2 变量名称

程序常常选择有意义的名称作为变量名,以此标记变量的用途。

变量名是由数字或字符组成的任意长度的字符串,必须以字母开头。

使用大写字母是合法的,但变量名建议使用小写字母开头。python是区分大小写的。

>>>name=’study
python is happy’

>>>Name=’I
agree with you’

>>>print(name)

‘study python is
happy

>>>prit(Name)

I agree with you

下划线“_”可以出现在变量名中,经常用于连接多个词组,如happy_study,do_it_with_more_practice。

 >>>happy_study=’stay
hungry stay foolish’

>>>print(happy_study)

stay hungry stay
foolish

如果给变量取非法的名称,解释器就会显示语法错误。如下:

>>>2wrongtest=’just
for test’

SyntaxError:invalid
syntax

该示例提示语法错误,错误信息为无效的语法,原因为不是以字母开头的。

>>>xiaoming@me=’suprised’

SyntaxError:can’t
assign to operator

该示例提示语法错误,错误信息为不能做指定操作,原因是包含了一个非法字符@。

python不允许使用关键字作为变量名,如下:

>>>from=’from’

SyntaxError:invalid
syntax

python3中共有33个关键字,都不能作为变量名来使用。

图片 11

用法概述

在窗体上构建一个BackgroundWorker
实例,在它的
DoWork事件处理函数中添加耗时的运算,然后调用它的RunWorkerAsync方法就可以了。

private BackgroundWorker _demoBGWorker = new BackgroundWorker();
_demoBGWorker.DoWork += BGWorker_DoWork;
_demoBGWorker.RunWorkerAsync();
private void BGWorker_DoWork(object sender, DoWorkEventArgs e)
{
    //在这里执行耗时的运算。
    int sum = 0;
    for (int i = 0; i <= 100; i++)
    {
        sum += i;
    }
}

是不是有点太简单了?那么让我们考虑下面的问题:

如果我们想要把参数传递给运算过程该怎么做?
在运算过程中我们希望把实时的信息显示在UI上该怎么办?
如果我们想要取消正在进行的运算该怎么办?
如果运算过程出现异常我们又该如何处理?

接下来我们就一个一个的处理这些问题。

Python自动化运维学习目标

1.1 程序

程序是指根据语言提供的指令按照一定逻辑顺序对获得的数据进行运算,并最终返回给我们的指令和数据的组合。

程序是用语言写成的。语言分高级语言和低级语言。

低级语言有时叫机器语言或汇编语言。

高级语言翻译成机器代码有两种方法,即解释和编译。

解释型语言是边读源程序边执行。高级语言是源代码。

编译型语言是将源代码完整地编译成目标代码后才能执行,以后在执行时不需要再编译。

图片 12

1.2 调试

程序错误被称为bug,查找bug的过程称为调试(debugging)。

1.3 语法错误

语法指的是程序的结构和此结构的规则。比如(’hello,worldbank’),括号中的单引号是成对的,执行时才能正确执行。

如果输入(’hello,world!)或(hello,world’)就会报错,这属于语法错误。

1.4 运行错误

鉴于现在计算机软硬件的理论水平、工业制造水平、使用者的水平等一些内在的、外在的因素,出现错误并不稀奇,且程序越复杂,出现异常的概率越大。

异常的种类很多,如内存用尽、除数为零的除法等都可能导致异常。python为了把错误的影响降至最低,提供了专门的异常处理语句。

运行时错误一般在代码量偏多时才容易遇到。

1.5 语义错误

称序即使有语义错误,也能正常运行,不会产生任何错误信息,但得到的结果和我们预料的不一致。

发生这种错误一般是我们对语句的运行机制了解得不够透彻,自以为它应该如此运行,实际却不是这样。

还有可能是你解决问题的思路本身就是错的,写的程序当然是错的。

还好 .NET
类库中提供了一个叫做 BackgroundWorker
的类可以比较优雅的解决这类问题。虽然BackgroundWorker
类使用起来比较简单,但其中还是有一些需要注意的细节,下面我们就通过 demo
程序介绍它的主要用法。我们在
demo中计算1到100的累加和,为了演示,每次计算都 sleep 600毫秒,demo
的UI为:

  1. 了解自动化运维技术
  2. 熟练使用Ansible等运维工具
  3. 熟悉掌握互联网企业运维流程;能够自主搭建B/S自动化运维平台
  4. 通过Python实现对集群服务器进行批量自动化运维

4.语句

语句是python解释器可以运行的一个代码单元,也可以理解为可以执行的命令。我们目前已经使用了两种语句:print打印语句和赋值语句。

赋值语句有两个作用:一是建立新的的变量,二是将值赋予变量。任何变量在使用时都必须赋值,否则会被视为不存在的变量。

在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在
UI
线程执行这样的运算就会出现UI不响应的问题。解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完成。但是原生接口的线程操作有一些难度,如果要更进一步的去完成线程间的通信就会难上加难。

扫描下方二维码,免费领取资料

1.认识程序

异常处理

如果在计算过程中发生了异常该怎么处理?有没有办法知道计算过程已经结束?当然要有,即便是正常的结束也需要拿到计算的结果。

_demoBGWorker.RunWorkerCompleted += BGWorker_RunWorkerCompleted;
private void BGWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    //如果用户取消了当前操作就关闭窗口。
    if (e.Cancelled)
    {
        this.Close();
    }

    //计算已经结束,需要禁用取消按钮。
    this.btnCancel.Enabled = false;

    //计算过程中的异常会被抓住,在这里可以进行处理。
    if (e.Error != null)
    {
        Type errorType = e.Error.GetType();
        switch (errorType.Name)
        {
            case "ArgumentNullException":
            case "MyException":
                //do something.
                break;
            default:
                //do something.
                break;
        }
    }

    //计算结果信息:e.Result
    //use it do something.
}

RunWorkerCompleted
事件处理函数会在DoWork
事件处理函数返回后被调用。通过它我们可以进行一些运算结束后的操作,比如禁用取消按钮,异常处理,结果显示等。
注意,如果想要拿到
e.Result,您需要在BGWorker_DoWork方法中设置 e.Result属性,如:

e.Result = sum;

 

总结,BackgroundWorker
类功能完善且使用简便,实在是处理异步耗时操作的利器!

1.掌握Python机器学习与数据挖掘、深度学习基础

图片 13

  “对于我来说学习python有什么用?”

Python是一种代表简单主义思想的语言,在设计的时候,就类比了英语的语法设计,所以更符合人类大脑对语言的理解,阅读一个良好的Python程序就感觉像是在读英语一样Python极其容易上手。

3.编写复杂的爬虫项目

  1. 掌握Python基础相关的知识
  2. 为后续的学习打下坚实的基础

  随着机器学习的兴起,Python
逐步成为了「最受欢迎」的语言。它简单易用、逻辑明确并拥有海量的扩展包,因此其不仅成为机器学习与数据科学的首选语言,同时在网页、数据爬取可科学研究等方面成为不二选择。此外,很多入门级的机器学习开发者都是跟随大流选择
Python,但到底怎么学习好Python 就是本文的核心内容。

2.熟悉Python网络编程

Python基础学习目标

  这把火已经烧到了程序员的圈子外,从小学生到职场老司机,都开始学习这一门新的语言,门槛低、零基础、操作骚…再也没有什么能阻挡Python晋升网红。 

1.掌握Python网络爬虫基础及进阶

图片 14 

发表评论

电子邮件地址不会被公开。 必填项已用*标注