python 基础语法

第一章 python简介

第二章 python基础语法

2.1 简单输出

1
2
print(666)
print([输出项1,输出项2,...] [,sep=分隔符] [,end=结束符])

默认分隔符为空格,结束符为换行符

2.2 注释

使用 # 表示单行注释 使用 """ 表示多行注释

2.3 变量

变量是没有类型的,但是变量存储的数据是有类型的 可以使用 type() 查看变量类型

1
2
3
4
5
6
money = 50
print("我还有", money, "块钱")
print(type(money))
type_int = type(money)
print(type_int)
print(type(type_int))

输出结果为

1
2
3
4
我还有 50 块钱
<class 'int'>
<class 'int'>
<class 'type'>

2.4 数据类型显式转换

可以使用 int(x) float(x) str(x) 转换成相应的数据类型 注意 任何类型都可以转换成字符串类型,但是转换为int和float类型之前需要确保能转换到相应的类型

2.5 运算符

常用运算符 + - * / % // 两个斜杠为取整除,即只保留结果的整数部分 ** 两个星号为幂运算

1
2
3
4
print(9//2)
print(9.0//2.0)
print(3**2)
# 输出结果为4 4.0 9

  • not:取反运算符
  • and:与运算符
  • or 或运算符

成员运算符 - in:在指定序列中找到指定的值则返回True,否则返回False - not in

身份运算符 - is:判断两个标识符是否引用了同一个对象 - not is

2.6 字符串

字符串定义法:单引号,双引号,三引号(可以换行) 字符串内部可以使用转义字符 \ 来输出引号 可以使用加号(+)来对字符串进行拼接,但是不用拼接其他类型的变量,需要转换成字符串类型 ### 字符串格式化表示法 形式类似于c语言中printf括号中的内容

1
2
3
massage = "第%d个苹果重%.2f%s" % (3, 1.2, "kg")
print(massage)
# 输出结果:第3个苹果重1.20kg
此处类似于%5.4f格式的效果与C语言相同 注意,在本格式化表示方法中,小数会自动在后面添加若干个0

字符串快速格式化

f"内容{变量}"的格式来快速格式化

1
2
3
money = 1.2
massage = f"我有{money}这么多钱"
# 输出结果:我有1.2这么多钱
此种方法不需要进行精度处理,数字内容不变,小数位数也不变

2.7 input语句

使用 input() 语句可以从键盘获取输入 使用一个变量接收(存储)input语句获取的键盘输入数据即可 无论输入的数据是什么,都是存储为string类型的

第三章 Python判断语句

3.1 布尔类型和比较运算符

bool类型表示真和假 True 为真,为 1 False 为假,为 0

比较运算符与C语言相同,注意,==表示判断是否相等

3.2 if语句

语法格式:

1
2
3
4
5
6
7
8
9
if 条件:
语句1
elif 条件2:
语句2
elif 条件3:
语句3
...
else
语句N
注意,一定要进行缩进,python通过缩进的对齐判断语句的归属 条件判断语句的结果一定是bool类型的结果

第四章 Python循环语句

4.1 while循环

语法格式:

1
2
3
4
while 条件:
语句1
语句2
...
## 4.2 for循环 - while循环的循环条件是自定义的,自行控制循环条件 - for循环是一种”轮询”机制,是对一批内容进行”逐个处理”
将数据集中的每一个内容取出来进行处理。for循环是无法定义循环条件的,只能从数据集中依次取出内容

语法格式:

1
2
for 临时变量 in 待处理数据集: 
循环满足条件时执行的代码
例如:
1
2
3
4
5
name = "itheima"
# for循环处理字符串
for x in name:
print(x)
# 运行结果为将字符串中字符一个一个拿出来输出

语法格式中"待处理数据集"实际上为一个序列类型,其中包括字符串,列表,元组等等

通过range语句可以获得一个简单的数字序列,用于for循环中 range(num) 为从0到num的数字序列(不包含num本身) range(num1,num2) 为从num1到num2的数字序列(不包含num2本身) range(num1,num2,step) 为从num1到num2的数字序列(不包含num2本身),步长为step

临时变量在编程规范上,作用范围(作用域)只限定在for循环内部 如果在for循环外部访问临时变量: 实际上是可以访问到的。但是在编程规范上,是不允许、不建议这么做的

4.3 continue和break

在嵌套循环中,只能作用在所在的循环上,无法对上层循环起作用

4.4 pass

pass是空语句,不执行任何操作,一般用作占位语句,保持程序的完整性

第五章 Python函数基础

5.1 函数的基本定义

1
2
3
def 函数名(传入参数):
函数体
return 返回值

应先定义函数,后调用函数 参数不需要,可以省略 返回值不需要,可以省略 可以在def一行下面采用多行注释的方式写该函数的说明文档

5.2 None类型

Python中有一个特殊的字面量:None,其类型是:<class 'NoneType'> 无返回值的函数,实际上就是返回了:None这个字面量 None表示:空的、无实际意义的意思 return None,效果等同于不写return语句

在if判断中,None等同于False 一般用于在函数中主动返回None,配合if判断做相关处理

用于声明无内容的变量上 定义变量,但暂时不需要变量有具体值,可以用None来代替,例如name = None

5.3 局部变量与全局变量

在某一函数体内的为局部变量,只能在该函数体内生效 使用 global 关键字可以在函数内部声明全局变量

第六章 Python数据容器

6.1 list 列表

列表的特点: - 可以容纳多个元素(上限为2**63-1个) - 可以容纳不同类型的元素(混装) - 数据是有序存储的(有下标序号) - 允许重复数据存在 - 可以修改(增加或删除元素等)

6.1.1 列表的定义

1
2
3
4
5
# 定义变量
变量名称 = [元素1, 元素2, ...]
#定义空列表
变量名称 = []
变量名称 = list()

[] 作为表示,列表内每个元素之间以 , 隔开 列表可以一次存储多个数据,并且可以是不同的数据类型,支持嵌套

6.1.2 列表的下标索引

从头开始第一个的索引为0,一直到最后,如 list[2] 从尾开始最后一个的索引是-1,一直到最前 如果是列表嵌套列表,则可以使用类似C语言二位数组的表达方式,如 list[1][2]

要注意下标索引的取值范围,超出范围无法取出元素,并且会报错

6.1.3 列表的常用方法

在Python中,如果将函数定义为class(类)的成员,那么函数会称之为:方法 方法的使用格式为 对象.方法(传入参数)

方法 作用
列表.index(元素) 查找指定元素在列表的下标
找不到报错ValueError
列表[下标] = 值 修改特定位置的值
列表.insert(下标, 元素) 在指定的下标位置,插入指定的元素
列表.append(元素) 将指定元素,追加到列表的尾部
列表.extend(其它数据容器) 将其它数据容器的内容取出,依次追加到列表尾部
del 列表[下标] 删除列表指定下标元素
列表.pop(下标) 删除列表指定下标元素
列表.remove(元素) 从前向后,删除此元素第一个匹配项
列表.clear() 清空列表
列表.count(元素) 统计此元素在列表中出现的次数
找不到报错ValueError
len(列表) 统计容器内有多少元素

6.2 tuple 元组

元组的特点: - 有序、任意数量元素、允许重复元素 - 不可修改 元组内容不可以直接修改,会报错 如果元组内部有列表元素,列表中的内容可以修改

6.2.1 列表的定义

1
2
3
4
5
# 定义元组
变量名称 = (元素1, 元素2, ...)
#定义空元组
变量名称 = ()
变量名称 = tuple()

如果定义的元组只有一个元素时,在元素1后面要加一个逗号,例如 (1,),不然则不是元组类型

6.2.2 元组的下标索引

写法与列表相同,索引从0开始计算

6.2.3 元组的常用方法

  • 元组.index()
  • 元组.count()
  • len(元组) 实际效果见6.1.3表格

6.3 str 字符串

字符串的特点: - 只可以储存字符串,长度任意 - 不可修改,如果要修改,只能得到一个新的字符串

6.3.1 字符串的下标索引

类似于C语言中字符数组,可以通过下标索引取出字符,索引从0号开始计算,但是没有最后的‘\0’占位符

6.3.2 字符串的常用方法

  • str.index(参数)
    参数可以是一个字符,也可以是一个字符串
  • str.replace(m,n)
    将字符串中的m字符串替换为n字符串,返回一个新的字符串
  • str.split(分隔符)
    按照指定的分割符将字符串分为多个字符串,返回一个列表对象
  • str.strip(参数)
    去除字符串前后的参数中的内容,注意是按照字符去除,而不是整体的字符串匹配。如果不传入参数则默认去除字符串前后的空格和换行
  • str.count(参数)
  • len(str)

6.4 序列的切片

序列是指能用下标索引的容器,例如:列表、元组、字符串 切片:从一个序列中取出一个子序列

语法:序列[起始下标:结束下标:步长],返回一个新的序列 结束下标表示到某位结束,不包含结束位 起始下标留空表示从头开始,结束下标留空表示截取到结尾 步长可以为正数,也可以为负数,表示反向取,主要这时起始下标和结束下标也要反向标记 str[::-1]相当于将字符串从尾到头倒序输出

6.5 set 集合

集合的特点: - 无序,不支持下标索引访问 - 可以修改 - 数据不能重复 - 可以容纳多个数据,不同的数据类型

6.5.1 集合的定义

1
2
3
4
# 定义集合
变量名称 = {元素1, 元素2, ...}
#定义空集合
变量名称 = set()

6.5.2 集合的常用方法

  • set.add(ele)
  • set.remove(ele)
  • set.pop()
    没有参数,随机取出一个元素,并将该元素从集合中去除
  • set.clear()
    清空集合
  • set1.difference(set2)
    取出集合1对集合2的差集(集合1有集合2没有的内容),返回一个集合
  • set1.difference_update(set2)
    对比集合1和集合2,在集合1内删除和集合2相同的元素。集合1被修改,集合2不变
  • set1.union(set2)
    将两个集合合并,返回一个新的集合
  • len(set)

6.6 dict 字典

6.6.1 字典的定义

1
2
3
4
5
# 定义字典
变量名称 = {key: value, key: value, ...}
#定义空字典
变量名称 = {}
变量名称 = dict()

6.6.2 字典的常用方法

访问时可以使用dict[key]获取某一键的值

  • dict.keys()
    返回包含所有键的列表
  • dict.has_key(k)
    检查字典中是否含有某一键
  • dict.values()
    返回包含所有值的列表
  • dict.get(key)
    返回字典的键
  • dict.items()
    返回有键值对组成的元组
  • dict.copy()
    复制字典到另一字典
  • del dict(key)
    删除指定键的元素
  • dict.clear()
    清除键的所有元素
  • dict.pop(key)
    弹出某一键的值,并从字典中删除

第七章 Python函数进阶

7.1 函数的多返回值

return函数后面可以写多个返回值,用逗号隔开

1
2
3
4
def test_return():
return 1, "hello", True
x, y, z = test_return()
# x,y,z会对应接收到相应的值

7.2 函数的多种传参方式

Python的传参是传对象引用,是一个对象的内存地址,是传值和传址的一个综合 如果收到的是一个可以改变(字典或者列表)的对象的引用,就能修改对象的初始值;如果是一个不可修改(数字、字符、字符串或者元组)的对象,则不能直接修改原始对象。

7.2.1 位置参数

调用函数时根据函数定义的参数位置来传递参数

7.2.2 关键值参数

函数调用时通过“键=值”形式传递参数

1
2
3
4
5
6
def user_info(name, age, gender):
print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}")
# 关键字参数
user_info(name='小王', age=11, gender='女')
user_info(age=10, gender='女', name='潇潇') # 可以不按照参数的定义顺序传参
user_info('甜甜', gender='女', age=9) # 不表明名称的位置需对应

7.2.3 缺省参数

参数提供默认值,调用函数时可不传该默认参数的值 注意:所有位置参数必须出现在默认参数前,包括函数定义和调用

1
2
3
4
5
def user_info(name, age, gender='男'):
print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}")

user_info('小天', 13, '女')
user_info('小乐', 13)

7.2.4 不定长参数

不定长参数有两种类型 1. 位置传递(元组,*号) 2. 关键字传递(字典,**号)

1
2
3
4
5
6
7
8
9
10
11
# 不定长 - 位置不定长, *号
# 不定长定义的形式参数会作为元组存在,接收不定长数量的参数传入
def user_info(*args):
print(f"args参数的类型是:{type(args)},内容是:{args}")

user_info(1, 2, 3, '小明', '男孩')

# 不定长 - 关键字不定长, **号
def user_info(**kwargs):
print(f"args参数的类型是:{type(kwargs)},内容是:{kwargs}")
user_info(name='小王', age=11, gender='男孩')

7.3 函数可以作为参数传递

函数本身是可以作为参数,传入另一个函数中进行使用的。 将函数传入的作用在于:传入计算逻辑,而非传入数据。

1
2
3
4
5
6
7
8
9
10
11
# 定义一个函数,接收另一个函数作为传入参数
def test_func(compute):
result = compute(1, 2) # 确定compute是函数
print(f"compute参数的类型是:{type(compute)}")
print(f"计算结果:{result}")

# 定义一个函数,准备作为参数传入另一个函数
def compute(x, y):
return x + y
# 调用,并传入函数
test_func(compute)
在如上的例子中,test_func函数中需要一个函数,对1和2进行某种运算,外部定义了一个compute作为参数传递给了test_func函数

7.4 lambda匿名函数

lambda关键字,可以定义匿名函数(无名称),无名称的匿名函数,只可临时使用一次。

lambda函数基本语法:lambda 传入参数:函数体(一行代码)

第八章 文件操作

8.1 打开文件

使用open函数打开文件,并返回一个文件对象 myfile = open(file_name [, mode='r' [ , buffering=-1 [ , encoding = None ]]])

mode为文件的读写模式 | mode | 模式 | 文件不存在时 | 是否覆盖写 | | :---: | :---: | :----------: | :---------------: | | r | 只读 | 报错 | - | | r+ | 读写 | 报错 | 是 | | w | 只写 | 新建文件 | 是 | | w+ | 读写 | 新建文件 | 是 | | a | 只写 | 新建文件 | 否,从EOF处开始写 | | a+ | 读写 | 新建文件 | 否,从EOF处开始写 | 在字母后面加上b表示用二进制打开相应的文件,如rb+ 用w或a打开文件时,文件指针指向文件末尾;
用r打卡文件时,文件指针指向文件开头

encoding为编码格式(推荐使用UTF-8)。encoding的位置不是第三位,如果要说明的话,应使用关键字参数。也可省略。

8.2 文件的常用属性

  • file.name:返回文件的名称;
  • file.mode:返回打开文件时,采用的文件打开模式;
  • file.encoding:返回打开文件时使用的编码格式;
  • file.closed:判断文件是否己经关闭。

8.3 文件的常用方法

  • file.close()
  • file.flush()刷新输出缓存
  • file.read([size])
    如果设置了size,则读取size字节;如果没设置,则读取问价全部内容。
  • file.readline([size])
    如果设置了size,size小于改行总字节,则读取size字节;如果大于,则读取该行的所有内容
  • file.readlines()
    读取完文件,返回每行组成的列表
  • file.write(str)
    将字符串写入文件
  • file.writelines(sequence of strings)
    写多行到文件,参数可以是字符串,也可以是列表
  • file.seek(n)
    将文件指针移动到第n字节,0表示开头
  • file.tell()
    返回文件指针当前的位置

8.4 shutil模块

shutil模块中包含一些函数,用于复制、移动、改名和删除文件

第九章 Python异常、模块与包

9.1 异常

捕获常规异常

1
2
3
4
5
6
7
8
try:
可能发生错误的代码
except:
如果出现异常执行的代码
else:
如果异常不出现执行的代码
finally:
无论异常是否出现都要执行的代码
捕获指定异常
1
2
3
4
5
try:
print(name)
except NameError as e:
print('name变量名称未定义错误')
# 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
捕获多个异常,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写
1
2
3
4
try:
print(1/0)
except (NameError, ZeroDivisionError):
print('ZeroDivision错误...')
捕获所有异常,并输出
1
2
3
4
try:
print(name)
except Exception as e:
print(e)

异常是具有传递性的 当我们想要保证程序不会因为异常崩溃的时候, 就可以在main函数中设置异常捕获, 由于无论在整个程序哪里发生异常, 最终都会传递到main函数中, 这样就可以确保所有的异常都会被捕获

9.2 模块

模块是一个python文件,里面有类、函数、变量等等,可以导入模块来用

模块的导入语法: [from 模块名] import [模块|类|变量|函数| * ] [as 别名] 模块的使用: 模块名.功能名

1
2
3
4
5
6
7
8
9
10
# 使用import导入time模块中的sleep功能
# 方法1
import time
time.sleep(5)
# 方法2
from time import sleep
sleep(5)
# 方法3
from time import *
sleep(5)

注意:当导入多个模块,且模块内有重名的功能时,调用这个重名的功能时,使用的是后导入模块的该功能

if __name__ == '__main__': 可以用于某模块内部的运行代码,防止在导入模块时执行内置语句 __all__ = [' ' , ' ' , ...] 当模块文件中有 __all__ 变量,使用 from xxx import * 导入时,只能导入列表中的元素

9.3 包

包就是一个文件夹,其中包含了很多的py文件和一个_init.py文件


python 基础语法
https://harrison-1eo.github.io/2022/08/30/python基础语法/
作者
Harrison
发布于
2022年8月30日
更新于
2023年5月31日
许可协议