机器视觉--python基础语法
Python基础语法
1. Python标识符
在 Python 里,标识符由字母、数字、下划线组成。
在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。
Python 中的标识符是区分大小写的。
以下划线开头的标识符是有特殊意义的。
-
以单下划线开头
_foo的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用from xxx import *而导入。 -
以双下划线开头的
__foo代表类的私有成员。 -
以双下划线开头和结尾的
__foo__代表 Python 里特殊方法专用的标识,如__init__()代表类的构造函数。
补充:
Python 可以同一行显示多条语句,方法是用分号 ; 分开,如:
>>> print ('hello');print ('runoob');
hello
runoob
2. Python保留字符
下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。
所有 Python 的关键字只包含小写字母。
| and | exec | not |
|---|---|---|
| assert | finally | or |
| break | for | pass |
| class | from | |
| continue | global | raise |
| def | if | return |
| del | import | try |
| elif | in | while |
| else | is | with |
| except | lambda | yield |
3. 行和缩进
学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
以下实例缩进为四个空格:
if True:print ("True")
else:print ("False")
以下代码将会执行错误:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.pyif True:print ("Answer")print ("True")
else:print ("Answer")# 没有严格缩进,在执行时会报错print ("False")
4. Python引号
Python 可以使用引号( ’ )、双引号( " )、三引号( ‘’’ 或 “”" ) 来表示字符串,引号的开始与结束必须是相同类型的。
其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。
word = 'word'
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""
5. Python注释
Python中单行注释采用 # 开头。
Python 中多行注释使用三个单引号 ''' 或三个双引号 """。
# 第一个注释
print ("Hello, Python!") # 第二个注释'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""
6. Python空行
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住:空行也是程序代码的一部分。
7. 输入输出
输入输出的最基本的方法就是控制台(PyCharm下方弹出的窗口、windows自带的cmd程序)。用户通过控制台输入一些字符串, 程序再通过控制台打印出一些字符串。
输入输出的最常见方法是图形化界面。 如平时用到的 QQ, 浏览器, steam 等, 都不需要用户输入命令,
而只是通过鼠标点击窗口点击按钮的方式来操作。
通过控制台输出
print('hello')a = 10
print(a)b = True
print(b)
更多的时候, 我们希望能够输出的内容是混合了字符串和变量的。**例如:**输出num = 10
num = 10
print(f'num = {num}')
注意:
-
使用 f 作为前缀的字符串, 称为 f-string
-
里面可以使用 { } 来内嵌一个其他的变量/表达式
-
python里面还支持许多格式化字符串的方法,此处简单理解即可
通过控制台输入
eg1:
num = 0
num = input('请输入一个整数: ')
print(f'你输入的整数是 {num}')
运行结果(绿色数字为输入):

注意:
- input 的参数相当于一个“提示信息”,也可以没有
- input 的返回值就是用户输入的内容. 是字符串类型
eg2:
a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')print(f'a + b = {a + b}')
运行结果:

此处的字符串是拼接不是算术运算,如果要想进行算术运算, 需要先转换类型
eg3:
a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')a = int(a)
b = int(b)print(f'a + b = {a + b}')
运行结果:

通过 int( ) 把变量转成了 int 类型
类似的, 使用 float( ), bool( ), str( ) 等可以完成对应的类型转换
8. 常量和表达式
可以把 Python 当成一个计算器, 来进行一些算术运算
print(1 + 2 - 3)print(1 + 2 * 3)print(1 + 2 / 3)
运行结果:

形如 1 + 2 - 3 这样是算式, 在编程语言中称为 表达式, 算式的运算结果, 称为 表达式的返回值
其中 1 , 2 , 3 这种称为 字面值常量, + - * / 这种称为 运算符 或者 操作符
注意:这里对于2/3这种计算结果,在一般类似于 C / Java 中结果为0(小数部分被截断),但是在Python中得到的结果则是一个小数,更符合日常使用的直觉。
9. 变量和类型
变量的介绍
示例:
给定四个分数, 67.5, 89.0, 12.9, 32.2 , 编写代码, 求这四个分数的方差
PS: 方差的计算过程: 取每一项, 减去平均值, 计算平方, 再求和, 最后除以 (项数 - 1)
在这个代码中,需要先计算四个数的平均值再计算方差,所以就需要一个变量保存平均数。
avg = (67.5 + 89.0 + 12.9 + 32.2)/4
total = (67.5 - avg)**2 + (89.0 - avg)**2 + (12.9 - avg)**2 + (32.2 - avg)**2
result = total/3
print(result)
注意:
- avg, total, result 均为变量.
- ** 在 Python 中表示乘方运算. ** 2 即为求平方
变量可以视为是一块能够容纳数据的空间。这个空间往往对应到 “内存” 这样的硬件设备上

定义变量
a = 10
创建变量的语句非常简单, 其中
- a 为变量名. 当我们创建很多个变量的时候, 就可以用名字来进行区分
- = 为赋值运算符, 表示把 = 右侧的数据放到 = 左侧的空间中
注意: 变量的名字要遵守一定规则
硬性规则(务必遵守)
-
变量名由数字字母下划线构成
-
数字不能开头
-
变量名不能和 “关键字” 重复
-
变量名大小写敏感. num 和 Num 是两个不同的变量名
软性规则(建议遵守)
-
变量名使用有描述性的单词来表示, 尽量表达出变量的作用
-
一个变量名可以由多个单词构成, 长一点没关系, 但是含义要清晰
-
当变量名包含多个单词的时候, 建议使用 “驼峰命名法”. 形如 totalCount , personInfo 这种, 除 了首个单词外, 剩余单词首字母大写
数学上, 变量通常使用 x, y, z 这种简单的英文字母或者拉丁字母表示. 但是在编程中不建议这样使用
原因是编程中, 一个程序里通常会同时创建出很多个变量. 如果只是使用单个字母表示, 在变量多了 的时候, 就很难记住哪个变量是干啥的, 从而给维护程序带来了一定的困难。因此我们更建议使用带 有明确描述性的名字, 来表示变量的用途。
使用变量
读取变量的值
a = 10
print(a)
修改变量的值
a = 20
print(a)
注意:在 Python 中, 修改变量也是使用 = 运算, 看起来和定义变量没有明显区别.
当然,也可以用一个变量的值赋给另外一个变量
a = 10
b = 20a = bprint(a)
print(b)
变量的类型
与C/Java不同,Python 变量的类型不需要显式指定, 而是在赋值的时候确定的。
(1)整数
a = 10
print(type(a))
运行结果:
<class 'int'>
PS: type 和 print 类似, 也是 python 内置的函数. 可以使用 type 来查看一个变量的类型
注意:和 C++ / Java 等语言不同, Python 的 int 类型变量, 表示的数据范围是没有上限的. 只要内存足够 大, 理论上就可以表示无限大小的数据
(2)浮点数(小数)
a = 0.5
print(type(a))
运行结果:
<class 'float'>
注意:和 C++ / Java 等语言不同, Python 的小数只有 float 一种类型, 没有 double 类型。但是实际上 Python 的 float 就相当于 C++ / Java 的 double, 表示双精度浮点数。
(3)字符串
a = 'hello'
print(type(a))
运行结果:
<class 'str'>
使用 ’ ’ 或者 " " 引起来的, 称为 字符串. 可以用来表示文本
注意: 在 Python 中, 单引号构成的字符串和双引号构成的字符串, 没有区别. 'hello' 和 "hello" 是 完全等价的。
补充:字符串的应用
可以使用len函数获取字符串长度
a = 'hello'
print(len(a))
可以使用 + 针对两个字符串进行拼接
a = 'hello'
b = 'world'
print(a + b)
此处是两个字符相加,不能拿字符串和整数/浮点数相加
(4)布尔
布尔类型是一个特殊的类型, 取值只有两种,True (真) 和 False (假)。
PS: 布尔类型也是数学上的一个概念. 初中就学过一个概念叫做 “命题” , 进一步的就可以判定 命题的真假
a = True
print(type(a))
b = False
print(type(b))
运行结果:
<class 'bool'>
<class 'bool'>
布尔类型在后续进行逻辑判断的时候也非常重要。
(5)其他
除了上述类型之外,Python中还有list,tuple,dict,自定义类型。
补充:
-
为什么需要这么多的类型?
(1) 类型决定了数据在内存中占据多大空间。
例如 float 类型在内存中占据 8 个字节。
PS: 计算机里面使用二进制来表示数据. 也就是每个位只能表示 0 或者 1.
1 个二进制位, 就称为是一个 “比特”, 8 个二进制位, 就称为一个 “字节” (Byte)
一个 float 变量在内存中占据 8 个字节空间, 也就是 64 个二进制位
电脑有 16GB 的内存空间, 也就是一共有 1024 * 1024 * 1024 * 8 这么多的二进制位
(2) 类型其实约定了能对这个变量做什么样的操作.
例如 int / float 类型的变量, 可以进行 + - * / 等操作
而 str 类型的变量, 只能进行 + (并且行为是字符串拼接), 不能进行 - * / , 但是还能使用 len 等其他操作.
总结: 类型系统其实是在对变量进行 “归类”. 相同类型的变量(数据) 往往具有类似的特性和使用规则
-
动态类型特性
在 Python 中, 一个变量是什么类型, 是可以在 “程序运行” 过程中发生变化的. 这个特性称为 “动态类型”
a = 10 print(type(a)) a = 'hello' print(type(a))运行结果:
<class 'int'> <class 'str'>在程序执行过程中, a 的类型刚开始是 int, 后面变成了 str
C++/Java 这样的语言则不允许这样的操作。 一个变量定义后类型就是固定的了. 这种特性则称为 “静 态类型”
动态类型特性是一把双刃剑
-
对于中小型程序, 可以大大的解约代码量(比如写一段代码就可以同时支持多种类型)
-
对于大型程序, 则提高了模块之间的交互成本(程序员 A 提供的代码难以被 B 理解)
-
10. 关系运算符
(1)如果关系符合, 则表达式返回 True. 如果关系不符合, 则表达式返回 False
a = 10
b = 20print(a < b) #Ture
print(a <= b) #Ture
print(a > b) #Flase
print(a >= b) #Flase
print(a == b) #Flase
print(a != b) #Ture
(2)关系运算符不光针对整数/浮点数进行比较, 还能针对字符串进行比较
a = 'hello'
b = 'world'print(a < b) #Ture
print(a <= b) #Ture
print(a > b) #Flase
print(a >= b) #Flase
print(a == b) #Flase
print(a != b) #Ture
注意:
- 直接使用 == 或者 != 即可对字符串内容判定相等 (这一点和 C / Java 不同).
- 字符串比较大小, 规则是 “字典序”
关于字典序:
想象一个英文词典, 上面的单词都是按照字母顺序排列. 如果首个字母相同, 就比较第二个字母 (就比如著名单词 abandon)
我们认为一个单词在词典上越靠前, 就越小;越靠后, 就越大
(3)对于浮点数来说, 不要使用 == 判定相等
print(0.1 + 0.2 == 0.3) #False
注意: 浮点数在计算机中的表示并不是精确的! 在计算过程中, 就容易出现非常小的误差
print(0.1)
print(0.2)
print(0.3)
print(0.1 + 0.2)
运行结果:

可以看到, 0.1 + 0.2 的结果并非是 0.3 , 虽然这个最后的数非常小了, 但是仍然会导致 == 的结果为 False。
现在很多主流语言都有这种问题,这个是 IEEE754 标准规定的浮点数格式所引入的问题,所以不需要做过多讨论
正确的比较方式: 不再严格比较相等了, 而是判定差值小于允许的误差范围。
a = 0.1 + 0.2
b = 0.3print(-0.000001 < (a - b) < 0.000001)
实际工程实践中, 误差在所难免, 只要保证误差在合理范围内即可
11. 逻辑运算符
像 and or not 这一系列的运算符称为 逻辑运算符。
- and 并且,两侧操作数均为 True, 最终结果为 True。 否则为 False。 (一假则假)
- or 或者,两侧操作数均为 False, 最终结果为 False。 否则为 True。 (一真则真)
- not 逻辑取反,操作数本身为 True, 则返回 False。 本身为 False,则返回 True。
注意:
一种特殊写法
a < b and b < c 这个操作等价于 a < b < c 。 这个设定和大部分编程语言都不相同
关于短路求值
和其他编程语言类似, Python 也存在短路求值的规则.
-
对于 and, 如果左侧表达式为 False, 则整体一定为 False, 右侧表达式不再执行
-
对于 or, 如果左侧表达式为 True, 则整体一定为 True, 右侧表达式不再执行
print(10 > 20 and 10 / 0 == 1) #False
print(10 < 20 or 10 / 0 == 1) #True
上述代码没有抛出异常, 说明右侧的除以 0 操作没有真正执行
12. 赋值运算符
(1) = 的使用
= 表示赋值. 这个我们已经用过很多次了. 注意和 == 区分.
= 除了基本的用法之外, 还可以同时针对多个变量进行赋值.
链式赋值
a = b = 10
多元赋值
a, b = 10, 20
代码实例: 交换两个变量
#代码1(基础写法)
a = 10
b = 20tmp = a
a = b
b = tmp#代码2(多元赋值)
a = 10
b = 20a, b = b, a
(2) 复合赋值运算符
Python 还有一些 复合赋值运算符。 例如 += -= *= /= %=
其中 a += 1 等价于 a = a + 1 。 其他复合赋值运算符也是同理
注意: 像 C++ / Java 中, 存在 ++ -- 这样的自增/自减运算符。 Python 中则不支持这种运算。 如果需要使用,
则直接使用 += 1 或者 -= 1
++ -- 最大的问题就是容易分不清前置和后置的区别。这一点 Python 语法在设计的时候就进行了 规避, 避免出现这种不直观, 并且容易混淆的语法
相关文章:
机器视觉--python基础语法
Python基础语法 1. Python标识符 在 Python 里,标识符由字母、数字、下划线组成。 在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 Python 中的标识符是区分大小写的。 以下划线开头的标识符是有特殊意义的…...
司南评测集社区 3 月上新一览!
司南评测集社区 CompassHub 作为司南评测体系的重要组成部分,旨在打创新性的基准测试资源导航社区,提供丰富、及时、专业的评测集信息,帮助研究人员和行业人士快速搜索和使用评测集。 2025 年 3 月,司南评测集社区新收录了一批评…...
TrollStore(巨魔商店)介绍及操作手册
TrollStore(巨魔商店)介绍及操作手册 一、TrollStore 简介 TrollStore 是一款针对 iOS 设备开发的第三方应用安装工具,它允许用户在不越狱设备的情况下,安装和使用未经过苹果官方 App Store 审核的应用程序。该工具利用了 iOS 系…...
SSE与Streamable HTTP的区别:协议与技术实现的深度对比
引言 在现代Web开发中,实时数据传输是许多应用的核心需求,从聊天应用到股票市场更新,从游戏服务器到AI模型通信。为了满足这一需求,各种技术应运而生,其中Server-Sent Events (SSE)和Streamable HTTP是两种重要的实时…...
android 之简述屏幕分辨率、屏幕密度、屏幕最小宽度
一、屏幕分辨率 屏幕分辨率是指屏幕显示的像素数量,通常以水平像素数乘以垂直像素数表示,例如 1920x1080。它直接影响屏幕的显示效果,包括图像的清晰度和细节。不同的设备可能有不同的屏幕分辨率。 1、常见的屏幕分辨率 标准分辨率&#x…...
mac环境中Nginx安装使用 反向代理
安装 如没有Homebrew 先安装Homebrew 国内镜像: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装成功后安装nginx: brew install nginx 启动nginx: nginx 或者 brew services st…...
2025年3月个人工作生活总结
本文为 2025年3月工作生活总结。 研发编码 一个curl下载失败问题的记录 问题: 某程序,指定IP和账户密码配置,再使用curl库连接sftp服务器,下载文件。在CentOS系统正常,但在某国产操作系统中失败,需要用命…...
实战打靶集锦-36-Deception
文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查5. 系统提权6. 写在最后 靶机地址:https://download.vulnhub.com/haclabs/Deception.ova 1. 主机发现 目前只知道目标靶机在192.168.56.xx网段,通过如下的命令,看看这个网段上在线的主…...
前端开发技术演进与就业现实:顺应时代方能不被淘汰-优雅草卓伊凡
前端开发技术演进与就业现实:顺应时代方能不被淘汰-优雅草卓伊凡 在技术浪潮汹涌的当下,常有人发问:“学习CSS、HTML、JS以后可以干什么?”对此,卓伊凡可以明确地给出答案:单纯学习这些过于基础的Web前端开…...
敏捷开发:以人为本的高效开发模式
目录 前言1. 什么是敏捷开发?1.1 敏捷开发的核心理念1.2 敏捷开发的优势 2. 敏捷宣言:四大核心价值观2.1 个体和交互胜过工具和过程2.2 可工作的软件胜过大量的文档2.3 客户合作胜过合同谈判2.4 响应变化胜过遵循计划 3. 敏捷开发的实践3.1 Scrum&#x…...
HarmonyOS 基础组件和基础布局的介绍
1. HarmonyOS 基础组件 1.1 Text 文本组件 Text(this.message)//文本内容.width(200).height(50).margin({ top: 20, left: 20 }).fontSize(30)//字体大小.maxLines(1)// 最大行数.textOverflow({ overflow: TextOverflow.Ellipsis })// 超出显示....fontColor(Color.Black).…...
CAD插入属性块 弹窗提示输入属性值——CAD知识讲堂
插入属性块时,有时会遇到不弹窗输入属性值的情况,解决方案如下: 最好关闭块编辑器并保存,插入属性块即可弹窗。...
Redis 主要能够用来做什么
Redis(Remote Dictionary Server)是一种基于内存的键值存储数据库,它的性能极高,广泛应用于各种高并发场景。以下是 Redis 常见的用途: 1. 缓存(Cache) 作用:存储热点数据…...
MySQL GROUP BY 和 HAVING 子句中 ‘Unknown column‘ 错误的深入解析
在使用 MySQL 进行数据分析和报表生成时,GROUP BY 和 HAVING 子句是非常强大的工具。然而,很多开发者在使用它们时会遇到一个常见的错误:"Unknown column column_name in having clause"。本文将深入解析这个错误的原因,…...
Sentinel实战(三)、流控规则之流控效果及流控小结
spring cloud Alibaba-Sentinel实战(三)、流控效果流控小结 一、流控规则:流控效果一)、流控效果:预热1、概念含义2、案例流控规则设置测试结果 二)、流控效果:排队等待1、概念含义2、案例流控规…...
JavaScrip——DOM编程
一、DOM元素创建与属性操作 1. 元素创建与插入 // 创建新元素 const newDiv document.createElement(div); newDiv.textContent "动态创建的内容";// 插入到容器末尾 document.body.appendChild(newDiv);// 在指定元素前插入 existingElement.before(newDiv);// …...
表单的前端数据流向
在CRM项目中,会涉及很多张表单。每张表单的前端代码都会放在一个单独的文件夹中。这个文件夹下包含三个文件,分别是: index.js(以下称为 index):负责组件的渲染和交互逻辑。model.js(以下称为 …...
PP-ChatOCRv3新升级:多页PDF信息抽取支持自定义提示词工程,拓展大语言模型功能边界
文本图像信息抽取技术在自动化办公、建筑工程、教育科研、金融风控、医疗健康等行业领域具有广泛应用场景。2024年9月,飞桨低代码开发工具PaddleX中新增文本图像智能产线PP-ChatOCRv3,充分结合PaddleOCR的文本图像版面解析能力和文心一言语言理解优势&am…...
《二叉树:二叉树的顺序结构->堆》
二叉树一般可以使用两种结构存储,一种是顺序结构,一种是链式结构。 顺序存储 顺序结构存储是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。实际上使用中只有堆才会使用数组来存储。二叉…...
OpenLayers:封装Overlay的方法
平时在使用OpenLayers的Overlay时常感觉不便,于是最近我便封装了一些Overlay增删改查的方法,以提高可用性。这边文章中我会介绍我封装的方法,同时记录这个过程中踩的一些坑。 添加Overlay /*** abstract 添加overlay* param {*} map* param…...
软件重构与项目进度的矛盾如何解决
软件重构与项目进度之间的矛盾可以通过明确重构目标与范围、采用渐进式重构策略、优化项目管理流程、提高团队沟通效率、建立重构意识文化等方式解决。其中,采用渐进式重构策略尤为关键。渐进式重构是指在日常开发过程中,以小步骤持续进行重构࿰…...
Mysql+Demo 获取当前日期时间的方式
记录一下使用Mysql获取当前日期时间的方式 获取当前完整的日期时间有常见的四种方式,获取得到的默认格式(mysql的格式标准)是 %Y-%m-%d %H:%i:%s其它格式 %Y-%m-%d %H:%i:%s.%f方式一:now()函数 select now();mysql> select now(); -------------…...
数智化时代下开源AI大模型驱动的新型商业生态构建——基于AI智能名片与S2B2C商城小程序的融合创新研究
摘要 数字技术的指数级发展推动物理世界向数智化网状结构加速转型,传统商业逻辑面临系统性重构。本文以"开源AI大模型AI智能名片S2B2C商城小程序"为研究主体,采用案例分析与技术验证相结合的方法,揭示技术融合对商业生态的重塑机制…...
Spring Cloud Alibaba 技术全景与实战指南
简介: Spring Cloud Alibaba 是阿里巴巴开源的微服务解决方案,基于 Spring Cloud 标准构建,提供了一站式分布式系统开发能力。它深度整合阿里云生态组件,为企业级微服务架构提供高可用、高性能的技术支撑。 核心特性 全栈微服务能…...
回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测
回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测 目录 回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【JCR一区级】Matlab实现NRBO-Transformer-BiLSTM多变量回归预测…...
了解 PoE 握手协议在网络配电中的重要性
在现代网络领域,以太网供电(PoE)已成为一项革命性的技术,通过在一根以太网电缆上集成电力和数据传输,简化了网络连接设备的部署和管理。这种无缝操作的核心是 PoE 握手 —— 一个促进支持PoE 的设备之间的通信、确保高效供电和保护网络基础设…...
小智机器人相关函数解析,BackgroundTask::Schedule (***)将一个回调函数添加到后台任务队列中等待执行
以下是对 BackgroundTask::Schedule 函数代码的详细解释: void BackgroundTask::Schedule(std::function<void()> callback) {std::lock_guard<std::mutex> lock(mutex_);if (active_tasks_ > 30) {int free_sram heap_caps_get_free_size(MALLOC_…...
基于Python设计的TEQC数据质量可视化分析软件
标题:基于Python设计的TEQC数据质量可视化分析软件 内容:1.摘要 本文旨在设计一款基于Python的TEQC数据质量可视化分析软件。随着全球导航卫星系统(GNSS)的广泛应用,数据质量的评估变得至关重要。TEQC(TransEditQualityCheck&…...
人月神话:如何有效的避免Bug的产生
bug的来源有很多种,一般的小bug很好修复,最头疼的是哪些致命且难以察觉的Bug。这些bug从哪来的? 在人月神话书中说:假设的不匹配是大多数致命和难以察觉的bug的主要来源。 假设来源于各个组成部分的开发者对概念的理解不一致。 为…...
Git的基础使用方法
本文最终功能: 1.从终端直接传输代码给仓库 2.用终端从仓库克隆文件 基本概念 我们先来理解下 Git 工作区、暂存区和版本库概念: 工作区:就是你在电脑里能看到的目录。 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的…...
