DeepOps的ubuntu小笔记-ubuntu20.04lts更换阿里云的源

首先备份本地的源

cp /etc/apt/sources.list /etc/apt/sources.list.bak

编辑源文件

vi /etc/apt/sources.list

删除原有内容,添加下面内容

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse

更新源

sudo apt-get update
sudo apt-get upgrade

DeepOps的macOS小笔记-macOS安装openvpn

因为公司远程办公需要使用到vpn,手头上只有一台mac,需要安装一下openvpn。

#如果没有安装brew,在安装一下homebrew 选择aliyun的源速度比较快
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 

使用brew 直接安装
brew install openvpn

#启动openvpn
sudo openvpn --config /openvpn-2.5.0/config/你的.ovpn

下面是我没有尝试成功的一个方案:

1、下载openvpn,我2021.1.7下的是 openvpn-2.5.0.zip 因为我喜欢zip

2、解压后得到,openvpn-2.5.0

3、进入openvpn-2.5.0文件夹,打README文件,根据上面操作即可

	tar -zxf openvpn-<version>.tar.gz
	cd openvpn-<version>
	./configure
	make
	make install

4、执行 ./configure 出现错误

checking additionally if OpenSSL is available and version >= 1.0.2... configure: error: OpenSSL version too old

看样子是我的openssl 版本过旧

执行下面语句安装或者更新一下openssl

#安装opensslbrew install openssl
#更新opensslbrew upgrade openssl

重新安装了openssl还是不行,到此以失败告终,然后我是用了brew安装了openvpn然后就成功了。

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

进行到了训练营的第四天,进入了下一个环节Task2,Task2还是python的基础内容,主要包括:

  1. 列表
  2. 元组
  3. 字符串
  4. 字典
  5. 集合
  6. 序列
    DAY 4 的学习内容:列表、元组

1 列表

1.1 列表的定义

中括号包围,逗号分割

1.2 列表的创建

直接创建

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

利用range()创建

x = list(range(10))
x = list(range(1, 11, 2))
x = list(range(10, 1, -2))

利用推导式创建列表

x = [0] * 5
x = [0 for i in range(5)]
x = [i ** 2 for i in range(1, 10)]
x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]

创建一个混合列表

mix = [1, 'lsgo', 3.14, [1, 2, 3]]

创建一个空列表

empty = []

1.3 向列表中添加元素

list.append(obj) 在列表末尾添加新的对象,特别注意append和extend的区别

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.append(['Thursday', 'Sunday'])
print(x)  
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', ['Thursday', 'Sunday']] 
print(len(x))  # 6

list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.extend(['Thursday', 'Sunday'])
print(x)  
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday', 'Sunday']

list.insert(index, obj) 在编号 index 位置插入 obj。

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.insert(2, 'Sunday')
print(x)
# ['Monday', 'Tuesday', 'Sunday', 'Wednesday', 'Thursday', 'Friday']

print(len(x))  # 6

1.4 删除列表中的元素

list.remove(obj) 移除列表中某个值的第一个匹配项

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.remove('Monday')
print(x)  # ['Tuesday', 'Wednesday', 'Thursday', 'Friday']

list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
y = x.pop()
print(y)  # Friday

y = x.pop(0)
print(y)  # Monday

y = x.pop(-2)
print(y)  # Wednesday
print(x)  # ['Tuesday', 'Thursday']

直接使用序号去指定删除,del x[0:2],python的切片还是非常好用,想怎么切就怎么切。

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
del x[0:2]
print(x)  # ['Wednesday', 'Thursday', 'Friday']

1.5 获取列表中的元素

切片的通用写法是 start : stop : step

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
# 情况 1 - "start :"
print(x[3:])  # ['Thursday', 'Friday']
print(x[-3:])  # ['Wednesday', 'Thursday', 'Friday']
# 情况 2 - ": stop"
print(week[:3])  # ['Monday', 'Tuesday', 'Wednesday']
print(week[:-3])  # ['Monday', 'Tuesday']
# 情况 3 - "start : stop"
print(week[1:3])  # ['Tuesday', 'Wednesday']
print(week[-3:-1])  # ['Wednesday', 'Thursday']
# 情况 4 - "start : stop : step"
print(week[1:4:2])  # ['Tuesday', 'Thursday']
print(week[:4:2])  # ['Monday', 'Wednesday']
print(week[1::2])  # ['Tuesday', 'Thursday']
print(week[::-1])  
# 情况 5 - " : "复制列表中的所有元素(浅拷贝)。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[:])  
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

浅拷贝与深拷贝 浅拷贝复制元素,不复制引用,深拷贝复制引用。

list1 = [123, 456, 789, 213]
list2 = list1
list3 = list1[:]

print(list2)  # [123, 456, 789, 213]
print(list3)  # [123, 456, 789, 213]
list1.sort()
print(list2)  # [123, 213, 456, 789] 
print(list3)  # [123, 456, 789, 213]

#list1 记录的是引用,深浅拷贝过去的都是引用,修改相同引用因此数据都发生变化
list1 = [[123, 456], [789, 213]] 
list2 = list1
list3 = list1[:]
print(list2)  # [[123, 456], [789, 213]]
print(list3)  # [[123, 456], [789, 213]]
list1[0][0] = 111
print(list2)  # [[111, 456], [789, 213]]
print(list3)  # [[111, 456], [789, 213]]

1.6 列表的常用操作符

等号操作符:==
连接操作符 +
重复操作符 *
成员关系操作符 in、not in
「等号 ==」,只有成员、成员位置都相同时才返回True。

列表拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。

list1 = [123, 456]
list2 = [456, 123]
list3 = [123, 456]

print(list1 == list2)  # False
print(list1 == list3)  # True

list4 = list1 + list2  # 等同extend()
print(list4)  # [123, 456, 456, 123]

list5 = list3 * 3
print(list5)  # [123, 456, 123, 456, 123, 456]

list3 *= 3
print(list3)  # [123, 456, 123, 456, 123, 456]

print(123 in list3)  # True
print(456 not in list3)  # False

1.7 列表的其他方法

list.count(obj) 统计某个元素在列表中出现的次数

list1 = [123, 456] * 3
print(list1)  # [123, 456, 123, 456, 123, 456]
num = list1.count(123)
print(num)  # 3

list.index(x[, start[, end]]) 从列表中找出某个值第一个匹配项的索引位置
list.reverse() 反向列表中元素
list.sort(key=None, reverse=False) 对原列表进行排序。

x = [123, 456, 789, 213]
x.sort()
print(x)
# [123, 213, 456, 789]

x.sort(reverse=True)
print(x)
# [789, 456, 213, 123]


# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]

x = [(2, 2), (3, 4), (4, 1), (1, 3)]
x.sort(key=takeSecond)
print(x)
# [(4, 1), (2, 2), (1, 3), (3, 4)]

x.sort(key=lambda a: a[0])
print(x)
# [(1, 3), (2, 2), (3, 4), (4, 1)]

2 元组

「元组」定义语法为:(元素1, 元素2, …, 元素n)
小括号把所有元素绑在一起
逗号将每个元素一一分开

2.1 创建和访问一个元组

Python 的元组与列表类似,不同之处在于tuple(元组)被创建后就不能对其进行修改,类似字符串。
元组使用小括号,列表使用方括号。
元组与列表类似,也用整数来对它进行索引 (indexing) 和切片 (slicing)。
创建元组可以用小括号 (),也可以什么都不用,为了可读性,建议还是用 ()。
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。
创建二维元组

x = (1, 10.31, 'python'), ('data', 11)
print(x)

2.2 更新和删除一个元组

t1 = (1, 2, 3, [4, 5, 6])
print(t1)  # (1, 2, 3, [4, 5, 6])

t1[3][0] = 9
t1[1] = 9 #**会报错不可修改**
print(t1)  # (1, 2, 3, [9, 5, 6])

2.3 元组相关的操作符

等号操作符:==
连接操作符 +
重复操作符 *
成员关系操作符 in、not in
「等号 ==」,只有成员、成员位置都相同时才返回True。

元组拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。

【例子】

2.4 内置方法

元组大小和内容都不可更改,因此只有 count 和 index 两种方法。

2.5 解压元组

解压(unpack)一维元组(有几个元素左边括号定义几个变量)

# 解压(unpack)一维元组
t = (1, 10.31, 'python')
(a, b, c) = t
print(a, b, c)
# 1 10.31 python

#例子】解压二维元组
t = (1, 10.31, ('OK', 'python'))
(a, b, (c, d)) = t
print(a, b, c, d)
# 1 10.31 OK python

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!