python基础内容

欢迎观看,欢迎指正,共同学习

注释

 单行注释,快捷键:ctrl + /
 注释是对代码的解释说明,解析器不会执行,所以不会输出到控制台
​
"""
多行注释
第一行
第二行
"""
'''
多行注释
'''

变量

变量:
    变量定义格式:变量名 = 值
    变量名的规则
        1.可以有数字,字母,下划线
        2.不能以数字开头,但是可以结尾
        3.严格区分大小写
        4.不能使用内置的关键字来定义
    变量名/标识符的命名规范:
        1.大驼峰:所有单词首字母全部大写,其余小写
            常用于:类名
        2.小驼峰:第一个单词首字母小写,其他单词首字母大写,其他的字母全部小写
            常用于:变量名,函数名
        3.蛇皮走位:多个单词之间使用下划线来分隔
            常用于:变量名,函数名
注意:
    1.变量一定要先定义,再使用
    2.变量永远是等号右侧赋值给等号左侧

数据类型

常用的数据类型
    1.数值类型
        整数:int
        浮点数:float
    2.布尔类型
        值有:
            1.True
            2.False
    3.字符串

输入输出

格式化输出
    方式1:%格式,占位符
    方式2:使用format格式化
​
字符串接收一切基本类型
%s:字符串
%d:整数
%f:浮点数
字符串不能和数字进行运算
注意:所有input函数的返回值都是字符串类型
ctrl + d 快速向下复制一行

格式化转换

int(x):将x转换成整数类型
float(x):将x转换成浮点数类型
str(x):将x转换成字符串类型
eval(x):去掉x最外围的引号,将引号去掉,展示最原始的内容的类型
将浮点数转换成整数   
注意:
    1、如果是浮点数转换成整数,会有精度损失
    2、浮点类型的字符串不能转换成整数类型,会报错

运算符

算数运算符

+
-
*
/
//:整除    10 // 3  = 3
%:取余/取模  10 % 3 = 1
**:幂指数,2**3 = 8
():优先计算

复合赋值运算符

+=
-=
*=
/=
//=:整除
%=:取余/取模
**=:幂指数,

比较运算符

==
!=
>
<
>= : 大于 或者 等于
<= :大于 或者 等于
所有的比较运算符返回结果:
    1.True  真
    2.False  假

逻辑运算符

and:和,并且
or: 或,或者
not:非,取反
​
and:必须全部条件成立,才成立
or:只要有一个条件成立,就成立
not:成立代表不成立,不成立代表成立
​
批量编辑:shift + alt + 鼠标选中
ctrl + r

循环语句

if判断结构

if判断结构
    1.单分支结构
        只有if
        有if .... else的
    2.多分支结构
格式:
    1.1只有if
        if 条件:
            条件成立执行的语句
    1.2 有 if ... else
        if 条件:
            条件成立执行的语句
        else:
            条件不成立执行的语句
    2.多分支
        if 条件1:
            条件1成立时执行的语句
        elif 条件2:
            条件2成立时执行的语句
        ...
        else....

while循环

1.顺序结构:从上到下,从左到右依次检验,执行1次
2.分支结构:从上到下,遇到条件成立,就进去,执行1次
3.循环结构:执行n次
​
    while循环:一眼望过去,猜不到结果,你不知道要循环多少次
        折纸:一张无穷大的纸,对折几次,可以比珠穆朗玛峰高
    for循环:你知道要循环多少次
        从100个数里面,找到所有的偶数
while循环结构
    变量1
    while 条件2:
        循环体3
        控制条件4
死循环一定要注意,很容易造成服务器内存溢出
断点:当程序执行到断点位置时,听程序员的号令
F7:一行一行执行,你系统底层是怎么执行的,就怎么执行
F8:进入到方法体中(自定义方法),暂时可以理解为和F7效果一毛一样
F9:从一个断点直接到下一个断点

break和continue

break:直接退出当前循环
continue:结束当前循环,继续下次循环
如果循环有嵌套:外层循环执行1,内存循环执行n次

for循环

for循环
    结构:
    序列:可以理解为 容器
        容器:
            字符串,列表(list),元组(tuple),集合(set),字典(dict)
        for 变量名 in 序列:
            循环体
python for循环有没有死循环
    没有死循环
java for循环有
range(起始值,结束值,步长)
    起始值:从几开始
    结束值:到几结束 (不包含结束值)
    步长:从开始值 + 步长是下一个值
    注意:如果步长不写,默认是1,如果起始值不写,默认从0开始

for...else 结构

    for i in 容器:
        循环体
    else:
        循环正常结束后执行的内容
注意:
    如果你的循环是非正常结束(break结束的是非正常结束),那么不会打印else的内容,只有正常结束的会打印else

字符串的定义

    格式:
        1.单引号包裹:'内容'
        2.双引号包裹: "内容"
        3.三引号包裹:三引号  内容  三引号   特点:可以原样输出你写的内容
​
\ :代表转移符号,告诉解释器,你转义后的内容要直接输出
​
外单内双,内双外单

字符串切片:

   字符串的整数索引是从0开始,倒数索引是从-1开始
    字符串
    整数:      0   1   2   3   4   5
    字符串     a   b   c   d   e   f
    倒数:     -6  -5  -4  -3  -2 -1
切片的格式:
    字符串变量名[开始索引:结束索引:步长]
               [::负值]  -------->负几就是删除最后几位
                    例如:str1=[1,2,3,4]
                         str1=str1[:-1]
                         print(str1)
​
      1. 开始索引默认从0开始,结束索引默认是到索引的最后一个值,步长,默认是1
         束索引是不包含的,开始索引是包含的

字符串的函数

字符串可以理解为是一个常量,值不能修改,只能重新赋值
内置函数:系统已经帮你定义好的,可以直接重复使用的一段代码块
函数调用:
    变量名.函数名称(参数 ...)
        注意:有的函数是有返回值的,变量名 =  变量名.函数名称(参数 ...)
    查找函数:
        find() --- 查找,有没有返回内容,有返回内容的,
            find("子串"):查找子串,返回第一个遇到的子串的第一个字母的索引
                如果没有找到子串,返回 -1
        index() --- 索引,有没有返回内容,有返回内容
            index("子串"):查找子串,返回第一个遇到的子串的第一个字母的索引
                如果没有找到,直接报错
    其他函数:
        replace() --- 替换
            str1.repalce(你要替换谁,你要替换成什么)
        split() --- 将字符串按照指定内容进行切割,得到的是一个 list
            list1 = str1.split(要按照什么内容切割)
        join() --- 将字符串按照指定内容进行拼接
            str1.join(要拼接的内容)"""

容器

能存储多个元素的python数据类型
list-->列表
set-->集合
dict-->字典
tuple-->元组

字符串

str 引号,不可变

list列表

注意:在java中使用中括号包裹的,称之为  数组 array
​
•    定义格式:
•    list1 = [值1,值2,.....]
•    list2 = []
•    list3 = list()
list特点:
•    1.可以存储任一类型的数据,建议同一类型
•    2.数据可以重复
•    3.有序 ---> 不是内容有序,而是 存取有序(第一个存的,第一个取)
•    4.list中的值可以修改
list获取值
•    1.有索引,索引从0开始
•        list变量名[索引]

list增加数据

    append():向列表中追加内容,追加到末尾,如果追加列表,是将整个列表看成一个内容追加到末尾,它可以追加任意数据
    extend():向列表中追加内容,追加到末尾,如果追加列表,会将列表中的内容,按顺序追加到原列表的末尾,它只能追加可迭代(变量)的内容
    insert():向列表的指定索引的前面插入数据,如果追加列表,是将整个列表看成一个内容追加到末尾
list删除
del:删除指定索引的内容 del 列表名[索引] 或者是 删除 列表 del 列表名
pop():
    删除的内容变量名 = list变量.pop(索引)--- 移除指定索引内容,并返回删除的内容
    删除最后一个元素 = list变量.pop() -- 将列表的最后一个内容移除,并返回移除的内容
remove(元素1):将列表中的遇到的第一个元素1 删除,没有返回值
​
如果要删除的元素不存在,则报错
list查询
list的查询方法
    index(内容):查看内容在列表的索引
        如果不存在,就报错,如果存在就返回对应元素在列表的索引值(索引从0开始)
    count(内容):查看内容在列表的数量
        如果存在,返回个数,如果不存在,返回0
        如果没有返回-1
    in:查看内容是否在列表中,如果有返回TRUE
    not in:查看内容是否不在列表中
list修改
list的修改操作
    列表名称[索引] = 新值
    reverse():将元素内容反转输出
    sort():排序,默认是从小到大,sort(reverse = TUre),排序从大到小
list列表的循环遍历
循环遍历
    遍历/迭代:一个一个的拿出来
while和for循环
二维列表
​# 示例 1:创建二维列表(类似表格或矩阵)
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 访问元素(行索引 → 列索引)
print(matrix[0][1])  # 输出:2(第0行第1列)
print(matrix[2][2])  # 输出:9(第2行第2列)

# 示例 2:动态创建二维列表(列表推导式)
chessboard = [[(i+j) % 2 for i in range(8)] for j in range(8)]
# 生成国际象棋棋盘(0=黑格,1=白格)

# 示例 3:学生成绩表(混合数据类型)
students = [
    ["姓名", "数学", "语文", "英语"],
    ["张三", 90, 85, 92],
    ["李四", 78, 88, 95],
    ["王五", 85, 90, 87]
]

# 遍历二维列表
print("\n学生成绩表:")
for row in students:
    for item in row:
        print(f"{str(item):<6}", end="")  # 对齐输出
    print()

# 修改元素
matrix[1][2] = 66  # 将第二行第三列改为66

# 添加新行
matrix.append([10, 11, 12])

# 输出结果
print("\n修改后的矩阵:")
for row in matrix:
    print(row)
"""

tuple元组

    1.tuple = (1,2,3,4,5)
    2.tuple = tuple()
    3.tuple = ()
    4.tuple = (1,)
元组的特点
    1.不可以修改元组的元素值
    2.有索引,索引从0开始
    3.可以存储任一类型数据,建议同一类型
    4.有序,存取有序
    5.可以存储重复元素
内置函数
    index():
        查看指定元素在元组中出现第一次的时候的,第一个字符的索引,如果不存在,就会报错
    count():
        查看指定元素在元组中有几个,如果不存在,返回0
    len():返回元组的个数
        in:查看内容是否在列表中,如果有返回TRUE
    not in:查看内容是否不在列表中
    删除:del tuple名

dict字典

    字典的定义:
        1.dict1 = {}
        2.dict2 = dict()
        3.dict3 = {"键1":"值1","键2":"值2","键3":"值3",.....}
字典特点:
    1.键值对形式存在,键是唯一的,值不唯一
    2.元素值可以进行修改
    3.无索引
    4.有序
字典的
    增/改
        字典名[key] = 值;
            注意:如果键存在,那么就是修改值操作,如果不存在,就是新增
    删
        del 字典名[key] 
        del 字典名  删除字典
        clear() 清空字典
    查
        keys():获取所有的键,返回值是一个理解是一个列表
            键获取到后,是不是可以根据键获取值  print(字典名[key])
        vaules():获取所有的值,返回值是一个理解是一个列表
        items():获取所有的键值对,ps:键值对是一个整体,返回值是一个元组类型
        字典名[]        根据键获取值
        字典名.get(键)  根据键获取值
dict嵌套list表
dict1 = {'人工智能':['张三','李四','王五'],
         '大数据':['喜羊羊','美羊羊','村长'],
         'Java':['熊大','熊二','光头强']}

set集合

    定义格式:
        1.set2 = {1,2,3,4}
        2.set3 = set()
        set1 = {}  ---> 它是字典类型
特点:
    1.没有重复值,会进行自动去重
    2.无序,存取无序(注意打印或者是遍历都可以实现无序效果)
    注意:java中set无序的,存取无序,但是第一次后,就固定了, 也就是每次取都是一样的
    3.内容可以修改
    4.没有索引,只能通过for循环进行元素获取
    5.可以存储不同类型
方法:
    增
        add():效果等同于 append函数
    删
        del:可以删除整个集合
        remove(元素):删除指定元素,如果没有,报错
    查
        in:查看元素是否在集合中,如果在,返回True,如果不在返回False
        not in:查看元素是否在集合中,如果在,返回False,如果不在返回True

容器类型转换

1、转换类型函数
    int()
    float()
    str()
    bppl()
    eval()  去掉引号,查看类型
2、容器类型转换函数
    list(内容) 将内容转换成列表                                   (可变类型)
    set(内容) 将内容转换成集合 # 无序,去重,需求,对列表元素进行去重操作,并最终形成一个列表(可变类型)
    dict(内容) 将内容转换成字典                                   (可变类型)
    
    tuple(内容) 将内容转换成元组 ---特殊(不能修改,转换为就为死数据)
    1、将集合转换成列表
    list()
    2、将字典转换成列表
    如果是将字典转换成列表,那么列表中存储的是字典的键
    
    3、将列表元素内容进行去重,并返回列表
    
    4、将集合转换成字典,无意义
    
    5、将列转换成元组类型

推导式

格式:
        变量名 = [表达式 for 变量 in 列表]
        变量名 = [表达式 for 变量 in 列表 if 条件]
        变量名 = [表达式 for 变量 in 列表 for 变量 in 列表]
    列表的推导式
        列表名称 = [变量名 for 变量名 in 容器 [if 条件判断]]
        list = [i for i  in range (1,10) if i % 2 == 0]
    集合的推导式
        集合名称 = [变量名 for 变量名 in 容器 [if 条件判断]]
        set = {d for d  in range (1,10) if d % 2 == 0}
    字典的推导式
        字典名称 = [k:V for k:V in 字典名.items() [if 条件判断]]
        dict2 = {k:v for k:v in dict1.items()}
        用一个字典推导另外一个字典有啥用?
         加if
    元祖推导式
        tuple = (d for d in range(1,10))
        最终是输出一个生成器
目的:简化开发,简化代码编写

函数

在文件中,只要出现两次一摸一样的代码,那就代表你写的代码有问题
定义:
    (所谓的函数就是一个被命名的、独立的、完成特定功能的代码段)
     提前定义好的,可以重复使用的一段代码块,可以称之为函数
格式:
    def 函数名称([参数1, 参数2, ...]):
        函数体
        ...
        [return 返回值]
函数调用:
    函数名(参数列表)
函数定义:
    1、有参数,无返回值
    2、有参数,有返回值
    3、无参数,无返回值
    4、有参数,有返回值  --- 几乎没用
注意:
    1、函数名建议是见名知意,小驼峰/蛇皮走位
    2、函数是先定义,后调用
    3、函数在调用时,如果函数定义时带几个参数,调用函数时,必须传递几个参数
        形参:就是形式参数,不调用函数,没有固定的值
        实参:实际调用函数时,传递的值(已经赋值的变量名)
    4、函数遇到return代表函数结束
函数解释说明文档
    直接在函数体中使用三引号即可
    
如果只是为了看一下谁大谁小,不需要返回值
如果你需要拿到最大值,并展示最大值的**2 需要返回值
​
参数?
看想要死值还是  变值(需要传参)
什么时候需要参数?
每次要的结果都不一样时,需要传参
什么时候需要返回值?
后续代码会用到函数的返回值
​
函数的说明文档
    在函数体的第一行,添加三引号+enter

函数嵌套

函数嵌套:一个函数调用了另外一个函数
函数里面还有函数:

main函数先进栈后出栈(项目在运行中遇到阻塞,回去寻找下一个函数)

pycharm运行后按 f7 :走程序走的路

变量的作用域:

​作用域:也就是变量在哪可以用,在哪不能用(看变量是否顶头写,只要顶头写,就是全局的,不顶头就是局部的(ps.不加global关键字的前提下))
    全局变量:在.py文件中顶格定义的变量;随处可以用
    局部变量:在函数内部定义的变量;随处用不了
    global关键字的用法
    * 实现在局部位置对全局变量做修改.

函数的参数进阶

位置参数,关键字参数,默认参数(缺省参数),不定长参数
    位置参数:你的实参会按照顺序一次去给形参赋值,位置参数主要针对的是实参(你传递的值)
        实参:实际参数,你的各种值
        形参:形式参数,你写的各种变量名,没有实际的值,必须等调用方法时传递
    关键字参数:传参时,直接使用    制定形参名称 = 值 这种方式来传递参数  
    默认参数(缺省参数):可以在形参上进行赋值,如果调用函数是传递了参数,那么是按照传的打印参数,如果没有传实参,按照默认来赋值
    不给定参数:可以传递任意数量的实参
        *args:会将所有的实参封装到元祖中
        **kwargs(key word args):传递关键字参数,会将所有的实参,封装成字典
注意:
    1、如果位置参数和关键字参数混在一起使用,那么位置参数必须在关键字参数之前使用
    2、默认参数(缺省参数)必须放在最后
    3、不定长参数和默认值参数如果同时存在,那么不定长参数必须放后面(**kwargs参数建议放在参数的最后)
    4、如果有默认值参数和不定长参数(*args)在一起,那么建议将默认值参数放在不定长参数后设置值

可变与不可变数据类型

常见类型
    int,float,bool,str,list,tuple,set,dict
    数值分类:
        1、单数值:int,float,bool,str
        2、多数值:list,set,tuple,dict
    可变不可变:
        1、可变:list,set,dict
        2、不可变:tuple,int,float,bool,str
可变类型
不可变类型
引用传递和值传递
    list1是引用传递,a是值传递
    引用传递的值可以发生变化
    值传递的值是不会发生变化
​
查看地址值方式:
    id(变量名/值)

元组拆包

拆包:将容器中的元素,拆开多个变量
装包:将多个值,存放到容器中
​
拆包应用:变量值交换,例子 a,b = b,a 
变量值交换

lambda函数

普通函数与匿名函数

lambda表达式
    应用场景:可以使用lambda表达式来进行简化代码
        1、如果你的函数只有一行函数体
        2、如果你的函数只有一个返回值
    格式:
        变量 = lambda 函数参数:表达式(函数代码 + return返回值)
        lambda 形参:函数体
        
# 调用变量
变量()
    注意事项:
        
    实际应用:
        1、lambda可以直接用一个变量来接收,此时lambda是一个值,作为函数的实参来用
        2、作为函数的实参来用
        3、lambda表达式可以作为一个匿名函数来使用
    注意事项:
        1、lambda会自动将内容返回
        2、它会生成一个匿名函数

文件

作用:用来存储数据
分类:txt,MP4,MP3,.py,.java,.json....
open函数:会有一个返回值,返回值代表  文件本身(对象)
    格式:文件对象名 = open(name.mode)
        name: 路径/文件名
        mode: 文件的操作模式
            r:只读,如果文件不存在,就报错
            w:只写(覆盖写入),如果文件不存在,就创建
            a:追加写入,如果文件不存在,就创建
    如果文件存在,那就是打开文件,如果文件不存在,那就是新建文件(只针对于写操作),读操作如果没有文件,那就是报错
写到中文a.txt
中文编码问题解决
    乱码是因为:编码解码不一致
    编码:
        GBK:中文,一个中文汉字解析成2个字节
        UTF-8:万国码,主要是为了输入中文,不会乱码 一个中文汉字解析成3个字节
    你好-->先转换成二进制-->存入电脑--> 编码
    从电脑底层读取-->先将二进制--> 解码

文件写操作

write
注意:
    1、如果是字节形式导入,那么不能写字符
    2、无返回值

文件读操作

1、read():读操作
    read():读取所有
    read(字符/字节数量):指定数量读取
2、readline()一次读取一行内容
    一次读取一行内容,每行的最后都会有一个\n
3、randlines()一次读取所有行,最终封装到一个列表中
一字节方式读写文件
    模式选择:
        rb:以二进制的方式进行读取
        wb:以二进制格式打开一个文件只用于写入

close函数

关闭资源:变量名.close() #释放资源

os模块

1、rename():对文件进行重命名
2、remove():删除文件
3、mkdir():创建文件夹
4、chdir():改变当前的工作路径 #change
5、rmdir():删除空文件夹
    注意:不能删除非空文件夹
6、listdir():查看文件夹下的内容
    注意:只看当前路径下的所有内容,不包含子目录内容,孙子目录更不行
7.getcwd():或者当前的工作目录  #current workd irectory

with open语法

格式:
    with open(文件名,mode,编码集) as 别名,open(文件名,mode,编码集) as 别名2:
    代码体
为什么with open语法不需要手动close
    上下文管理器
        __enter__:当你进入到代码体中的时候,会自动调用__enter()__
        __exit__:当你离开with语法的时候,会自动调用__exit()__

python异常

异常:代码运行期间,出现了非正常结果
python:error
java:
    error
    exception:编译能过,但运行出错(.java->.class,编译失败,报错)
异常出现后:
    1、不管它,调代码
    2、捕获异常
异常的格式:
try:
    正常的代码
except:
    上述代码出现异常后,执行的内容
else:
    如果代码正常执行,后会执行的内容
finally: #文件复制 f.close()
    不管“正常代码”会不会出现异常(问题),都会执行
注意:
    1、try不能单独出现,必须结合except使用
    2、一旦出现异常,try中异常,后续的代码不会执行
1、try.....except...
2、try.....except...else
3、try.....except...else...finally
4、try.....except Exception as 变量名...else...finally
​
​
异常格式:
    try:
        正常业务代码
    except Exception as 变量名:
        出现异常时,执行的代码
    else:
        没有出现异常时,执行的代码
    finally:
        无论是否有异常都会执行的代码

Python内置模块

模块:
    1、只要是以.py结尾的都是模块
模块分类
     1、内置模块
     2、自定义模块
模块的导入方式:
    1、import 模块名
    2、import 模块名 as 别名
    3、import 模块名1,模块名2,....
        注意:
            1、如果你是导入的模块,那么想调用模块内的功能(函数),只能通过 模块名.功能名(参数...)
            2、你导入了模块之后,可以使用该模块下的所有功能
    4、from 模块名 import 功能名
    5、from 模块名 import 功能名 as别名
    6、from 模块名 import *
    from 模块名 import 功能名1,功能名2,.....
    注意:
        1、如果是只导入了某个功能,那么其他功能是不能使用的,必须导入才能使用
        2、调用时,可以直接写功能名(参数1,参数2,...)
--thread time 线程的时间

自定义模块导入

自定义模块:我们自己创建的.py文件
​
注意:
    如果你导入了模块,模块中打印了__name__,你在导入的位置去执行,那么__name__打印的是模块名,如果你是在模块内部打印,那么__name__打印的是main这个函数
切记:
    模块名称(python文件名)不要是中文,特殊字符,数字开头
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值