Python基础语法(1)上

常量和表达式

我们可以把 Python 当成一个计算器,来进行一些算术运算。

print(1 + 2 - 3)

print(1 + 2 * 3)

print(1 + 2 / 3)

这里我们可能会有疑问,为什么不是1.6666666666666667呢?

其实在编程中,一般没有“四舍五入”这样的规则,这些小数在python中称为浮点数,浮点数的话专门有一套规则在内存中表示的,我们叫IEEE754标准,关于这个标准里面具体怎么规定的,我们暂且不给大家做过多解释,在这个标准之下所规定的浮点数,它在内存中表示一些数据的时候,可能会存在非常小的误差。

注意:

print 是一个 Python 内置的函数,这个稍后详细介绍。

可以使用 + - * / ( ) 等运算符进行算术运算。先算乘除,后算加减。

运算符和数字之间,可以没有空格,也可以有多个空格。但是一般习惯上写一个空格(比较美观)。

PS: 美观是否重要?  

形如 1 + 2 - 3 这样的算式,在编程语言中称为表达式,算式的运算结果,称为表达式的返回值

其中 1 , 2 , 3 这种称为字面值常量,+ - * / 这种称为运算符或者操作符。

注意:熟悉 C / Java 的同学可能认为, 2 / 3 结果为 0 (小数部分被截断)。但是在 Python 中得到的结果则是一个小数,更符合日常使用的直觉。

示例

给定四个分数,67.5,89.0,12.9,32.2,编写代码,求这四个分数的平均数。

变量和类型 

变量是什么

有的时候,我们需要进行的计算可能更复杂一些,需要把一些计算的中间结果保存起来,这个时候就需要用到变量。   

示例

给定四个分数,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)

在python里面,x ** 后面跟一个数字表示x的几次方,例如x的平方就是 x ** 2,x的三次方就是 x ** 3。

打印的结果: 

注意:

avg, total, result 均为变量。

** 在 Python 中表示乘方运算,** 2 即为求平方。 

就像计算器中的 M 键功能类似,通过变量就可以保存计算过程中的中间结果。

只不过,计算器一般只能保存一个数据,而在 Python 代码中,可以创建任意多的变量,来随心所欲的保存很多很多的数据。

变量可以视为是一块能够容纳数据的空间,这个空间往往对应到 "内存" 这样的硬件设备上。

PS: 我们可以把内存想像成是一个宿舍楼,这个宿舍楼上有很多的房间,每个房间都可以存放数据。

衡量内存的一个重要指标就是内存空间的大小,比如我的电脑内存是 16GB。这个数字越大,意味着内存的存储空间就越大,能够存放的数据(变量) 就越多。

变量的语法

(1) 定义变量

 a = 10

 创建变量的语句非常简单, 其中

a 为变量名,当我们创建很多个变量的时候,就可以用名字来进行区分。

= 为赋值运算符,表示把 = 右侧的数据放到 = 左侧的空间中。

注意: 变量的名字要遵守一定规则。

变量命名的规则:

1.变量名必须由数字、字母、下划线构成,不能包含特殊符号

像 a1 是合法的变量名,1a、a * a都是非法的变量名

2.数字不能开头

3.变量名不能和python的关键字重复

那什么是关键字呢?关键字就是在语法中有特定含义的单词,像if这种也是非法变量名,if = 10就是非法的变量名

4.python中的变量名是区分大小写的

num = 10和Num = 10是两个不同的变量

我们所说的这几个规则都是硬性规则,硬性的意思就是必须要遵守的

软性规则(建议遵守)

1.变量名使用有描述性的单词来表示,尽量表达出变量的作用。

2.一个变量名可以由多个单词构成, 长一点没关系, 但是含义要清晰。

3.当变量名包含多个单词的时候,建议使用 "驼峰命名法",形如 totalCount ,personInfo 这种,除 了首个单词外,剩余单词首字母大写。还有蛇形命名,单词之间,使用下划线_来进行分割,形如person_info,total_count。

4.数学上, 变量通常使用 x, y, z 这种简单的英文字母或者拉丁字母表示,但是在编程中不建议这样使用。原因是编程中,一个程序里通常会同时创建出很多个变量,如果只是使用单个字母表示,在变量多了的时候,就很难记住哪个变量是干啥的,从而给维护程序带来了一定的困难,因此我们更建议使用带有明确描述性的名字,来表示变量的用途。

(2) 使用变量

读取变量的值

a = 10

print(a)#在打印a的时候,就是在读取变量中的内容

修改变量的值

a = 20

print(a)  

注意: 在 Python 中,修改变量也是使用 = 运算,看起来和定义变量没有明显区别。

当然,也可以用一个变量的值赋给另外一个变量。

a = 10

b = 20

a = b

print( a )

print( b )

#首次使用 = 对a进行设置值,这个过程是创建变量,也叫做初始化

#后续再对 a 使用 = 操作,这相当于修改 a 的内容,这个操作也管它叫赋值

 变量的类型

变量里面存储的不仅仅是数字,还可以存储其它种类的数据,为了区分不同种类的数据,我们引入了 "类型" 这样的概念。变量的类型就是对于不同种类的变量做出区分。 

注意: 和 C++ / Java 等语言不同,Python 变量的类型不需要显式指定,而是在赋值的时候确定的。

Python 中的变量的类型,不需要在定义变量的时候显示声明,而只是依靠初始化语句,根据初始化的值的类型来进行确定的。

(1) 整数

a = 10

print( type( a ))

在 python中, int 能够表示的数据范围是“无穷的”。Java中,int最大能够表示到 -21亿到+21亿,Python中的 int 是可以根据要表示的数据的大小自动扩容(赋值更大的数据,它就能更多的分配内存空间),因此Python中就没有像long这样的类型了,像byte、short这些类型在Python中也不存在,我们表示整数就用一个统一的int。

PS: type 和 print 类似,也是 python 内置的函数,可以使用 type 来查看一个变量的类型。

注意: 和 C++ / Java 等语言不同,Python 的 int 类型变量,表示的数据范围是没有上限的,只要内存足够大,理论上就可以表示无限大小的数据。

(2) 浮点数(小数)

a = 10.0

print( type( a ))

注意:像C++和Java里面float是四个字节的,也叫做“单精度浮点数”,把一个二进制位,称为一个bit,8个bit放在一起,就称为是一个字节,和 C++ / Java 等语言不同,Python 的小数只有 float 一种类型,没有 double 类型,但是实际上 Python 的 float 就相当于 C++ / Java 的 double,表示双精度浮点数。

PS: 关于单精度浮点数和双精度浮点数的问题,我们此处不做过多讨论,大家只要知道,相比于单精度浮点数,双精度浮点数占用的内存空间更多,同时表示的数据精度更高即可(大概精确到小数点后 15 位)。 

(3) 字符串

a = 'hello'

print(type( a ))

使用 ' ' 或者 " " 引起来的,称为字符串,可以用来表示文本。

注意: 在 Python 中,单引号构成的字符串和双引号构成的字符串,没有区别。'hello' 和 "hello" 是 完全等价的。Python中要求使用引号把一系列的字符引起来,就构成了“字符串”。

英文字母、阿拉伯数字、标点符号、甚至是汉字符号,都可以认为是字符。

可以使用 len 函数来获取字符串的长度。

a = 'hello'

print(len( a ) )

可以使用 + 针对两个字符串进行拼接。

形如这样的代码,就是“字符串拼接” ,也就是把后面的字符串拼接到前一个字符串的末尾,得到一个更大的字符串。这个拼接操作是生成一个新的字符串,这个新的字符串叫“helloworld”,换句话说,它对于我们原来的a1和a2是没有影响的。

此处是两个字符串相加,不能拿字符串和整数/浮点数相加。   

如果字符串中包含了双引号,表示字符串可以就用单引号引起来,如果字符串中包含了单引号,表示字符串可以用双引号引来。Python中还有一种字符串,比如“ ''' ”或者“ """ ”来表示。目前我了解的就单引号 (')、双引号 (")、三引号 (''' 或 """) 来表示不同类型的字符串,没有四引号或更多引号的语法。

 这段代码是敲代码的时候编译器不报错误,运行时报错误。

在Python中报错,有两种情况:

1.语法错误。在程序运行之前,Python解释器就能把错误识别出来

2.运行错误。在程序运行之前是识别不了的,必须执行到对应的代码,才能发现问题。

字符串作为开发中最常用到的数据类型,支持的操作方式也是非常丰富的,此处暂时不详细展开。

(4) 布尔

 布尔类型是一个特殊的类型,取值只有真(True)和假(False)两种(首字母都是大写),因此,布尔类型主要用于逻辑判定。

PS: 布尔类型也是数学上的一个概念。我们初中就学过一个概念叫做 "命题",进一步的就可以判定 命题的真假。例如:

汤老湿真帅! (真命题)

汤老湿是个妹子 (假命题)

a = True

print(type( a ))

b = False

print(type( b ))

布尔类型在咱们后续进行逻辑判断的时候,是非常有用的。

(5) 其他

除了上述类型之外,Python 中还有 list、tuple、dict、自定义类型等等,我们后续再介绍。

为什么要有这么多类型?

(1) 类型决定了数据在内存中占据多大空间。

int 默认是4个字节,但是可以根据表示的数据范围动态扩容,如果表示的范围太大了,超过4个字节能表示的21亿,它就能扩容成一个更大字节。例如 float 类型在内存中固定占据 8 个字节,bool类型一个字节就够了,字符串就属于这样一个变长的变量了。

PS: 计算机里面使用二进制来表示数据,也就是每个位只能表示 0 或者 1。

1 个二进制位,就称为是一个 "比特",8 个二进制位,就称为一个 "字节" (Byte)。

一个 float 变量在内存中占据 8 个字节空间,也就是 64 个二进制位。

我的电脑有 16GB 的内存空间,也就是一共有 1024 * 1024 * 1024 * 8 这么多的二进制位

(2) 类型其实约定了能对这个变量做什么样的操作

例如 int / float 类型的变量, 可以进行 + - * / 等操作,但int 和float这些不能使用len。

而 str 类型的变量,只能进行 + (并且行为是字符串拼接),不能进行 - * / ,但是还能使用 len 等其他操作。  

总结: 类型系统其实是在对变量进行 "归类",相同类型的变量(数据) 往往具有类似的特性和使用规则。

动态类型特性

在 Python 中,一个变量是什么类型,是可以在 "程序运行" 过程中发生变化的,这个特性称为 "动态类型"。

a = 10

print(type( a ))

a = 'hello'

print(type( a ))

a = True

print(type( a ))

在程序执行过程中(是说程序已经跑起来了),a 的类型刚开始是 int,后面变成了 str,再后来变成了布尔类型,a的类型随着程序的运行发生改变,这种特性我们就称之为动态类型。

与动态类型相对的叫做“静态类型”。

静态类型:程序在运行的过程中,变量的类型始终保持不变,这种类型就叫做静态类型。

C++/Java 这样的语言则不允许这样的操作,一个变量定义后类型就是固定的了,这种特性则称为 "静态类型"。

注意:一个编程语言是否是静态类型,只是取决于运行时,类型是否发生改变,不取决于变量定义的时候是否声明类型!

Python作为一个动态类型的语言,在定义变量的时候,也是可以写类型的!

比如:

a:int = 10
a:str = 'hello'
a:bool = True 

动态类型特性是一把双刃剑

对于中小型程序,可以大大的解约代码量(比如写一段代码就可以同时支持多种类型),对于大型程序,则提高了模块之间的交互成本,(程序员 A 提供的代码难以被 B 理解)。

注释

注释是什么

注释是一种特殊的代码, 它不会影响到程序的执行, 但是能够起到解释说明的作用, 能够帮助程序猿理解程序代码的执行逻辑。

PS: 写代码是一件比较烧脑的事情,读代码同样也非常烧脑,相比于一板一眼的代码,一些口语化的描述能更好的帮助程序猿理解程序。

# 计算 4 个数字 67.5, 89.0, 12.9, 32.2 的方差

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)

形如上述代码,如果没有注释,直接阅读,是不容易 get 到代码的含义是计算方差。但是通过加了一行注释解释一下,就让人一目了然了。

PS: 代码的第一目标是容易理解,第二目标才是执行正确。

写注释不光是为了方便别人来理解,也是方便三个月之后的自己理解。

一个反例:早些年医生的手写处方

注释的语法

Python 中有两种风格的注释。

(1) 注释行

使用 # 开头的行都是注释

#开头的注释,一般是写在要注释的代码的上方,也有少数情况是写在代码的右侧的,很少会写在代码的下方

# 这是一行注释

(2) 文档字符串

使用三引号引起来的称为 "文档字符串",也可以视为是一种注释。

可以包含多行内容

一般放在 文件/函数/类 的开头

""" 或者 ''' 均可 (等价)

"""

这是文档字符串,起到的作用和注释一样,也是解释说明的效果

""" 

文档字符串和我们的#不同,文档字符串可以被我们的Python解释器识别的,然后我们就可以搭配一些工具更方便的看到文档字符串的内容。

什么时候用文档字符串呢?

比如说在公司进行协同开发的时候,你写了一个功能,给被人去用,就可以通过文档字符串来描述这里的功能大概是怎么工作的,同时呢,给别人使用的时候提供一些参考依据。

注释的规范 

1. 内容准确:注释内容要和代码一致,匹配,并在代码修改时及时更新

2. 篇幅合理:注释既不应该太精简,也不应该长篇大论

3. 使用中文:一般中国公司都要求使用中文写注释,外企另当别论

4. 积极向上:注释中不要包含负能量(例如:领导 SB 等)

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

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

相关文章

Qt-QPushButton按钮类控件(22)

目录 描述 使用 给按钮添加图片 给按钮添加快捷键 添加槽函数 添加快捷键 添加组合键 开启鼠标的连发功能 描述 经过上面的一些介绍,我们也尝试的使用过了这个控件,接下来我们就要详细介绍这些比较重要的控件了 使用 给按钮添加图片 我们创建…

Java高级Day41-反射入门

115.反射 反射机制 1.根据配置文件re.properties指定信息,创建Cat对象并调用hi方法 SuppressWarnings({"all"}) public class ReflectionQuestion {public static void main(String[] args) throws IOException {//根据配置文件 re.properties 指定信息…

带你0到1之QT编程:十一、掌握Containers容器艺术,一网打尽开发利器

此为QT编程的第十一谈!关注我,带你快速学习QT编程的学习路线! 每一篇的技术点都是很很重要!很重要!很重要!但不冗余! 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点! …

【CSS in Depth 2 精译_031】5.3 Grid 网格布局的两种替代语法

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

计算机毕业设计 扶贫助农系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

浅谈人工智能之基于ollama本地大模型结合本地知识库搭建智能客服

浅谈人工智能之基于ollama本地大模型结合本地知识库搭建智能客服 摘要 随着人工智能技术的飞速发展,基于大型语言模型(LLMs)的智能客服系统逐渐成为提升企业服务质量和效率的关键工具。然而,对于注重数据隐私和安全的企业而言,使用云服务可能会引发数据泄露的风险。因此…

基于微信小程序的图书馆预约占座系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的图…

(k8s)kubernetes 挂载 minio csi 的方式(pod挂载pvc存在csi驱动问题,挂载不上)

一、安装Minio(Minio分布式集群搭建部署_minio集群最少几台-CSDN博客) 生成accessKeyID和secretAccessKey: 二、安装csi-s3插件(在k8s集群上) 首先我们把插件的yaml文件都下载下来,为了保证版本测试的一致性,我们下载…

FreeRTOS—任务通知

一,概念介绍 队列、信号量、事件组等IPC技术都需要创建一个中间对象进程之间通过这些中间对象进行通讯或同步。创建对象就需要分配内存,占用一定内存。 二,任务通知的特点: 一个任务或ISR向另外一个指定的任务发送通知&#xff0c…

浅谈树型结构——树

文章目录 一、什么是树?二、树的特点三、树的概念四、树的表示形式五、树的应用 一、什么是树? 树是一种 非线性 的数据结构,是树型结构。是一个由n个有限结点组成的一个具有层次关系的集合,这种集合因为看起来像一颗倒挂的树&am…

波克城市 x NebulaGraph|高效数据血缘系统在游戏领域的构建实战

关于波克城市和作者‍‍ 波克城市,一家专注于研发精品休闲游戏的全球化公司,连续七年入选中国互联网综合实力百强,2023 年位列 17 位。波克城市旗下拥有《捕鱼达人》《猫咪公寓2》等精品休闲游戏,全球注册用户超 5 亿,…

借老系统重构我准备写个迷你版apiFox

前段时间一直在忙公司老系统重构的方案设计,其中最大的重构点就是前后端分离。为了加快前后端协同开发和对接的工作效率,我决定写一个公司内部使用的迷你版的apiFox。 文章目录 有现成的工具为啥不用现有成熟方案初步成果展示下一步计划 有现成的工具为啥…

Kafka+PostgreSql,构建一个总线服务

之前开发的系统,用到了RabbitMQ和SQL Server作为总线服务的传输层和存储层,最近一直在看Kafka和PostgreSql相关的知识,想着是不是可以把服务总线的技术栈切换到这个上面。今天花了点时间试了试,过程还是比较顺利的,后续…

华为CNA VRM搭建(使用vmware worfstartion搭建)

创建虚拟机: 自定义→高级 选择硬件兼容性:默认安装版本,如果未来想要将此虚拟机安装到其他电脑,其他电脑版本过低,此时可以向下兼容,这里我们默认版本 稍后安装操作系统: CNA采用Euler OS系统…

MySQL练手题--体育馆的人流量(困难)

一、准备工作 Create table If Not Exists Stadium (id int, visit_date DATE NULL, people int); Truncate table Stadium; insert into Stadium (id, visit_date, people) values (1, 2017-01-01, 10); insert into Stadium (id, visit_date, people) values (2, 2017-01-02…

springboot luttuc redis 集成protobuf,手动序列化反序列化

前置需知: 1.本文章和网上大部分博客配置不太一样,各位看官要分析一下自己的需求。集成protobuf 本文章主要是手动调用protobuf的序列化方法,而不是交由springboot 去做,会偏向原生java 使用方式 2.由于为了和公司其他的项目达成…

HTML + CSS - 网页布局之一般布局浮动布局

1. 一般布局 1.1 一般布局相关参数 元素内容常常可以想像为放在一个盒子里,然后在周边加上内边距,边框和外边距,是盒子模型 默认一个块级区域会填充父类所有的行向空间,并且沿着块伸长容纳其内容,可以为块状体设置某…

实习项目|苍穹外卖|day10

Spring Task cron 表达式 入门案例 订单状态定时处理 通知用户支付!通知商家完成订单! Scheduled(cron "0 0/1 * * * ? ")public void processTimeoutOrder(){log.info("定时处理超时订单: {}", LocalDateTime.now());//答案是…

Stable Diffusion AI算法,实现一键式后期处理与图像修复魔法

在当今数字影像时代,后期处理技术已成为将原始图像转化为视觉上令人惊叹艺术作品的点睛之笔。随着人工智能技术的飞速发展,尤其是Stable Diffusion技术在图像处理领域的应用,图片后期处理已达到前所未有的高度,为摄影师、设计师及…

【STM32 HAL库】IIC通信与CubeMX配置

【STM32 HAL库】IIC通信与CubeMX配置 前言理论IIC总线时序图IIC写数据IIC读数据 轮询模式CubeMX配置应用示例AHT20初始化初始化函数读取说明读取函数 中断模式CubeMX配置状态机图fsm.caht20.c DMA模式CubeMX配置代码 前言 本文为笔者学习 IIC 通信的总结,基于keysk…