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

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.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 语法在设计的时候就进行了 规避, 避免出现这种不直观, 并且容易混淆的语法

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

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

相关文章

算法日常记录

1. 链表 1.1 删除链表的倒数第 N 个结点 问题描述&#xff1a;给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 思路&#xff1a;先让fast跑n步&#xff0c;然后…

14使用按钮实现helloworld(1)

目录 还可以通过按钮的方式来创建 hello world 涉及Qt 中的信号槽机制本质就是给按钮的点击操作,关联上一个处理函数当用户点击的时候 就会执行这个处理函数 connect&#xff08;谁发的信号&#xff0c; 信号类型&#xff0c; 谁来处理这个信息&#xff0c; 怎么处理的&…

【Golang】泛型与类型约束

文章目录 一、环境二、没有泛型的Go三、泛型的优点四、理解泛型&#xff08;一&#xff09;泛型函数&#xff08;Generic function&#xff09;1&#xff09;定义2&#xff09;调用 &#xff08;二&#xff09;类型约束&#xff08;Type constraint&#xff09;1&#xff09;接…

k8s常用总结

1. Kubernetes 架构概览 主节点&#xff08;Master&#xff09;&#xff1a; 负责集群管理&#xff0c;包括 API Server、Controller Manager、Scheduler 和 etcd 存储。 工作节点&#xff08;Node&#xff09;&#xff1a; 运行 Pod 和容器&#xff0c;包含 kubelet、kube-pr…

Android 单例模式全解析:从基础实现到最佳实践

单例模式&#xff08;Singleton Pattern&#xff09;是软件开发中常用的设计模式&#xff0c;其核心是确保一个类在全局范围内只有一个实例&#xff0c;并提供全局访问点。在 Android 开发中&#xff0c;单例模式常用于管理全局资源&#xff08;如网络管理器、数据库助手、配置…

ffmpeg滤镜使用

ffmpeg实现画中画效果 FFmpeg中&#xff0c;可以通过overlay将多个视频流、多个多媒体采集设备、多个视频文件合并到一个界面中&#xff0c;生成画中画的效果 FFmpeg 滤镜 overlay 基本参数 x和y x坐标和Y坐标 eof action 遇到 eof表示时的处理方式&#xff0c;默认为重复。…

OpenAI即将开源!DeepSeek“逼宫”下,AI争夺战将走向何方?

OpenAI 终于要 Open 了。 北京时间 4 月 1 日凌晨&#xff0c;OpenAI 正式宣布&#xff1a;将在未来几个月内开源一款具备推理能力的语言模型&#xff0c;并开放训练权重参数。这是自 2019 年 GPT-2 部分开源以来&#xff0c;OpenAI 首次向公众开放核心模型技术。 【图片来源于…

贪心算法,其优缺点是什么?

什么是贪心算法&#xff1f; 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取在当前状态下最优(局部最优)的选择&#xff0c;从而希望导致全局最优解的算法策略。 它不像动态规划那样考虑所有可能的子问题&#xff0c;而是做出局部最优选择&#xff0c;依赖这些选择来…

python string 类型字符拼接 +=的缺点,以及取代方法

在Python中&#xff0c;使用进行字符串拼接虽然语法简单&#xff0c;但在性能和代码维护方面存在明显缺陷。以下是详细分析及替代方案&#xff1a; 一、的缺点 性能低下 内存分配问题&#xff1a;字符串在Python中不可变&#xff0c;每次操作会创建新字符串对象&#xff0c;导…

web前端开发-JS

web前端开发-JS 什么是JavaScript Web标准也称网页标准,由一系列的标准组成,大部分由W3C(World Wide Web Consortium,万维网联盟)负责制定。三个组成部分: HTML:负责网页的结构(页面元素和内容)。CSS:负责网页的表现(页面元素的外观、位置等页面样式,如:颜色、大小等)。JavaS…

Turtle综合案例实战(绘制复杂图形、小游戏)

在学习了 Turtle 基本的绘图技巧后,我们可以通过结合多个概念和技巧,绘制复杂的图形或实现简单的小游戏。本章将介绍两个实战案例: 绘制复杂图形:结合前面所学的知识,绘制一个精美的多层次复杂图案。简单的游戏:利用 Turtle 实现一个简单的小游戏——蛇形游戏,这是一个经…

Python设计模式:克隆模式

1. 什么是克隆模式 克隆模式的核心思想是通过复制一个已有的对象&#xff08;原型&#xff09;来创建一个新的对象&#xff08;克隆&#xff09;。这种方式可以避免重复的初始化过程&#xff0c;从而提高效率。克隆模式通常涉及以下几个方面&#xff1a; 原型对象&#xff1a…

逻辑漏洞之越权访问总结

什么是越权访问漏洞&#xff1f; “越权访问漏洞” 是 “逻辑漏洞” 的一种&#xff0c;是由于网站系统的权限校验的逻辑不够严谨&#xff0c;没有对用户权限进行严格的身份鉴别&#xff0c;导致普通权限的用户做到了其它普通用户或管理员才能完成的操作&#xff0c;称之为“越…

超短波通信模拟设备:增强通信能力的关键工具

在全球信息化战争的背景下&#xff0c;通信系统扮演着至关重要的角色。为确保通信系统的稳定性和抗干扰能力&#xff0c;超短波通信模拟设备应运而生&#xff0c;为军事训练和通信干扰任务提供强大的支持。 设备特点及优势 便携性&#xff1a;设备体积小、重量轻&#xff0c;…

C++STL——容器-vector(含部分模拟实现,即地层实现原理)(含迭代器失效问题)

目录 容器——vector 1.构造 模拟实现 2.迭代器 模拟实现&#xff1a; ​编辑 3.容量 模拟实现&#xff1a; 4.元素的访问 模拟实现 5.元素的增删查改 迭代器失效问题&#xff1a; 思考问题 【注】&#xff1a;这里的模拟实现所写的参数以及返回值&#xff0c;都是…

Ubuntu交叉编译器工具链安装

声明 本博客所记录的关于正点原子i.MX6ULL开发板的学习笔记&#xff0c;&#xff08;内容参照正点原子I.MX6U嵌入式linux驱动开发指南&#xff0c;可在正点原子官方获取正点原子Linux开发板 — 正点原子资料下载中心 1.0.0 文档&#xff09;&#xff0c;旨在如实记录我在学校学…

Tomcat 部署 Jenkins.war 详细教程(含常见问题解决)

在Tomcat中部署Jenkins.war文件是一个相对简单的过程&#xff0c;以下是详细步骤&#xff1a; 1. 准备工作 确保已安装JDK&#xff1a;Jenkins需要Java环境&#xff0c;建议安装JDK 8或更高版本。 下载Jenkins.war&#xff1a;https://pan.quark.cn/s/c4fd7711a1b3 下载Tomc…

DAY46 动态规划Ⅸ 股票问题Ⅱ

188. 买卖股票的最佳时机 IV - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxProfit(int k, vector<int>& prices) {if(prices.size()0) return 0;vector<vector<int>>dp(prices.size(),vector<int>(2*k1,0));for(int i…

4月2日工作日志

一个朴实无华的目录 今日学习内容&#xff1a;1.UIAbility生命周期2.默认启动页面设置3.同模块唤起ability 今日实操内容&#xff1a; 今日学习内容&#xff1a; 1.UIAbility生命周期 2.默认启动页面设置 3.同模块唤起ability 今日实操内容&#xff1a; 通过分组件文件&#…

鸿蒙学习笔记(4)-Radio组件、弹框组件、组件内部状态、工具类

一、Radio组件 &#xff08;1&#xff09;简述 创建单选框组件。接收一个RadioOptions类型对象参数。 名称类型必填说明valuestring是 当前单选框的值。 groupstring是 当前单选框的所属群组名称&#xff0c;相同group的Radio只能有一个被选中。 indicatorType12RadioIndica…