【Python】--- 基础语法(1)

目录

  • 1.变量和表达式
  • 2.变量和类型
    • 2.1变量是什么
    • 2.2变量的语法
    • 2.3变量的类型
      • 2.3.1整数
      • 2.3.2浮点数(小数)
      • 2.3.3字符串
      • 2.3.4布尔
      • 2.3.5其他
    • 2.4为什么要有这么多类型
    • 2.5动态类型特征
  • 3.注释
    • 3.1注释的语法
    • 3.2注释的规范
  • 结语

1.变量和表达式

python的学习就从以下一段代码开始吧。我们可以把python当成一个计算器,来进行一些算数运算,如下:

print(1 + 2 - 3) #0
print(1 + 2 * 3) #7
print(1 + 2 / 3) #1.6666666666666665

注意:

  • print是一个python的内置的函数,这个后面会讲解;
  • 可以使用+ - * /等运算符进行算术运算。且先算乘除,后算加减;
  • 运算符和数字之间,可以没有空格,也可以有多个空格。但我们一般习惯上会写一个空格(比较美观,可读性高)。

通过上面的代码我们发现,在python中,2 / 3 = 0.6666666666666666而不是0!!这一点我们可以对比C / Java,在这些语言中整数除以整数的结果还是整数!并且会把小数部分直接舍弃(截断)!
观察三式的结果,问题又来了,根据一般的数学运算,为什么结果小数的末尾是6665而不是6667呢?这是因为在编程中,一般没有“四舍五入”这样的规则。python中,形如1.666...665这样的小数被称为浮点数 ,且python遵循IEEE754标准~这套规则下,在内存中表示浮点数的时候,可能存在微小的误差,这就造成了1.666...665这样的结果。
print(1 + 2 / 3)中,形如1+ 2 / 3被称为表达式,这个表达式的结果被称为表达式的返回值1, 2, 3这样的数字,称为字面量+ / *这样的符号被称为运算符/操作符

2.变量和类型

2.1变量是什么

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

例题1:给定四个分数,67.4, 88.5, 90, 76.7,编写代码,求这四个数的方差。

在这个代码中,就需要先计算这四个数的平均值,然后再计算方差。那么为了方便计算方差,这就需要我们把计算得到的平均值使用变量保存起来,代码如下:

avg = (67.4 + 88.5 + 90.0 + 76.7) / 4 #计算平均值,并用变量avg保存
total = (67.4 - avg) ** 2 + (88.5 - avg) ** 2 + (90.0 - avg) ** 2 + (76.7 - avg) ** 2
result = total / 4
print(result)

注意:

  • avg, total, result均为变量,我们也可以创建任意多的变量,来随心所欲的保存很多很多的数据
  • **python中表示乘方运算** 2即为求平方。

变量可以视为是一块能够容纳数据的空间,这个空间往往对应到“内存”这样的硬件设备上,具体了解还请学习计算机组成原理

打个比方,我们可以把内存想象成一个宿舍楼,这个宿舍楼上有很多的房间,每个房间都可以存放数据。
衡量内存的一个重要指标就是内存空间的大小。 比如我的电脑内存是16GB,这个数字越大,意味着内存的存储空间就越大,能够存放的数据(变量)就越多。

2.2变量的语法

创建变量的语句非常简单,如下:

num = 10

其中num为变量名。当我们创建很多个变量的时候, 就可以用名字来进行区分=赋值运算符, 表示把 =右侧的数据放到 =左侧的空间中,与数学上的比较相等区分。
注意: 变量在命名时要注意一定的规则:

硬性规则,必须遵守!!

  • 变量名必须由数字,字母,下划线构成~不能包含特殊字符
  • 数字不能开头
  • 变量名不能和python的“关键字”重复,“关键字”为在语法中有特殊含义的单词,如ifprint等;
  • python中的变量名是大小写敏感的,因此要区分大小写。如numNum是两个不同的变量名。

软性规则,建议遵守!!

  • 给变量命名的时候,尽量使用描述性的单词来表示,尽量通过名字来表现出变量的作用。如在描述身高时用height,描述体重时用weight,用count来计数…;
  • 当包含多个单词时,命名规则可以有多种规范,
    • 驼峰命名: 除了第一个单词的首字母外,后面每个单词的首字母都大写。如personInfopushBack
    • 蛇形命名: 单词之间,使用下划线_来进行分隔。如person_infopush_back

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

再来看下面这一段代码:

a = 10  #(1)处
b = a
print(b)
a = 20   #(2)处
print(a)

上面这段代码,(1)处首次使用'='a进行设置值,这个过程是在创建变量(初始化)(2)处再对a使用'='操作,则是相当于修改a的内容(赋值)

2.3变量的类型

变量里面存储的不仅仅是数字,还可以存储其它种类的数据。为了区分不同种类的数据,我们引入了 “类型” 这样的概念。
注意:C++ / Java 等语言不同,Python变量的类型不需要显式指定,而是依靠初始化语句,根据初始化的值的类型来进行确定的

2.3.1整数

num = 10
print(type(num))   # => <class 'int'>

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

注意:Python中,int能够表示的数据范围,是无穷的。Pythonint可以根据要表示的数据大小自动扩容的~。因此Python这里就没有longshort这样的类型了。反观C++ / Java中的int只能表示大概-21~21亿。

2.3.2浮点数(小数)

num = 0.5
print(type(num))   # => <class 'float'>

注意:C++ / Java等语言不同,Python的小数只有 float一种类型,没有double类型。但是实际上Pythonfloat就相当于 C++ / Javadouble,表示双精度浮点数。所以Pythonfloat占8字节空间,通常把一个二进制位称为1 bit8 bit放在一起就称为一字节(byte)。

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

2.3.3字符串

arr = 'hello'
print(type(arr))   # => <class 'str'>

字符串 是把一个个字符放到一起。所谓字符可以认为是英文字母,阿拉伯数字,标点符号,甚至汉字符号,如'8''a''+'。然后使用 ' '或者 " "将字符引起来的,就称为字符串。可以用来表示文本。
注意:Python中,单引号构成的字符串和双引号构成的字符串,没有区别。'hello'"hello"是完全等价的。
思考这样一个问题:如何用字符串将My name is "ZhangSan",表示出来?

sentence = "My name is 'ZhangSan'" #sentence = "My name is "ZhangSan"" 是否可以?

对于上面这个问题,显然是不可以的。因此,如果字符串里面包含了双引号,表示字符串就可以用单引号引起来;反之,如果包含了单引号,那么便可以用双引号来引字符串。
如果句子中同时有单,双引号呢?这时Python还有一种字符串,使用三引号表示'''string'''"""string"""


a1 = "hello"
a2 = "world"
print(a1 + a2)  # 打印 => "helloworld"

上述这段代码就是字符串拼接,也就是把后面的字符串拼接到前一个字符串的末尾,从而得到一个更大的字符串(对于原字符串a1a2是无影响的)! 且我们不可以将字符串和数字混合相加! 字符串作为开发中最常用到的数据类型,支持的操作方式也是非常丰富的,这里就暂且不介绍了。
在这里插入图片描述
在这里插入图片描述
从结果也可以看出编译器报错了,还想介绍的一个点是,在Python中报错有两种情况:

  1. 语法错误: 在程序运行之前,Python解释器就能把错误识别出来;
  2. 运行错误: 在程序运行之前,Python解释器识别不了,必须要执行到对应的代码,才能发现问题。

2.3.4布尔

布尔类型是一个特殊的类型,取值只有两种True(真) 和 False(假)。着重要注意首字母大写!

a = True #或 a = False
print(type(a))   # => <class 'bool'>

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

2.3.5其他

除了上述类型之外,Python中还有 list(列表),tuple(元组),dict(字典),自定义类型 等等。我们后续再介绍。

2.4为什么要有这么多类型

  1. 不同的类型,占用的内存空间是不同的。
    例如:int在内存中默认占据4字节,但可以动态扩容;float类型固定占8字节;bool类型只占用1字节。

PS:计算机里面使用二进制来表示数据。也就是每个位只能表示 0 或者 1。1 个二进制位,就称为是一个 “比特”,8 个二进制位,就称为一个 “字节” (Byte)一个 float 变量在内存中占据 8 个字节空间,也就是 64个二进制位。我的电脑有 16GB的内存空间,也就是一共有 1024 * 1024 * 1024 * 8这么多的二进制位。

  1. 不同的类型,对应能够进行的操作也是不同的。
    例如:int / float类型的变量,可以进行+ - * / 等操作,而 str类型的变量,只能进行 +(并且操作是字符串拼接),不能进行- * /,但是还能使用 len等其他操作。

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

2.5动态类型特征

在程序运行过程中,变量的类型可能发生改变,这种称为动态类型,看如下代码:

a = 10
print(type(a))  # => <class 'int'>
a = "Hello"  
print(type(a))  # => <class 'str'>
a = True
print(type(a))  # => <class 'bool'>

在程序执行过程中,a的类型刚开始是 int,后面变成了 str,最后又变成了bool
C++/Java这样的语言则不允许这样的操作。一个变量定义后类型就是固定的了。这种特性则称为静态类型。如在c++ / Java中定义int a = 10;,那么如果后面再对a进行修改(a = "Hello"),程序就会报错。
一个编程语言是否是动态类型,只是取决于运行时类型是否发生改变,不取决于变量定义的时候是否声明类型!

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

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

PS:因此很多公司,在创业之初,喜欢用Python来开发,(产品规模小,一两个程序猿很快就能写出来),但是当项目达到一定的规模之后,动态类型的劣势就逐渐体现了,很多公司就会针对之前Python写的代码使用其他语言进行重构~

3.注释

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

PS:写代码是一件比较烧脑的事情,读代码同样也非常烧脑。相比于一板一眼的代码,一些口语化的描述能更好的帮助程序猿理解程序。代码的第一目标是容易理解,第二目标才是执行正确。 写注释不光是为了方便别人来理解,也是方便很久之后的自己理解。

3.1注释的语法

Python中一般有两种注释风格:

  1. 注释行:
    使用#开头的行都是注释,如下:
# 注释的内容
  1. 文档字符串:
    使用三引号引起来的称为 “文档字符串”,也可以视为是一种注释。(1). 可以包含多行内容;(2). 一般放在 文件/函数/类 的开头;(3). """ 或者 '''均可 (等价)。 如下:
"""
文档字符串
文档字符串
"""

3.2注释的规范

  1. 内容准确: 注释内容要和代码一致,匹配,并在代码修改时及时更新。
  2. 篇幅合理: 注释既不应该太精简, 也不应该长篇大论。
  3. 使用中文: 一般中国公司都要求使用中文写注释,外企另当别论。
  4. 积极向上: 注释中不要包含负能量。

结语

最近一段时间也是学习了Python的一些基础语法和代码案例,在这也会更新一段时间Python,作为自己的学习记录。如果出现什么错误的地方还请各位大佬指出^ _ ^ 。
Python的很多特色与他的设计哲学息息相关:解决一个问题,只提供一种方案~

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

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

相关文章

SpringCloud之Nacos的学习、快速上手

1、什么是Nacos Nacos是阿里的一个开源产品&#xff0c;是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案&#xff0c;用来实现配置中心和服务注册中心。 Nacos 快速开始 2、安装运行nacos nacos下载地址 下载地址: https://github.com/alibaba/nacos/rel…

Linux第33步_TF-A移植的第1步_创建新的设备树

TF-A移植第1步就是创建新的设备树&#xff0c;并命名为“stm32mp157d-atk”。 和“TF-A移植”有关的知识点&#xff1a; 1)设备树英文名字叫做Device tree&#xff0c;用来描述板子硬件信息的&#xff0c;比如开发板上的 CPU有几个核 、每个CPU核主频是多少&#xff0c;IIC、…

使用 MinIO 和 PostgreSQL 简化数据事件

本教程将教您如何使用 Docker 和 Docker Compose 在 MinIO 和 PostgreSQL 之间设置和管理数据事件&#xff0c;也称为存储桶或对象事件。 您可能已经在利用 MinIO 事件与外部服务进行通信&#xff0c;现在您将通过使用 PostgreSQL 自动化和简化数据事件管理来增强数据处理能力…

【C++】STL 算法 - 累加填充算法 ( 元素累加算法 - accumulate 函数 | 元素填充算法 - fill 函数 )

文章目录 一、元素累加算法 - accumulate 函数1、函数原型分析2、代码示例 二、元素填充算法 - fill 函数1、函数原型分析2、代码示例 一、元素累加算法 - accumulate 函数 1、函数原型分析 在 C 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 accu…

2024 年最佳 PDF 编辑器:我的首选清单

在我们日益多设备、跨平台的世界中&#xff0c;PDF 可能比以往任何时候都更有用。有大量免费的 PDF 阅读器可让您审阅和评论这些文件&#xff0c;但不可避免地&#xff0c;您需要具有编辑 PDF 的能力。这通常需要升级到高级 PDF 编辑器。 Adobe Acrobat 是最著名的&#xff0c…

20240119-子数组最小值之和

题目要求 给定一个整数数组 arr&#xff0c;求 min(b) 的总和&#xff0c;其中 b 的范围涵盖 arr 的每个&#xff08;连续&#xff09;子数组。由于答案可能很大&#xff0c;因此返回答案模数 Example 1: Input: arr [3,1,2,4] Output: 17 Explanation: Subarrays are [3]…

Unity3D学习之Unity基础——3D数学

文章目录 1. 前言2 Mathf和Math基础2.1 一般用于只计算一次的函数2.1.1 PI Π PI2.1.2 取绝对值 Abs2.1.3 向上取整 CeilToInt2.1.4 向下取整 FloorToInt2.1.5 钳制函数 Clamp2.1.6 获取最大值 Max2.1.7 获取最小值 Min2.1.8 一个数的n次幂 Pow2.1.9 四舍五入 RoundToInt2.1.10…

苹果Find My可查找添加32件物品,伦茨科技ST17H6x芯片加速产品赋能

苹果最近更新的支持文档证实&#xff0c;从 iOS 16 开始&#xff0c;"Find My"可查找添加物品从16件增加到32件&#xff0c;AirTag 和“查找”网络中的物品利用“查找”网络的强大功能来发挥作用&#xff0c;这个网络由数亿台加密的匿名 Apple 设备构成。“查找”网络…

【Unity】AB包下载

【Unity】AB包下载 1.使用插件打AB包 a.AB包分类 一般地&#xff0c;将预制体作为AB包资源&#xff0c;不仅需要对预制体本身进行归类&#xff0c;还要对其涉及的动画&#xff08;AnimationClip&#xff09;、动画状态机&#xff08;AnimatorController&#xff09;、以及所…

golang学习笔记——http.Handle和http.HandleFunc的区别与type func巧妙运用

文章目录 http.Handle和http.HandleFunc的区别http.Handle分析type func巧妙运用 http.HandleFunc分析总结参考资料 http.Handle和http.HandleFunc的区别 http.Handle和http.HandleFunc的区别体现了Go语言接口的巧妙运用 下面代码启动了一个 http 服务器&#xff0c;监听 808…

Android学习之路(22) 从模块化到组件化

从模块化到组件化 一、从模块化到组件化 Android 应用项目 , 都存在一个应用模块 ( Application Module ) , 在 build.gradle 构建脚本中 , 第一个插件配置 com.android.application , 表明 该 Module 编译打包后的输出是 APK 安装包 ; 该项目可以直接运行 ; plugins {id co…

基础+常用的数据结构

基础 java基础 JDK 和 JRE JDK&#xff0c;它是功能齐全的 Java SDK&#xff0c;是提供给开发者使用&#xff0c;能够创建和编译 Java 程序的开发套件。它包含了 JRE,同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc&#xff08;文档注释工具&#…

AI 的未来是开源的

想象一下&#xff0c;在未来&#xff0c;人工智能不会被锁在公司的金库里&#xff0c;而是由全球创新者社区一砖一瓦地在开放中构建的。协作&#xff0c;而不是竞争&#xff0c;推动进步&#xff0c;道德考虑与原始绩效同等重要。这不是科幻小说&#xff0c;而是人工智能发展核…

代码随想录 Leetcode1047. 删除字符串中的所有相邻重复项

题目&#xff1a; 代码(首刷自解 2024年1月21日&#xff09;&#xff1a; class Solution { public:string removeDuplicates(string s) {if (s.size() < 2) return s;stack<char> t;for (int i 0; i < s.size(); i) {if (t.empty()) t.push(s[i]);else {if (s[i…

广和通AI解决方案“智”赋室外机器人迈向新天地!

大模型趋势下&#xff0c;行业机器人将具备更完善的交互与自主能力&#xff0c;逐步迈向AI 2.0时代&#xff0c;成为人工智能技术全面爆发的重要基础。随着行业智能化&#xff0c;更多机器人应用将从“室内”走向“室外”&#xff0c;承担更多高风险、高智能工作。复杂的室外环…

使用easyexcel 导出多级表头demo

先看效果&#xff1a; 1、引入maven依赖 <!--EasyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version> </dependency> 2、实体类 package com.…

【算法练习Day50】下一个更大元素II接雨水

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 下一个更大元素II接雨水单调…

应用层—HTTPS详解(对称加密、非对称加密、密钥……)

文章目录 HTTPS什么是 HTTPSHTTPS 如何加密HTTPS 的工作过程对称加密非对称加密 HTTPS 什么是 HTTPS HTTPS 也是一个应用层的协议。是在 HTTP 协议的基础上引入的一个加密层。 由来&#xff1a;HTTP 协议内容都是按照文本的方式明纹传输&#xff0c;这就导致在传输过程中出现…

Python 面向对象绘图(Matplotlib篇-16)

Python 面向对象绘图(Matplotlib篇-16)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

GaussDB数据库中的MERGE INTO介绍

一、前言 二、GaussDB MERGE INTO 语句的原理概述 1、MERGE INTO 语句原理 2、MERGE INTO 的语法 3、语法解释 三、GaussDB MERGE INTO 语句的应用场景 四、GaussDB MERGE INTO 语句的示例 1、示例场景举例 2、示例实现过程 1&#xff09;创建两个实验表&#xff0c;并…