机器视觉--python基础语法

news2025/5/11 2:23:51

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 的关键字只包含小写字母。

andexecnot
assertfinallyor
breakforpass
classfromprint
continueglobalraise
defifreturn
delimporttry
elifinwhile
elseiswith
exceptlambdayield

3. 行和缩进

学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。

缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。

以下实例缩进为四个空格:

if True:
    print ("True")
else:
    print ("False")

以下代码将会执行错误:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.py

if 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 = 20

a = b

print(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 = 20

print(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.3

print(-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 = 20

tmp = a
a = b
b = tmp

#代码2(多元赋值)
a = 10
b = 20

a, b = b, a

(2) 复合赋值运算符

Python 还有一些 复合赋值运算符。 例如 += -= *= /= %=

其中 a += 1 等价于 a = a + 1 。 其他复合赋值运算符也是同理

注意: 像 C++ / Java 中, 存在 ++ -- 这样的自增/自减运算符。 Python 中则不支持这种运算。 如果需要使用,

则直接使用 += 1 或者 -= 1

++ -- 最大的问题就是容易分不清前置和后置的区别。这一点 Python 语法在设计的时候就进行了 规避, 避免出现这种不直观, 并且容易混淆的语法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

司南评测集社区 3 月上新一览!

司南评测集社区 CompassHub 作为司南评测体系的重要组成部分&#xff0c;旨在打创新性的基准测试资源导航社区&#xff0c;提供丰富、及时、专业的评测集信息&#xff0c;帮助研究人员和行业人士快速搜索和使用评测集。 2025 年 3 月&#xff0c;司南评测集社区新收录了一批评…

mac环境中Nginx安装使用 反向代理

安装 如没有Homebrew 先安装Homebrew 国内镜像&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装成功后安装nginx&#xff1a; brew install nginx 启动nginx&#xff1a; nginx 或者 brew services st…

实战打靶集锦-36-Deception

文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查5. 系统提权6. 写在最后 靶机地址&#xff1a;https://download.vulnhub.com/haclabs/Deception.ova 1. 主机发现 目前只知道目标靶机在192.168.56.xx网段&#xff0c;通过如下的命令&#xff0c;看看这个网段上在线的主…

前端开发技术演进与就业现实:顺应时代方能不被淘汰-优雅草卓伊凡

前端开发技术演进与就业现实&#xff1a;顺应时代方能不被淘汰-优雅草卓伊凡 在技术浪潮汹涌的当下&#xff0c;常有人发问&#xff1a;“学习CSS、HTML、JS以后可以干什么&#xff1f;”对此&#xff0c;卓伊凡可以明确地给出答案&#xff1a;单纯学习这些过于基础的Web前端开…

敏捷开发:以人为本的高效开发模式

目录 前言1. 什么是敏捷开发&#xff1f;1.1 敏捷开发的核心理念1.2 敏捷开发的优势 2. 敏捷宣言&#xff1a;四大核心价值观2.1 个体和交互胜过工具和过程2.2 可工作的软件胜过大量的文档2.3 客户合作胜过合同谈判2.4 响应变化胜过遵循计划 3. 敏捷开发的实践3.1 Scrum&#x…

CAD插入属性块 弹窗提示输入属性值——CAD知识讲堂

插入属性块时&#xff0c;有时会遇到不弹窗输入属性值的情况&#xff0c;解决方案如下&#xff1a; 最好关闭块编辑器并保存&#xff0c;插入属性块即可弹窗。

Sentinel实战(三)、流控规则之流控效果及流控小结

spring cloud Alibaba-Sentinel实战&#xff08;三&#xff09;、流控效果流控小结 一、流控规则&#xff1a;流控效果一&#xff09;、流控效果&#xff1a;预热1、概念含义2、案例流控规则设置测试结果 二&#xff09;、流控效果&#xff1a;排队等待1、概念含义2、案例流控规…

PP-ChatOCRv3新升级:多页PDF信息抽取支持自定义提示词工程,拓展大语言模型功能边界

文本图像信息抽取技术在自动化办公、建筑工程、教育科研、金融风控、医疗健康等行业领域具有广泛应用场景。2024年9月&#xff0c;飞桨低代码开发工具PaddleX中新增文本图像智能产线PP-ChatOCRv3&#xff0c;充分结合PaddleOCR的文本图像版面解析能力和文心一言语言理解优势&am…

《二叉树:二叉树的顺序结构->堆》

二叉树一般可以使用两种结构存储&#xff0c;一种是顺序结构&#xff0c;一种是链式结构。 顺序存储 顺序结构存储是使用数组来存储&#xff0c;一般使用数组只适合表示完全二叉树&#xff0c;因为不是完全二叉树会有空间的浪费。实际上使用中只有堆才会使用数组来存储。二叉…

OpenLayers:封装Overlay的方法

平时在使用OpenLayers的Overlay时常感觉不便&#xff0c;于是最近我便封装了一些Overlay增删改查的方法&#xff0c;以提高可用性。这边文章中我会介绍我封装的方法&#xff0c;同时记录这个过程中踩的一些坑。 添加Overlay /*** abstract 添加overlay* param {*} map* param…

软件重构与项目进度的矛盾如何解决

软件重构与项目进度之间的矛盾可以通过明确重构目标与范围、采用渐进式重构策略、优化项目管理流程、提高团队沟通效率、建立重构意识文化等方式解决。其中&#xff0c;采用渐进式重构策略尤为关键。渐进式重构是指在日常开发过程中&#xff0c;以小步骤持续进行重构&#xff0…

数智化时代下开源AI大模型驱动的新型商业生态构建——基于AI智能名片与S2B2C商城小程序的融合创新研究

摘要 数字技术的指数级发展推动物理世界向数智化网状结构加速转型&#xff0c;传统商业逻辑面临系统性重构。本文以"开源AI大模型AI智能名片S2B2C商城小程序"为研究主体&#xff0c;采用案例分析与技术验证相结合的方法&#xff0c;揭示技术融合对商业生态的重塑机制…

Spring Cloud Alibaba 技术全景与实战指南

简介&#xff1a; Spring Cloud Alibaba 是阿里巴巴开源的微服务解决方案&#xff0c;基于 Spring Cloud 标准构建&#xff0c;提供了一站式分布式系统开发能力。它深度整合阿里云生态组件&#xff0c;为企业级微服务架构提供高可用、高性能的技术支撑。 核心特性 全栈微服务能…

回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测

回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测 目录 回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【JCR一区级】Matlab实现NRBO-Transformer-BiLSTM多变量回归预测&#xf…

Git的基础使用方法

本文最终功能&#xff1a; 1.从终端直接传输代码给仓库 2.用终端从仓库克隆文件 基本概念 我们先来理解下 Git 工作区、暂存区和版本库概念&#xff1a; 工作区&#xff1a;就是你在电脑里能看到的目录。 暂存区&#xff1a;英文叫 stage 或 index。一般存放在 .git 目录下的…

Java常用异步方式总结

使用建议 完整代码见https://gitee.com/pinetree-cpu/parent-demon 提供了postMan调试json文件于security-demo/src/main/resources/test_file/java-async.postman_collection.json 可导入postMan中进行调试 Java异步方式以及使用场景 继承Thread类 新建三个类继承Thread&…

苍穹外卖day12

课程内容 工作台 Apache POI 导出运营数据Excel报表 功能实现&#xff1a;工作台、数据导出 工作台效果图&#xff1a; 数据导出效果图&#xff1a; 在数据统计页面点击数据导出&#xff1a;生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系统运…

【Feign】⭐️使用 openFeign 时传递 MultipartFile 类型的参数参考

&#x1f4a5;&#x1f4a5;✈️✈️欢迎阅读本文章❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章阅读大约耗时三分钟。 ⛳️motto&#xff1a;不积跬步、无以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;&#x1f381;&#x1f381;&a…

Linux中动静态库的制作

1.什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个⼈的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说库是⼀种可执⾏代码的⼆进制形式&#xff0c;可以被操作系统…

forms实现连连看

说明&#xff1a; forms实现连连看 效果图&#xff1a; step1:C:\Users\wangrusheng\RiderProjects\WinFormsApp2\WinFormsApp2\Form1.cs using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms;namespace …