1.Python简介
Python:简洁而优雅
Python的优点:
- 表达能力比较强,并且语法简单,容易上手。
- 功能强大,用途广泛。
- 生态丰富,具有海量成熟的第三方库供程序员使用。
- 方便调用C/C++编写的代码进行高性能或系统级操作。
Python的缺点:
- 执行效率比较弱。
- 对于多核心并发程序支持偏弱。
- 动态类型系统对于大型项目不太友好。
Python采用的是动态类型系统,因此一个变量的类型在程序运行的时候是可以发生改变的。
2.基础语法
2.1 定义变量
python定义变量的语法比较简单
a = 10
基础命名规则:
- 变量名由数字,字母,下划线组成
- 变量不能以数字开头
- 变量名不能和Python的关键字重复
- 变量名字母大小写区分
print是Python中的一个内置函数,使用print函数可以将数据打印到控制台上
a = 10
print(a) #10
b = 20 #初始化
b = a #重新赋值
print(b) #10
2.2 变量类型
type是Python中的一个内置函数,可以使用type函数来查看一个变量的类型。
a = 10
print(type(a)) #<class 'int'>
a = a / 2
print(a) #5.0
print(type(a)) #<class 'float'>
a = 'hello'
print(type(a)) #<class 'str'>
int
- 与C/C++等其他语言不同的是,Python中int类型的变量能够表示的数据范围是没有上限的,只要内存足够大,理论上就可以表示无限大的数据。
float
- 与C/C++等其他语言不同的是,Python中两个整数相除后得到的结果是一个浮点数。
- 与C/C++等其他语言不同的是,Python中的浮点数只有float一种类型,没有double类型,实际上Python中的float就相当于C/C++等语言中的double类型,表示双精度浮点数
- Python中浮点数在内存中的存储遵循IEEE754标准,这套标准在表示浮点数时可能会存在微小的误差,但这个误差在实际开发中不会造成太大的影响。
str
- 字符串可以是用“单引号”、“双引号”、“三单引号”或者“三双引号”引起来的一串字符序列
- 使用“三单引号”或“三双引号”可以将多行字符串赋值给变量。
- 可以使用len函数来获取字符串的长度
- 可以使用+对两个字符串进行拼接
a = '2023 '
b = "11_28 "
c = '''17:36'''
d = """
111
222
abc
def
"""
print(a+b+c) #2023 11_28 17:36
print(len(a+b+c)) #16
print(d)
#111
#222
#abc
#
#def
bool
- bool 类型的取值只有 True 和 False
a = True
print(type(a)) #<class 'bool'>
2.3 动态类型特性
- 动态类型: 在运行时,解释器基于变量值的类型决定变量的类型。
- 静态类型: 在编译时,编译器基于所声明的数据类型确定变量的类型。
- C/C++等大多数语言都是静态类型语言,在编写静态类型语言的代码时,必须声明变量的数据类型
- Python则是一种动态类型语言, 因此在编写Python代码时不用声明变量的数据类型。
- 由于动态类型语言中,变量的类型是取决于变量值的类型,因此Python中同一个变量在不同时刻的类型可能是不同的
动态类型的特性
- 对于中小型的项目,显著减少代码量
- 对于大型程序,增加了模块间交互成本
2.4 注释
- 使用#开头的行都是注释
- 使用三引号引起来的称为“文档字符串”,也可以视为是一种注释
# 注释该行
"""
多行文本注释
"""
- Python实际上没有多行注释的语法,能够以三引号的方式添加注释,根本原因是因为Python会忽略未分配给变量的字符串文字。
- 这种三引号引起来的“文档字符串”,通常放在文件、函数、类的开头。
2.5 输入输出
- 通过控制台输入
- 如果想要混合输出不同类型的变量,那么就需要对输出的字符串进行格式化
- 使用f作为前缀的字符串,称为f-string。
- f-string里面可以使用{}来内嵌一个其他的变量或表达式。
a = input('请输入a:') # 12
b = input('请输入b:') # 34
print(f'{a} + {b} = {a+b}') #1234
a = int(a)
b = int(b)
print(f'{a} + {b} = {a+b}') # 46
- input的参数相当于一个“提示信息”,也可以没有。
- input的返回值就是用户输入的内容,是字符串类型。
- 由于input函数的返回值是字符串类型,第一个加法代码实际进行的是字符串的拼接操作。
- 如果想要进行算术运算,那么需要在运算前对读取到的值进行类型转换,如第二个加法
- 通过
int()
的方式可以将一个变量转换成int类型。 - 也可以通过
float()
、bool()
、str()
等将变量转换成对应的类型。
- 通过
2.6 运算符
2.6.1 算术运算符
Python中的算术运算符,包括+
、-
、*
、/
、%
、**
(幂)、//
(地板除)。
注意:
- 除0,程序会抛异常。
- 两个整数相除后得到的是一个浮点数。
**
可以求一个数的整数次幂,也可以求一个数的小数次幂。//
是地板除,整数除以整数得到的结果还是整数(舍弃小数部分,向下取整)。类型还是float
2.6.2 关系运算符
Python中的关系运算符,包括<
、<=
、>
、>=
、==
、!=
。
- C/C++中常用函数来比较两个字符串(strcmp,strncmp)
- 与C/C++等其他语言不同的是,Python中使用
==
或!=
即可判断两个字符串的内容是否相等。 - 不能直接使用
==
来判断两个浮点数是否相等,因为浮点数在Python中的表示并不是精确的。
a = 'hello'
b = 'hello'
c = "world"
print(a == b) # True
print(a == c) # False
a = 0.3
b = 0.2 + 0.1
c = 0.2 + 0.3
print(a == b) # False
print(b) # 0.30000000000000004
print(-0.000001 < (a - b) < 0.000001) # True
print(c) # 0.5
2.6.3 逻辑运算符
Python中的逻辑运算符,包括and
、or
、not
。
- and:并且。两侧操作数均为True,则最终结果为True,否则为False(一假则假)
- or:或者。两侧操作数均为False,则最终结果为False,否则为True(一真则真)
- not:逻辑取反。操作数本身为True,则返回False,本身为False,则返回True。
注意事项:
- 在Python中,a < b and b < c等价于a < b < c !!!。
- Python中也存在短路求值规则:
- and,如果左侧表达式为False,则整体一定为False,右侧表达式不再执行;
- or,如果左侧表达式为True,则整体一定为True,右侧表达式不再执行。
2.6.4 赋值运算符
Python中的赋值运算符,包括=
、+=
、-=
、*=
、/=
、%=
、**=
、//=
、&=
、|=
、^=
、<<=
、>>=
。
- 链式赋值是使用
=
同时对多个变量进行赋值的常见方式 - 多元赋值的方式对多个变量进行赋值
- 多元赋值能帮我们解决一些特殊问题,比如完成两个变量的交换
a = b = 1 #链式
print(a) # 1
print(b) # 1
a, b = 1, 2 #多元
print(a) # 1
print(b) # 2
a, b = b, a #交换变量
print(a) # 2
print(b) # 1
注意:
- C/C++等某些语言中支持
++
和--
运算符,但Python中不支持这种运算符,如果需要对变量进行自增/自减,则直接进行对应的+= 1
/-= 1
操作。
2.7 条件语句
正常情况:
a = input('请输入: ')
if a == 'a':
print('a')
elif a == 'b':
print('b')
else:
print("输入非法")
- 条件表达式和else后面使用
:
作为结尾。 - 对于多条件分支,不是写作else if,而是elif。
- 命中条件后要执行的语句块,使用缩进来区分各个代码块。
- Python当中的if语句也支持嵌套。
简写:
a = 3
b = 3
if a > b: print('a>b')
print('a>b') if a > b else print('a<=b') #a<=b
print('a>b') if a > b else print('a==b') if a==b else print('a<b') #a==b
- 比较特殊的是这种简写的条件语句,如果是if,else这种需要把if成立后的语句写在开头
示例:
输入一个数,判断是否为奇数
a = int(input('请输入: '))
if a%2 == 1:
print('这是一个奇数')
else:
print('这是一个偶数')
- 需要注意的是,在python中即使是负数,负奇数对2取余后得到的是1
2.8 缩进和代码块
Python中使用缩进来表示不同的代码块,不同级别的缩进,程序的执行效果是不同的。
a = int(input('请输入: '))
if a == 1:
print('a') #属于if中的语句
print('aa') #属于if中的语句
if a == 1:
print('b') #属于if中的语句
print('bb') #不属于if中的语句
2.9 空语句pass
Python语法规定,if语句、while语句、for语句、函数体、类定义等都不能为空,如果因为某些原因写了对应无内容的语句,就需要使用pass语句来避免语法报错
if a < b:
pass
- 空语句pass并不会对程序的执行有任何影响,只是占个位置,保持Python语法格式符合要求。
2.10 循环语句
2.10.1 while循环
语法
a = 1
while a < 10:
print(a)
a += 1
else:
print(f'a limit {a}')
- 在条件表达式和else后面使用:作为结尾。
- 命中条件后要执行的语句块,使用缩进来区分各个代码块。
- Python当中的while循环也支持嵌套。
- 在循环体当中使用break语句,可以跳出循环。
- 在循环体当中使用continue语句,可以停止当前的迭代,并继续下一次迭代。
- 如果使用了else语句,那么当循环条件不再成立时,会执行一次else代码块。
2.10.2 for 循环
语法
for i in range(10):
print(i) # 0 1 2 3 4 5 6 7 8 9
- 可迭代对象包括列表、元组、字典、集合、字符串等。
- 在可迭代对象和else后面使用:作为结尾。
- 命中条件后要执行的语句块,使用缩进来区分各个代码块。
- Python当中的for循环也支持嵌套。
- 在循环体当中使用break语句,可以跳出循环。
- 在循环体当中使用continue语句,可以停止当前的迭代,并继续下一次迭代。
- 如果使用了else语句,那么当循环条件不再成立时,会执行一次else代码块。
range函数
range(start, stop, step)
- 第一个参数代表的是数字序列的起始值,默认为0。
- 第二个参数代表的是数字序列的结束值(不包括结束值)。
- 第三个参数代表的是数字序列的增量值(步长),默认为1。
- rang函数生成的区间是左闭右开
- range函数经常和for循环搭配使用,其可以返回一个数字序列(可迭代对象)。
range函数的三种使用方式:
range(end):返回的数字序列为1,2,3,…,end-1。
range(start, end):返回的数字序列为start,start+1,start+2,…,end-1。
range(start, end, step):返回的数字序列为start,start+step,start+2× \times×step,…,start+n× \times×step。
for i in range(2,10):
print(i) # 2 3 4 5 6 7 8 9
for i in range(5, 10,2):
print(i) # 5 7 9
for i in range(10,3,-2):
print(i) # 10 8 6 4