Python 3 基础语法速查与实战指南

📅 发布时间:2026/9/1 15:20:46
Python 3 基础语法速查与实战指南
文章目录前言py的环境搭建基础语法变量输入和输出运算符条件语句循环语句函数列表和元组列表元组字典文件文件操作库其他前言本文系统整理了 Python 3 系列的核心基础语法内容覆盖环境搭建、变量与数据类型、输入输出、运算符、流程控制、函数定义、列表 / 元组 / 字典三大容器、文件操作以及标准库与第三方库的使用方法。文中穿插了与 C 语法的对比说明方便有其他编程语言基础的读者快速对照理解每一个知识点都配有可直接运行的代码示例兼顾零基础入门与快速查阅两种需求。无论你是初次接触编程的新手还是希望快速上手 Python 的开发者都可以通过这份笔记建立起完整的 Python 基础语法体系为后续 Web 开发、数据分析、人工智能等方向的学习打下扎实基础。py的环境搭建主要需要安装的环境有俩部分:1.运行环境:python(Welcome to Python.org中下载) 2.开发环境:pycharm(PyCharm您需要的唯一 Python IDE 下社区版就行了)关于py的注释:可以#进行单行注释 多行注释是用 我是注释 或者我是注释基础语法变量变量命名规则:跟cpp的一样引申:主要的两种命名规范:1.驼峰命名 eg:totalCount2.蛇形命名: eg:total_count变量的类型:1.int:在py里面int能够表示的数据范围是无穷的(也就是无上限)–整数能跟布尔和浮点数进行运算但是不能跟字符串进行运算2.float:在py里就是双精度浮点数–相当于cpp里面的double3.字符串:用或者引起来(一般没区别)有时还需要或者–有区别的场景:e My name is renshen或者e My name is renshen才是对的e My name is renshen这样是错的–字符串之间可以用号进行拼接:a hello6但是字符传和数字不能进行拼接:a hello 6–可以用len(a)来获取字符串长度–注意:只有字符串类型没有字符类型4.布尔: 注意:py里面是True和False5.其他类型int类型默认是4个字节但是会动态扩容float是固定8个字节 bool是1个字节int和float能用±*/但是不能用len字符串可以和len 但是不能-*/在py里面有个特性叫做动态类型eg:a10#此时是intprint(type(a))ahello#现在就变成字符串了print(type(a))关于变量的作用域:如果是想在函数内部定义全局变量需要使用global关键字声明 eg:global x 10跟cpp不同:像 if /while/for 这样的语句块不会影响到变量的作用域输入和输出通过控制台输出:print:例子:print(hello)a10print(a)bTrueprint(b)# 输出的是Truenum10print(fnum {num})# 输出num 10使用 f 作为前缀的字符串称为 f-string 里面可以使用{}来内嵌一个其他的变量/表达式.通过控制台输入:input:num0numinput(请输入一个整数)input 的参数相当于一个 “提示信息”, 也可以没有.input 的返回值就是用户输入的内容。是字符串类型.input()函数返回的永远是字符串类型如果后续需要对输入内容做数学运算必须手动转换类型numfloat(input(请输入小数))或者numinput(请输入小数:)numfloat(num)print(num5.5)运算符算数运算符: - * / % ** //也有 - * / %这些但是没有和--–a之所以没语法报错是因为py解释器把当成了正号/:不能用0做除数不然会抛异常的;py里面的整数/整数结果可能是小数不会被截断//:是向下取整的/%:也支持小数求余 注意:py的负数求余:-19%2的结果是1**:乘方(整数次方和小数次方都行) 比如:4**0.5是2关系运算符:!–如果关系符合则表达式返回True. 如果关系不符合则表达式返回False–关系运算符不光针对整数 / 浮点数进行比较还能针对字符串进行比较直接使用或者!即可对字符串内容判定相等. 字符串比较大小规则是 “字典序”注意:不要对浮点数用判定相等!(cpp也是这样)逻辑运算符:andornot–注意:py里面也是有短路求值规则的a10b20c30print(abandbc)# Trueprint(notab)#False注意:py里面的abc相当于ab and bc赋值运算符:跟c相比多元赋值不太一样py里面是:a,b 10,20以及交换两个变量的值可以:a,b b,a条件语句py里面的条件语句用的是if–如果想执行的语句是空语句的话那里就写passifexpression:do_something1 do_something2 next_something 如果 expression 值为True,则执行 do_something1,do_something2,next_something 如果 expression 值为False,则只执行 next_something,不执行 do_something1,do_something2ifexpression:do_something1else:do_something2 如果 expression 值为True,则执行 do_something1 如果 expression 值为False,则执行 do_something2ifexpression1:do_something1elifexpression2:do_something2else:do_something3 如果 expression1 值为True,则执行 do_something1 如果 expression1 值为False,并且 expression2 为True则执行 do_something2 如果 expression1 值为False,并且 expression2 为False则执行 do_something3–注意:在py里面缩进代表代码块ainput(请输入第一个整数)binput(请输入第二个整数)ifa1:ifb2:print(hello)print(world)print(python)其中:print(hello)具有两级缩进属于ifb2条件成立的代码块.print(world)具有一级缩进属于ifa1条件成立的代码块.print(python)没有缩进无论上述两个条件是否成立该语句都会执行.循环语句py里面就是while循环和for循环while循环:while条件:循环体--条件为真则执行循环体代码--条件为假则结束循环for循环:for循环变量in可迭代对象:循环体--所谓的可迭代对象,指的是内部包含多个元素能一个一个把元素取出来的特殊变量eg:range(注意:range是左闭右开的)比如:foriinrange(1,11)foriinrange(2,12,2)在py里面也能用break和continue函数创建/定义函数:–一个函数是可以一次返回多个返回值的。使用 , 来分割多个返回值–如果只想关注其中的部分返回值可以使用 _ 来忽略不想要的返回值eg:a, _ getPoint()–关于参数默认值的设置跟cpp一样def函数名(形参列表):函数体return返回值调用/使用函数:函数名(实参列表)//不考虑返回值 返回值函数名(实参列表)//考虑返回值在调用函数的时候需要给函数指定实参。一般默认情况下是按照形参的顺序来依次传递实参的.但是py可以通过 关键字参数, 来调整这里的传参顺序显式指定当前实参传递给哪个形参deftest(x,y):print(fx {x})print(fy {y})test(x10,y20)test(y100,x200)列表和元组元组和列表相比是非常相似的只是列表中放哪些元素可以修改调整元组中放的元素是创建元组的时候就设定好的不能修改调整。列表创建列表主要有两种方式:alist[]# [] 表示一个空的列表alist[1,2,3,4]# 如果需要往里面设置初始值可以直接写在 [] 当中alist[1,hello,True]# 列表中存放的元素允许是不同的类型alistlist()# 这个也能像上面那样搞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]第一种方法:foreleminalist:print(elem)第二种方法:foriinrange(0,len(alist)):print(alist[i])第三种方法:i0whileilen(alist):print(alist[i])i1查找列表元素:使用in操作符判定元素是否在列表中存在返回布尔类型 alist[1,2,3,4]print(2inalist)# Trueprint(10inalist)# 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{}或者 bdict()student{id:1,name:zhangsan}#这是在创建时指定初始值 分成多行去写也行# 最后一个键值对后面可以写 , 也可以不写print(student)# 输出 {id: 1, name: zhangsan}查找key:使用in可以判定 key 是否在字典中存在返回布尔值 student{id:1,name:zhangsan,}print(idinstudent)# 返回的是True使用[]通过类似于取下标的方式获取到元素的值。只不过此处的下标是 key--如果 key 在字典中不存在则会抛出异常print(student[id])# 返回1新增/修改元素:使用[]可以根据 key 来新增/修改 value student{id:1,name:zhangsan,}student[score]90student[id]2print(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}forkeyinstudent:print(key,student[key])输出的值是:id1name zhangsan score80py中的字典不是一个单纯的哈希表而是做个特殊处理的:能够保证遍历出来的顺序和插入时的顺序保持一致取出所有的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打开一个文件:fopen(d:/test.txt,r)第一个参数是一个字符串表示要打开的文件路径 第二个参数是一个字符串表示打开方式。其中 r 表示按照读方式打开w 表示按照写方式打开a 表示追加写方式打开。 如果打开文件成功返回一个文件对象。后续的读写文件操作都是围绕这个文件对象展开。 如果打开文件失败比如路径指定的文件不存在就会抛出异常。写文件:写文件要使用写方式打开open第二个参数设为w:fopen(d:/test.txt,w)f.write(hello)f.close()使用w一旦打开文件成功就会清空文件原有的数据。 使用a实现 “追加写”此时原有内容不变写入的内容会追加到文件末尾读文件:读文件内容需要使用r的方式打开文件 使用 read 方法完成读操作参数表示 “读取几个字符” fopen(d:/test.txt,r)resultf.read(2)print(result)f.close()如果文件是多行文本可以使用for循环一次读取一行:fopen(d:/test.txt,r)forlineinf:print(fline {line})f.close()注意:print打印一行的时候会默认加上一个换行符,print(fline {line},end)才不会 使用 readlines 直接把文件整个内容读取出来返回一个列表每个元素即为一行:fopen(d:/test.txt,r)linesf.readlines()print(lines)f.close()关闭文件:使用 close 方法关闭已经打开的文件:f.close()# 使用完毕的文件要记得及时关闭程序打开的文件个数超过系统上限时就会抛出异常Python 提供了 上下文管理器来帮助实现自动关闭文件–当 with 内部的代码块执行完毕后就会自动调用关闭方法withopen(d:/test.txt,r,encodingutf8)asf:linesf.readlines()print(lines)关于乱码问题:如果被打开的文本跟open的方式所对应的字符集不同的话就容易出现乱码问题(尤其是中文):open指定字符集:eg:f open(test.txt, r, encodingutf-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但是一般都是命名成这个的