DeepOps的Python小笔记-天池龙珠计划-Python训练营-Task 01:DAY3

今天的任务主要是异常处理,我目前写的python 还没用过异常处理。(换句话还没有正经写过)

异常处理

Python 标准异常总结

BaseException:所有异常的 基类
Exception:常规异常的 基类
StandardError:所有的内建标准异常的基类
ArithmeticError:所有数值计算异常的基类
FloatingPointError:浮点计算异常
OverflowError:数值运算超出最大限制
ZeroDivisionError:除数为零
AssertionError:断言语句(assert)失败
AttributeError:尝试访问未知的对象属性
EOFError:没有内建输入,到达EOF标记
EnvironmentError:操作系统异常的基类
IOError:输入/输出操作失败
OSError:操作系统产生的异常(例如打开一个不存在的文件)
WindowsError:系统调用失败
ImportError:导入模块失败的时候
KeyboardInterrupt:用户中断执行
LookupError:无效数据查询的基类
IndexError:索引超出序列的范围
KeyError:字典中查找一个不存在的关键字
MemoryError:内存溢出(可通过删除对象释放内存)
NameError:尝试访问一个不存在的变量
UnboundLocalError:访问未初始化的本地变量
ReferenceError:弱引用试图访问已经垃圾回收了的对象
RuntimeError:一般的运行时异常
NotImplementedError:尚未实现的方法
SyntaxError:语法错误导致的异常 
IndentationError:缩进错误导致的异常
TabError:Tab和空格混用
SystemError:一般的解释器系统异常
TypeError:不同类型间的无效操作
ValueError:传入无效的参数
UnicodeError:Unicode相关的异常
UnicodeDecodeError:Unicode解码时的异常
UnicodeEncodeError:Unicode编码错误导致的异常
UnicodeTranslateError:Unicode转换错误导致的异常

Python 标准警告总结

- Warning:警告的基类
- DeprecationWarning:关于被弃用的特征的警告
- FutureWarning:关于构造将来语义会有改变的警告
- UserWarning:用户代码生成的警告
- PendingDeprecationWarning:关于特性将会被废弃的警告
- RuntimeWarning:可疑的运行时行为(runtime behavior)的警告
- SyntaxWarning:可疑语法的警告
- ImportWarning:用于在导入模块过程中触发的警告
- UnicodeWarning:与Unicode相关的警告
- BytesWarning:与字节或字节码相关的警告
- ResourceWarning:与资源使用相关的警告

try – except 语句:

try:
-     检测范围
- except Exception[as reason]:
-     出现异常后的处理代码

try – except – finally 语句:

def divide(x, y):
    try:
        result = x / y
        print("result is", result)     
    except ZeroDivisionError:
        print("division by zero!")
     finally:
        print("executing finally clause")

try – except – else 语句 :

try:
	 检测范围
except:
	出现异常后的处理代码
else:
	如果没有异常执行这块代码

raise语句

  • Python 使用raise语句抛出一个指定的异常。
try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
    
# An exception flew by!

DeepOps的Python小笔记-天池龙珠计划-Python训练营-Task 01:DAY2

很快到了第二天 条件语句与循环语句

条件语句

if 语句

  • if – else 语句
  • if – elif – else 语句
  • assert 关键词
    • assert len(my_list) > 0

循环语句

while 循环

- while - else 循环
	- 这个我很少用过, 当while循环正常执行完的情况下,执行else输出,如果while循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容。
while 布尔表达式:
	代码块
else:
	代码块

for 循环

  • for – else 循环
  • 当for循环正常执行完的情况下,执行else输出,如果for循环中执行了跳出循环的语句,比如 break,将不执行else代码块的内容,与while – else语句一样。
for 迭代变量 in 可迭代对象:
     代码块
else:
     代码块

range() 函数

enumerate()函数

sequence:一个序列、迭代器或其他支持迭代对象。

  • seasons = [‘Spring’, ‘Summer’, ‘Fall’, ‘Winter’]
lst = list(enumerate(seasons))
print(lst)
# [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
lst = list(enumerate(seasons, start=1))  # 下标从 1 开始
print(lst)
# [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

break 语句

  • 语句可以跳出当前所在层的循环。

continue 语句

pass 语句

- 要是我早知道有这么一个玩意儿,就不用在if语句里面写一个print()
- pass 语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 pass 语句就是用来解决这些问题的。

推导式

这个一般教程少见,需要重点看一下

列表推导式

  • [ expr for value in collection [if condition] ]
x = [-4, -2, 0, 2, 4]
y = [a - 2 for a in x]
print(y)
# [-8, -4, 0, 4, 8]

元组推导式

  • ( expr for value in collection [if condition] )
a = (x for x in range(10))
print(a)
# <generator object <genexpr> at 0x0000025BE511CC48>
print(tuple(a))
# (0, 2, 4, 6, 8, 10, 12, 14, 16, 18)

字典推导式

  • { key_expr: value_expr for value in collection [if condition] }
b = {i: i % 2 == 0 for i in range(20) if i % 3 == 0}
print(b)
{0: True, 3: False, 6: True, 9: False, 12: True, 15: False, 18: True}

集合推导式

  • { expr for value in collection [if condition] }
c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)
# {1, 2, 3, 4, 5, 6}

其它

  • next(iterator[, default])
  • Return the next item from the iterator. If default is given and the iterator is exhausted, it is returned instead of raising StopIteration.
e = (i for i in range(10))
print(e)
# <generator object <genexpr> at 0x0000007A0B8D01B0>
print(next(e))  # 0
print(next(e))  # 1
for each in e:
     print(each, end=' ')
# 2 3 4 5 6 7 8 9`

DeepOps的Python小笔记-天池龙珠计划-Python训练营-Task 01:DAY1

**龙珠计划python训练营地址:https://tianchi.aliyun.com/specials/promotion/aicamppython
龙珠计划还包括SQL、数学、机器学习、深度学习、强化学习等,图标做的非常有意思,很容易激发收集控的一面。作为一个python跟着不同的学习小组,学过好几遍的人,为了凑齐龙珠,也要再刷一遍,才能达到内心的平静。

除了这个龙珠计划,天池学习还构建了一颗知识树,详情请见如下链接:https://tianchi.aliyun.com/course/index 看上去感觉不错,但是也要先完成龙珠计划。

整个python训练营分成了5个任务分别是:
Task1:python基础入门:从变量到异常处理(3天)
Task2:python基础练习:数据结构大汇总(3天)
Task3:python基础进阶:从函数到高级魔法方法(3天)
Task4:python数据分析:从0完成一个数据分析实战(1天)
Task5:python训练营测试(1天)
总共算下来11天就能搞定。


变量、运算符与数据类型

注释

#账号注释,单个单引号或者双引号 多行注释

运算符

  • 算术运算符
    • 加减乘除
    • 整除 3//4
    • 取余3%4 幂 2**3
  • 逻辑运算符
    • and 与
    • or 或
    • not 非
  • 位运算符
    • ~ 按位取反 ~4
    • & 按位与 4 & 5
    • | 按位或
    • ^ 按位异或 4 ^ 5
    • << 左移 4 << 2
    • >> 右移 4 >> 2
  • 三元运算符
    small = x if x < y else y 这个看起来比较厉害,记录一下
  • 其他运算符
    • in 、not in
    • ==, != 对比的是两个变量的值
    • is 、not is : is, is not 对比的是两个变量的内存地址
  • 运算符的优先级

变量和赋值

  • 变量名可以包括字母、数字、下划线、但变量名不能以数字开头。

数据类型与转换

  • 可以通过type(x)来查看,类的类型
  • bin(整型) 转换为二进制字符串,整型.bit_lenght()二进制长度
  • from decimal import Decimal 用来处理浮点数
  • bool 作用在基本类型变量:X 只要不是整型 0、浮点型 0.0,bool(X) 就是 True,其余就是 False。
  • 类型判断
    • type() 不会认为子类是一种父类类型,不考虑继承关系。
    • isinstance() 会认为子类是一种父类类型,考虑继承关系

print() 函数

  • 将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按str()方式进行转- 换为字符串输出;
  • 关键字参数sep是实现分隔符,比如多个参数输出时想要输出中间的分隔字符;
  • 关键字参数end是输出结束时的字符,默认是换行符\n;
  • 关键字参数file是定义流输出的文件,可以是标准的系统输出sys.stdout,也可以重定义为别的文件;
  • 关键字参数flush是立即把内容输出到流文件,不作缓存。

位运算

原码、反码和补码 我的老大难

  • 二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。
  • 原码:就是其二进制表示(注意,有一位符号位)。
    • 00 00 00 11 -> 3
    • 10 00 00 11 -> -3
  • 反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。
    • 00 00 00 11 -> 3
    • 11 11 11 00 -> -3
  • 补码:正数的补码就是原码,负数的补码是反码+1。
    • 00 00 00 11 -> 3
    • 11 11 11 01 -> -3
  • 符号位:最高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算。

按位运算

  • 按位非操作 ~
  • 按位与操作 &
  • 按位或操作 |
  • 按位异或操作 ^
  • 按位左移操作 <<
  • 按位右移操作 >>

利用位运算实现快速计算

  • 通过 <<,>> 快速计算2的倍数问题。
    • n << 1 -> 计算 n*2
    • n >> 1 -> 计算 n/2,负奇数的运算不可用
    • n << m -> 计算 n*(2^m),即乘以 2 的 m 次方
    • n >> m -> 计算 n/(2^m),即除以 2 的 m 次方
    • 1 << n -> 2^n
  • 通过 ^ 快速交换两个整数。 通过 ^ 快速交换两个整数。
    • a ^= b
    • b ^= a
    • a ^= b
  • 通过 a & (-a) 快速获取a的最后为 1 位置的整数。
    00 00 01 01 -> 5
    &
    11 11 10 11 -> -5
    – – – – –
    00 00 00 01 -> 1
    00 00 11 10 -> 14
    &
    11 11 00 10 -> -14
    – – – – –
    00 00 00 10 -> 2

利用位运算实现整数集合

一个数的二进制表示可以看作是一个集合(0 表示不在集合中,1 表示在集合中)。
比如集合 {1, 3, 4, 8},可以表示成 01 00 01 10 10 而对应的位运算也就可以看作是对集合进行的操作。

  • 元素与集合的操作:
    • a | (1<<i) -> 把 i 插入到集合中
    • a & ~(1<<i) -> 把 i 从集合中删除
    • a & (1<<i) -> 判断 i 是否属于该集合(零不属于,非零属于)
  • 集合之间的操作:
    • a 补 -> ~a
    • a 交 b -> a & b
    • a 并 b -> a | b
    • a 差 b -> a & (~b)
      注意:整数在内存中是以补码的形式存在的,输出自然也是按照补码输出。

DeepOps的小笔记-程序员如何把控自己的职业重点总结

上面是原文地址

开篇的三点总结

第一,需要大致知道这个世界的一些规律和发展趋势,另外还得认识自己

第二,打牢基础,以不变应万变

第三,提升成长的效率

1、人才分类

技工、特种工、工程师、设计师和架构人员、经理

2、认识自己

特长、兴趣、方法、勤奋

3、打好基础

哪些是基础?新技术变化的都是表面的东西,内在的原理没怎么变化。只要抓住原理,举一反三,如果只是学了个表面功夫,技术变化了还得再重头学习。

哪些是基础?

程序语言:语言原理、累哭的原理、编程技术(并发、异步等)、编程范式、设计模式… …

系统原理:计算机系统、操作系统、网络协议、数据库原理… …

中间件:消息队列、缓存系统、网管代理、调度系统… …

理论知识:算法和数据结构、数据库范式、网络的七层模型、分布式系统… …

4、学习经验

1、挑选一手知识和信息源。

2、注意原理和基础第二要注重基础原理。

3、使用知识图谱一定要学会使用知识图

4、学会举一反三。

5、总结和归纳。

6、实践和坚持。

5、学习效率

主动学习:教授给他人(费曼学习方法)(90%)、实践(75%)、讨论(50%)

被动学习:听讲(5%)、阅读(10%)、试听(20%)、演示(30%)

另外陈皓老师的极客时间专栏内容非常详尽和充实,在那里面也说到了这些内容,别上面的总结内容更加详尽。推荐订阅一把,这是我订阅的最值得专栏,看成编程人生索引

DeepOps的Jenkins小笔记-搭建jenkins

官网中文站的教程

https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/

方式1:下载并运行 Jenkins

注意运行jenkins的jdk版本8或11

  1. 下载 Jenkins.
  2. 打开终端进入到下载目录.
  3. 运行命令 java -jar jenkins.war --httpPort=8080.
  4. 打开浏览器进入链接 http://localhost:8080.
  5. 按照说明完成安装.

http://localhost:8080/jks

方式2: docker安装jenkins

https://www.jenkins.io/doc/book/installing/

按顺序一路操作即可,如果有权限问题,加上sudo

docker network create jenkins
docker volume create jenkins-docker-certs
docker volume create jenkins-data
docker container run \
  --name jenkins-docker \
  --rm \
  --detach \
  --privileged \
  --network jenkins \
  --network-alias docker \
  --env DOCKER_TLS_CERTDIR=/certs \
  --volume jenkins-docker-certs:/certs/client \
  --volume jenkins-data:/var/jenkins_home \
  --publish 2376:2376 \
  docker:dind
docker container run \
  --name jenkins-blueocean \
  --rm \
  --detach \
  --network jenkins \
  --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client \
  --env DOCKER_TLS_VERIFY=1 \
  --publish 8080:8080 \
  --publish 50000:50000 \
  --volume jenkins-data:/var/jenkins_home \
  --volume jenkins-docker-certs:/certs/client:ro \
  jenkinsci/blueocean

初始化jenkins

Unlocking Jenkins

When you first access a new Jenkins instance, you are asked to unlock it using an automatically-generated password.

  1. Browse to http://localhost:8080 (or whichever port you configured for Jenkins when installing it) and wait until the Unlock Jenkins page appears.

Unlock Jenkins

To ensure Jenkins is securely set up by the administrator, a password has been written to the log (not sure where to find it?) and this file on the server:

最主要的就是找到这个密码,然后输入。另外根据提示下载插件,创建用户算是完成了基本设置。

使用war包安装:/var/jenkins_home/secrets/initialAdminPassword

使用docker 安装 :/var/lib/docker/volumes/jenkins-data/_data/secrets/initialAdminPassword

Please copy the password from either location and paste it below.Administrator password