文章目录
- 前言
- py的环境搭建
- 基础语法
-
- 变量
- 输入和输出
- 运算符
- 条件语句
- 循环语句
- 函数
- 列表和元组
-
- 列表
- 元组
- 字典
- 文件
-
- 文件操作
- 库
- 其他
前言
本文系统整理了 Python 3 系列的核心基础语法,内容覆盖环境搭建、变量与数据类型、输入输出、运算符、流程控制、函数定义、列表 / 元组 / 字典三大容器、文件操作以及标准库与第三方库的使用方法。文中穿插了与 C++ 语法的对比说明,方便有其他编程语言基础的读者快速对照理解,每一个知识点都配有可直接运行的代码示例,兼顾零基础入门与快速查阅两种需求。 无论你是初次接触编程的新手,还是希望快速上手 Python 的开发者,都可以通过这份笔记建立起完整的 Python 基础语法体系,为后续 Web 开发、数据分析、人工智能等方向的学习打下扎实基础。
py的环境搭建
主要需要安装的环境有俩部分:
1.运行环境:python(Welcome to Python.org中下载) 2.开发环境:pycharm(PyCharm,您需要的唯一 Python IDE 下社区版就行了)
关于py的注释:可以#进行单行注释 多行注释是用''' 我是注释 '''或者"""我是注释"""
基础语法
变量
变量命名规则:跟cpp的一样
引申:
主要的两种命名规范:
1.驼峰命名 eg:totalCount
2.蛇形命名: eg:total_count
变量的类型:
1.int:在py里面int能够表示的数据范围是无穷的(也就是无上限)
–整数能跟布尔和浮点数进行运算,但是不能跟字符串进行运算
2.float:在py里就是双精度浮点数–相当于cpp里面的double
3.字符串:用''或者""引起来(一般没区别) 有时还需要'''或者"""
–有区别的场景:e = 'My name is "renshen"'或者e = "My name is 'renshen'"才是对的
`e = "My name is "renshen""`这样是错的
–字符串之间可以用+号进行拼接:a = "hello"+"6" 但是字符传和数字不能进行拼接:a = "hello" + 6
–可以用len(a)来获取字符串长度
–注意:只有字符串类型,没有字符类型
4.布尔: 注意:py里面是True和False
5.其他类型
int类型默认是4个字节,但是会动态扩容
float是固定8个字节 bool是1个字节
int和float能用±*/但是不能用len
字符串可以+和len 但是不能-*/
在py里面有个特性叫做动态类型
eg:
a = 10#此时是int
print(type(a))
a = 'hello'#现在就变成字符串了
print(type(a))
关于变量的作用域:
如果是想在函数内部,定义全局变量,需要使用 global 关键字声明 eg:global x = 10
跟cpp不同:像 if /while/for 这样的语句块,不会影响到变量的作用域
输入和输出
通过控制台输出:
print:
例子:
print('hello')
a = 10
print(a)
b = True
print(b)# 输出的是True
num = 10
print(f'num = {num}') # 输出num = 10
使用 f 作为前缀的字符串,称为 f–string
里面可以使用 {} 来内嵌一个其他的变量 / 表达式.
通过控制台输入:
input:
num = 0
num = input('请输入一个整数:')
input 的参数相当于一个 “提示信息”, 也可以没有.
input 的返回值就是用户输入的内容。是字符串类型.
input() 函数返回的永远是字符串类型,如果后续需要对输入内容做数学运算,必须手动转换类型
num = float(input('请输入小数:')) 或者num=input('请输入小数:') num = float(num)
print(num + 5.5)
运算符
算数运算符:+ – * / % ** //
也有+= -= *= /= %=这些,但是没有++和––++a之所以没语法报错是因为py解释器把+当成了正号
/:不能用0做除数,不然会抛异常的;py里面的整数/整数结果可能是小数,不会被截断
//:是向下取整的/
%:也支持小数求余 注意:py的负数求余:-19%2的结果是1
**:乘方(整数次方和小数次方都行) 比如:4**0.5是2
关系运算符:< <= > >= == !=
–如果关系符合,则表达式返回 True. 如果关系不符合,则表达式返回 False
–关系运算符不光针对整数 / 浮点数进行比较,还能针对字符串进行比较
直接使用 == 或者 != 即可对字符串内容判定相等. 字符串比较大小,规则是 “字典序”
注意:不要对浮点数用==判定相等!(cpp也是这样)
逻辑运算符: and or not
–注意:py里面也是有短路求值规则的
a = 10
b = 20
c = 30
print(a < b and b < c) # True
print(not a < b) #False
注意:py里面的a<b<c相当于a<b and b<c
赋值运算符:
跟c++相比,多元赋值不太一样
py里面是:a,b = 10,20 以及交换两个变量的值可以:a,b = b,a
条件语句
py里面的条件语句用的是if
–如果想执行的语句是空语句的话,那里就写pass
if expression:
do_something1
do_something2
next_something
如果 expression 值为 True, 则执行 do_something1, do_something2,next_something
如果 expression 值为 False, 则只执行 next_something, 不执行 do_something1, do_something2
if expression:
do_something1
else:
do_something2
如果 expression 值为 True, 则执行 do_something1
如果 expression 值为 False, 则执行 do_something2
if expression1:
do_something1
elif expression2:
do_something2
else:
do_something3
如果 expression1 值为 True, 则执行 do_something1
如果 expression1 值为 False, 并且 expression2 为 True 则执行 do_something2
如果 expression1 值为 False, 并且 expression2 为 False 则执行 do_something3
–注意:在py里面,缩进代表代码块
a = input("请输入第一个整数:")
b = input("请输入第二个整数:")
if a == "1":
if b == "2":
print("hello")
print("world")
print("python")
其中:
print("hello") 具有两级缩进,属于 if b == "2" 条件成立的代码块.
print("world") 具有一级缩进,属于 if a == "1" 条件成立的代码块.
print("python") 没有缩进,无论上述两个条件是否成立,该语句都会执行.
循环语句
py里面就是while循环和for循环
while循环:
while 条件:
循环体
––条件为真,则执行循环体代码
––条件为假,则结束循环
for循环:
for 循环变量 in 可迭代对象:
循环体
––所谓的 "可迭代对象", 指的是 "内部包含多个元素,能一个一个把元素取出来的特殊变量"
eg:range(注意:range是左闭右开的)
比如: for i in range(1, 11) for i in range(2, 12, 2)
在py里面,也能用break和continue
函数
创建/定义函数:
–一个函数是可以一次返回多个返回值的。使用 , 来分割多个返回值
–如果只想关注其中的部分返回值,可以使用 _ 来忽略不想要的返回值 eg:a, _ = getPoint()
–关于参数默认值的设置跟cpp一样
def 函数名(形参列表):
函数体
return 返回值
调用/使用函数:
函数名(实参列表) // 不考虑返回值
返回值 = 函数名(实参列表) // 考虑返回值
在调用函数的时候,需要给函数指定实参。一般默认情况下是按照形参的顺序,来依次传递实参的.
但是py可以通过 关键字参数, 来调整这里的传参顺序,显式指定当前实参传递给哪个形参
def test(x, y):
print(f'x = {x}')
print(f'y = {y}')
test(x=10, y=20)
test(y=100, x=200)
列表和元组
元组和列表相比,是非常相似的,只是列表中放哪些元素可以修改调整,元组中放的元素是创建元组的时候就设定好的,不能修改调整。
列表
创建列表主要有两种方式:
alist = [] # [] 表示一个空的列表
alist = [1, 2, 3, 4] # 如果需要往里面设置初始值,可以直接写在 [] 当中
alist = [1, 'hello', True] # 列表中存放的元素允许是不同的类型
alist = list() # 这个也能像上面那样搞
print(alist) # 可以直接使用 print 来打印 list 中的元素内容
或者通过下标的形式去访问其中的元素(开头是0 注意:py里面的下标也可以是负数)
––但是如果下标超出列表的有效范围,会抛出异常
print(len(alist)) # 可以用len函数可以获取到列表的元素个数
注意:列表不是必须取名叫alist!
关于列表的切片操作:
alist = [1, 2, 3, 4]
print(alist[1:3]) # 输出: [2, 3] 这样是左闭右开
print(alist[1:]) # 省略后边界,取到列表末尾 → [2, 3, 4]
print(alist[:–1]) # 省略前边界,从列表开头取到倒数第2个元素 → [1, 2, 3]
print(alist[:]) # 省略两个边界,获取整个列表(相当于复制) → [1, 2, 3, 4]
print(alist[::2]) # 步长2 → [1, 3, 5, 7, 9]
print(alist[::–2]) # 步长-2 → [10, 8, 6, 4, 2]
# –切片中填写的下标超出列表范围时,不会抛出异常,只会尽可能取满足条件的元素
print(alist[100:200]) # 超出列表长度,返回空列表 → []
遍历列表元素:
alist = [1, 2, 3, 4]
第一种方法:
for elem in alist:
print(elem)
第二种方法:
for i in range(0, len(alist)):
print(alist[i])
第三种方法:
i = 0
while i < len(alist):
print(alist[i])
i += 1
查找列表元素:
使用 in 操作符,判定元素是否在列表中存在,返回布尔类型:
alist = [1, 2, 3, 4]
print(2 in alist) # True
print(10 in alist) # False
使用 index 方法,查找元素在列表中的下标,返回值是一个整数;如果元素不存在,则会抛出异常:
alist = [1, 2, 3, 4]
print(alist.index(2)) # 1(元素2的下标)
print(alist.index(10)) # 报错:ValueError: 10 is not in list
新增列表元素:
使用append方法,向列表末尾插入一个元素:
alist = [1, 2, 3, 4]
alist.append('hello')
print(alist) # 输出: [1, 2, 3, 4, 'hello']
使用 insert 方法,向任意位置插入一个元素(第一个参数表示插入位置的下标):
alist = [1, 2, 3, 4]
alist.insert(1, 'hello')
print(alist) # 输出: [1, 'hello', 2, 3, 4]
删除列表元素:
使用pop删除:
alist = [1, 2, 3, 4]
alist.pop() # [1, 2, 3]
alist.pop(2) # 删除下标为2的元素(即3) [1, 2, 4]
使用 remove 方法,按照值删除元素(删除列表中第一个匹配的元素):
alist = [1, 2, 3, 4]
alist.remove(2) # 删除值为2的元素 [1, 3, 4]
连接列表:
使用 + 拼接列表:
alist = [1, 2, 3, 4]
blist = [5, 6, 7] # 输出: [1, 2, 3, 4, 5, 6, 7]
使用 extend 方法拼接列表:
alist = [1, 2, 3, 4]
blist = [5, 6, 7]
alist.extend(blist)
print(alist) # 输出: [1, 2, 3, 4, 5, 6, 7]
print(blist) # 输出: [5, 6, 7]
––注意:extend方法是没有返回值的或者说返回值是None(这个是一个特殊变量,跟cpp里面的nullptr类似)
元组
如果元素不需要改变,优先考虑用元组 如果元素需要改变,则优先考虑列表
一般是不常用的 不过多介绍了
字典
字典是一种存储键值对的结构
创建字典:
a = {} 或者 b = dict()
student = { 'id': 1, 'name': 'zhangsan' } #这是在创建时指定初始值 分成多行去写也行
# 最后一个键值对,后面可以写 , 也可以不写
print(student) # 输出 {'id': 1, 'name': 'zhangsan'}
查找key:
使用 in 可以判定 key 是否在字典中存在,返回布尔值
student = {
'id': 1,
'name': 'zhangsan',
}
print('id' in student) # 返回的是True
使用 [] 通过类似于取下标的方式,获取到元素的值。只不过此处的 "下标" 是 key
––如果 key 在字典中不存在,则会抛出异常
print(student['id']) # 返回1
新增/修改元素:
使用 [] 可以根据 key 来新增 / 修改 value
student = {
'id': 1,
'name': 'zhangsan',
}
student['score'] = 90
student['id'] = 2
print(student) # {'id': 2, 'name': 'zhangsan', 'score': 90}
删除元素:
使用 pop 方法根据 key 删除对应的键值对
student = {
'id': 1,
'name': 'zhangsan',
'score': 80
}
student.pop('score')
print(student) # {'id': 1, 'name': 'zhangsan'}
遍历字典元素:
student = {
'id': 1,
'name': 'zhangsan',
'score': 80
}
for key in student:
print(key, student[key])
输出的值是:
id 1
name zhangsan
score 80
py中的字典,不是一个单纯的哈希表,而是做个特殊处理的:能够保证遍历出来的顺序和插入时的顺序保持一致
取出所有的key和val:
使用 keys 方法可以获取到字典中的所有的 key:
student = {
'id': 1,
'name': 'zhangsan',
'score': 80
}
print(student.keys()) # dict_keys(['id', 'name', 'score'])
使用 values 方法可以获取到字典中的所有 value:
student = {
'id': 1,
'name': 'zhangsan',
'score': 80
}
print(student.values())# dict_values([1, 'zhangsan', 80])
使用 items 方法可以获取到字典中所有的键值对:
student = {
'id': 1,
'name': 'zhangsan',
'score': 80
}
print(student.items())# dict_items([('id', 1), ('name', 'zhangsan'), ('score', 80)])
引申:在py里面有一个hash函数,可以计算哈希值
–也可以用来判断是不是可变对象:不可变的对象一般就是可哈希的;可变的对象一般就是不可哈希的
文件
关于文件路径里面目录之间的分隔符:虽然windows是\\,但是写成/也是允许的–linux的话是只能/
文件操作
打开文件:
使用内建函数 open 打开一个文件:
f = open('d:/test.txt', 'r')
第一个参数是一个字符串,表示要打开的文件路径
第二个参数是一个字符串,表示打开方式。其中 r 表示按照读方式打开,w 表示按照写方式打开,a 表示追加写方式打开。
如果打开文件成功,返回一个文件对象。后续的读写文件操作都是围绕这个文件对象展开。
如果打开文件失败(比如路径指定的文件不存在),就会抛出异常。
写文件:
写文件,要使用写方式打开,open 第二个参数设为 'w':
f = open('d:/test.txt', 'w')
f.write('hello')
f.close()
使用 'w' 一旦打开文件成功,就会清空文件原有的数据。
使用 'a' 实现 “追加写”,此时原有内容不变,写入的内容会追加到文件末尾
读文件:
读文件内容需要使用 'r' 的方式打开文件
使用 read 方法完成读操作,参数表示 “读取几个字符”
f = open('d:/test.txt', 'r')
result = f.read(2)
print(result)
f.close()
如果文件是多行文本,可以使用 for 循环一次读取一行:
f = open('d:/test.txt', 'r')
for line in f:
print(f'line = {line}')
f.close()
注意:print 打印一行的时候会默认加上一个换行符,print(f'line = {line}', end='')才不会
使用 readlines 直接把文件整个内容读取出来,返回一个列表,每个元素即为一行:
f = open('d:/test.txt', 'r')
lines = f.readlines()
print(lines)
f.close()
关闭文件:
使用 close 方法关闭已经打开的文件:
f.close() # 使用完毕的文件要记得及时关闭!
程序打开的文件个数超过系统上限时,就会抛出异常
Python 提供了 上下文管理器,来帮助实现自动关闭文件
–当 with 内部的代码块执行完毕后,就会自动调用关闭方法
with open('d:/test.txt', 'r', encoding='utf8') as f:
lines = f.readlines()
print(lines)
关于乱码问题:
如果被打开的文本跟open的方式所对应的字符集不同的话,就容易出现乱码问题(尤其是中文):
open指定字符集:eg:f = open("test.txt", "r", encoding="utf-8")
库
py3系列的标准库:The Python Standard Library — Python 3.10.20 documentation
第三方库推荐:awesome-python: awesome-python 的中文版
–或者用pip来拉取PyPI上的库进行使用:pip install [库名]
使用库的方法(或者说导入模块的方法):
import [模块名]–把这个外部的 .py 文件导入到当前 .py 文件中,并执行其中的代码
引申:打包.py文件成.exe程序的方法:先安装pyinstallerpip install pyinstaller 再打包程序:pyinstall -F .py的文件名
其他
定义类的实例方法时,必须把代表实例本身的参数(即 self)白纸黑字地写在第一个位置上
–不一定要命名成self,但是一般都是命名成这个的




