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

文章目录


1.变量的语法

1.1定义变量

1.1.1硬性规则(务必遵守)

  1. 变量名由数字字母下划线构成
  2. 数字不能开头
  3. 变量名不能和 "关键字" 重复
  4. 变量名大小写敏感. numNum 是两个不同的变量名

1.1.2软性规则(建议遵守)

  1. 给变量命名的时候,尽量使用描述性的单词来表示,尽量通过名字来表现出变量的左右
  2. 当我们使用一个单词描述不清楚的时候,可以使用多个单词来命名,不怕变量名字长,而怕变量的含义表达的不清楚
  3. 当变量名包含多个单词的时候, 建议使用 "驼峰命名法". 形如 totalCount , personInfo 这种, 除了首个单词外, 剩余单词首字母大写

当包含多个单词的时候,命名有多种规范:

  1. 驼峰命名:除了第一个单词的首字母,后续每个字母的首字母都大写

    例如:totalCount

  2. 蛇形命名:单词之间使用下划线来进行分割

    例如:total_count


1.2使用变量

读取变量的值

python 复制代码
a = 10#首次使用=对a进行设置值,这个过程是创建变量(初始化)
b = a
print(b)#当然, 也可以用一个变量的值赋给另外一个变量.

打印:

cpp 复制代码
10

修改变量的值

python 复制代码
a = 10#首次使用=对a进行设置值,这个过程是创建变量(初始化)
b = a
print(b)

a = 20#后续对a使用=操作,相当于修改了a的内容(赋值)
print(a)

打印:

cpp 复制代码
10
20

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


2.变量的类型

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

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

typeprint 类似, 也是 python 内置的函数. 我们可以通过type关键字来查看变量的类型。


2.1整型

打印:

cpp 复制代码
<class 'int'>

注意: 和 C++ / Java 等语言不同, Pythonint 类型变量, 表示的数据范围是没有上限的。只要内存足够大, 理论上就可以表示无限大小的数据。因此,python中就没有long这样的类型了,像byteshort这些类型在python中也不存在。


2.2浮点型

打印:

cpp 复制代码
<class 'float'>

注意: 和 C++ / Java 等语言不同, Python 的小数只有 float 一种类型, 没有 double 类型. 但是实际上 Pythonfloat 就相当于 C++ / Javadouble, 表示双精度浮点数。


2.3 字符串类型

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

打印:

cpp 复制代码
<class 'str'>

注意: 在 Python 中, 单引号构成的字符串和双引号构成的字符串, 没有区别.。'hello'"hello" 是完全等价的.。

这个单引号和双引号看似没用,实际上是有用的。

比如想打印一个句子:My name is 'YDK'

如果只用单引号或者双引号的话是无法实现的。


python里面还有一种三引号,来适用下面这种情况:

将错误语句注释后,运行。

打印:

cpp 复制代码
My 'name' is "YDK"

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

打印:

cpp 复制代码
<class 'str'>
5
helloworld
10

python中 ,报错有两种情况:

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

2.4布尔类型

布尔类型是一个特殊的类型, 取值只有两种, True (真) 和 False (假)

打印:

cpp 复制代码
<class 'bool'>
<class 'bool'>

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


2.5其他类型

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

为什么要有这么多类型?

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

例如 float 类型在内存中占据 8 个字节.

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

1 个二进制位, 就称为是一个 "比特", 8 个二进制位, 就称为一个 "字节" (Byte)一个 float 变量在内存中占据 8 个字节空间, 也就是 64 个二进制位。

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

例如 int / float 类型的变量, 可以进行 + - * / 等操作

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

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


2.6 动态类型特性

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

打印:

cpp 复制代码
<class 'int'>
<class 'str'>
<class 'bool'>

在程序执行过程中, a 的类型刚开始是 int, 后面变成了 str,最后变成了bool

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

这个是类型声明,方便程序员读程序的时候,更好的去理解,也方便开发工具更好的去解析。

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

对于中小型程序, 可以大大的解约代码量(比如写一段代码就可以同时支持多种类型)

对于大型程序, 则提高了模块之间的交互成本. (程序猿 A 提供的代码难以被 B 理解)


3.注释

Python 中有两种风格的注释

3.1 注释行

使用 # 开头的行都是注释

python 复制代码
# 这是一行注释

3.2 文档字符串

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

  • 可以包含多行内容

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

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

python 复制代码
"""
这是文档字符串
这是文档字符串
"""

3.3 如何批量注释

选中想要注释的代码,然后同时按Ctrl和/这两个键,即可完成批量注释。


3.4注释的规范

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

4.输入输出

4.1 和用户交互

程序需要和用户进行交互.

用户把信息传递给程序的过程, 称为 "输入".

程序把结果展示给用户的过程, 称为 "输出".

输入输出的最基本的方法就是控制台. 用户通过控制台输入一些字符串, 程序再通过控制台打印出一些字符串。

PyCharm 运行程序, 下方弹出的窗口就可以视为是控制台.

windows 自带的 cmd 程序, 也可以视为是控制台.

输入输出的最常见方法是图形化界面. 如我们平时用到的 QQ, 浏览器, steam 等, 都不需要用户输入命令, 而只是通过鼠标点击窗口点击按钮的方式来操作


4.2 通过控制台输出

Python 使用 print 函数输出到控制台

不仅能输出一个字符串, 还可以输出一个其他类型的变量

打印:

cpp 复制代码
10
True

更多的时候, 我们希望能够输出的内容是混合了字符串和变量的

例如:输出 num = 10

打印:

cpp 复制代码
num = 10

注意:

使用 f 作为前缀的字符串, 称为 f-string

里面可以使用 { } 来内嵌一个其他的 变量/表达式


打印:

cpp 复制代码
num = 10
num = 20

4.3 通过控制台输入

python 使用 input 函数, 从控制台读取用户的输入

打印:

cpp 复制代码
请输入一个整数: 1
你输入的整数是 1

注意:

input 的参数相当于一个 "提示信息", 也可以没有

input 的返回值就是用户输入的内容是字符串类型


打印:

cpp 复制代码
请输入第一个整数: 1
请输入第二个整数: 2
a + b = 12

此处的结果是字符串拼接, 不是算术运算. 如果要想进行算术运算, 需要先转换类型。


打印:

cpp 复制代码
请输入第一个整数: 1
请输入第二个整数: 2
a + b = 3

通过 int( ) 把变量转成了 int 类型

类似的, 使用 float( ), bool( ), str( ) 等可以完成对应的类型转换


5.运算符

5.1 算术运算符

+ - * / % ** // 这种进行算术运算的运算符, 称为 算术运算符

注意1:/ 中不能用 0 作为除数。否则会抛出异常

打印:

这种运行时出现的错误,也叫做抛出异常。如果程序运行过程中抛出异常,程序直接就中止了。异常后面的代码也就不会执行到了。

图中的ZeroDivisionError是除0异常。

异常是编程语言中的一种常见机制, 表示程序运行过程中, 出现了一些 "意外情况", 导致程序不能继续往下执行了。


打印:

有些编程语言中,/整数0 也会抛出异常;/浮点数0 会得到无穷大。


注意2: 整数 / 整数 结果可能是小数,而不会截断

打印:

cpp 复制代码
0.5

注意3: % 不是 "百分数", 而是求余数

打印:

cpp 复制代码
1

注意4: ** 是求乘方,不光能算整数次方, 还能算小数次方

打印:

cpp 复制代码
16
2.0

注意5: // 是取整除法(也叫地板除)。

整数除以整数, 结果还是整数(舍弃小数部分, 并向下取整,不是四舍五入)

打印:

cpp 复制代码
3
-4

5.2 关系运算符

<, <=, >, >=, ==, != 这一系列的运算符称为 关系运算符, 它们是在比较操作数之间的关系。

其中:

<= 是 "小于等于"

= 是 "大于等于"

== 是 "等于"

!= 是 "不等于"

  1. 如果关系符合, 则表达式返回 True。如果关系不符合, 则表达式返回 False

打印:

cpp 复制代码
True
True
False
False
False
True

  1. 关系运算符不光针对整数/浮点数进行比较, 还能针对字符串进行比较。

打印:

cpp 复制代码
True
True
False
False
False
True

注意:

直接使用 == 或者 != 即可对字符串内容判定相等。(这一点和 C / Java 不同)

字符串比较大小, 规则是 "字典序"
关于字典序:

想象一个英文词典, 上面的单词都是按照字母顺序排列。如果首个字母相同, 就比较第二个字母。(就比如著名单词 abandon)

我们认为一个单词在词典上越靠前, 就越小。 越靠后, 就越大。


  1. 对于浮点数来说, 不要使用 == 判定相等

打印:

cpp 复制代码
False

注意: 浮点数在计算机中的表示并不是精确的! 在计算过程中, 就容易出现非常小的误差。

打印:

cpp 复制代码
0.1
0.2
0.3
0.30000000000000004

不止是 Python 如此, 主流编程语言都是如此。这个是 IEEE754 标准规定的浮点数格式所引入的问题
正确的比较方式: 不再严格比较相等了, 而是判定差值小于允许的误差范围

打印:

cpp 复制代码
True

5.3 逻辑运算符

and or not 这一系列的运算符称为 逻辑运算符。
and 并且

  • 两侧操作数均为 True, 最终结果为 True。 否则为 False。 (一假则假)

or 或者

  • 两侧操作数均为 False, 最终结果为 False。否则为 True。 (一真则真)

not 逻辑取反

  • 操作数本身为 True, 则返回 False。本身为 False, 则返回 True

打印:

cpp 复制代码
True
False
False
True
False
True

一种特殊写法:

a < b and b < c 这个操作等价于 a < b < c 。这个设定和大部分编程语言都不相同。
关于短路求值

和其他编程语言类似, Python 也存在短路求值的规则.

对于 and, 如果左侧表达式为 False, 则整体一定为 False, 右侧表达式不再执行。

对于 or, 如果左侧表达式为 True, 则整体一定为 True, 右侧表达式不再执行。

打印:

cpp 复制代码
False
True

上述代码没有抛出异常, 说明右侧的除以 0 操作没有真正执行。


5.4 赋值运算符

  1. = 的使用

= 表示赋值. 这个我们已经用过很多次了。注意和 == 区分。

= 除了基本的用法之外, 还可以同时针对多个变量进行赋值。

链式赋值:

cpp 复制代码
a = b = 10

先把10赋值给b,然后把b赋值给a

多元赋值:

cpp 复制代码
a, b = 10, 20

10赋值给a,把20赋值给b


代码实例: 交换两个变量

1.基础写法

cpp 复制代码
a = 10
b = 20
tmp = a
a = b
b = tmp

2.基于多元赋值

cpp 复制代码
a = 10
b = 20
a, b = b, a

  1. 复合赋值运算符

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

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

cpp 复制代码
a = 10
a = a + 1
print(a)
b = 10
b += 1
print(b)

注意:

C++ / Java 中, 存在 ++ -- 这样的自增/自减运算符。

Python 中则不支持这种运算。如果需要使用, 则直接使用 += 1 或者 -= 1

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


5.5 其他

除了上述之外, Python 中还有一些运算符, 比如 身份运算符 (is, is not), 成员运算符 (in, not in), 位运算符 ( & | ~ ^ << >>) 等。



6. 练习

(1) [多选] 以下关于变量之间加法运算的说法, 正确的是:

A. Python 中的字符串之间够能相加.

B. Python 中的字符串可以和整数相加.

C. Python 中的整数可以和浮点数相加.

D. Python 中的整数可以和布尔值相加.

答案:A,C,D


(2) [单选] 以下关于类型的说法, 正确的是:

A. Python 中既有字符串类型, 也有字符类型.

B. Python 中既有 float, 也有 double.

C. Python 中既有 int, 也有 long

D. Python 中的整数表示范围无上限.

答案:D

python里面只有字符串类型,没有字符类型。

python中只有float

python里面只有int


(3) [单选] 以下 Python 代码, 合法的是

A. int a = 10

B. a = 10;

C. a = true

D. a = 'aaa' + 10

答案:B

A里面指定类型写法是:a:int = 10

B里面的通常情况下是不加的,但是加了也没错。如果多个语句写一行就要加 了,但是这种写法不推荐。

C里面应该是True

D里面也是错误的

相关推荐
千天夜1 分钟前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼5 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~8 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
放飞自我的Coder38 分钟前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词
正义的彬彬侠1 小时前
【scikit-learn 1.2版本后】sklearn.datasets中load_boston报错 使用 fetch_openml 函数来加载波士顿房价
python·机器学习·sklearn
张小生1801 小时前
PyCharm中 argparse 库 的使用方法
python·pycharm
秃头佛爷1 小时前
Python使用PDF相关组件案例详解
python
Dxy12393102161 小时前
python下载pdf
数据库·python·pdf
叶知安1 小时前
如何用pycharm连接sagemath?
ide·python·pycharm
weixin_432702261 小时前
代码随想录算法训练营第五十五天|图论理论基础
数据结构·python·算法·深度优先·图论