第一章、01-初识python

第一章、02-什么是编程语言

第一章、03-Python环境安装(Windows)

第一章、04-Python环境安装(Mac)

第一章、05-Python环境安装(Linux)

安装依赖

命令:

yum install wget zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make zlib zlib-devel libffi-devel -y

下载

注:在linux操作系统,是需要源码编译的,这里下载源码选第一个,右键,复制下载地址。

命令:

wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
wget https://www.python.org/ftp/python/3.12.11/Python-3.12.11.tgz

解压python软件包

查看软件包

命令:

ls -l

解压软件包

tar -xvf Python-3.10.4.tgz

安装

进入python目录并查看目录

ls -l
cd Python-3.12.11/

配置python编译参数

#配置编译后完成后的安装路径
./configure  --prefix=/usr/local/python3.12.11

编译安装

make && make install

查看编译安装结果

cd /usr/local/python3.12.11/
ls -l

进入bin目录(该目录下都是可执行文件)

cd bin/
ls -l

在linux上默认安装有python

/usr/bin/python

注意:但是不是我们想要的版本,所以,我们要顶替linux默认安装的老版本python。

输入"exit()"退出python命令行。

exit()

删除系统自带的老版本(python2)的软链接

rm -f /usr/bin/python

创建软链接(方便使用)

ln -s /usr/local/python3.12.11/bin/python3.12 /usr/bin/python

在终端任意位置输入python测试是否为新版本python

修改yum相关依赖(在linux操作系统中,yum这个程序本质上使用的是python老版本的依赖,我们刚才顶替了python的老版本,导致yum不能正常运行)

# 1. 删除现在的裸软链,不是python3
[root@localhost bin]# rm -f /usr/bin/python
# 2. 注册到 alternatives(最后的 50 是优先级)
[root@localhost bin]# alternatives --install /usr/bin/python python /usr/local/python3.12.11/bin/python3.12 50
# 3.(推荐)固定为手动模式,防止以后装包自动切走
[root@localhost bin]# alternatives --set python /usr/local/python3.12.11/bin/python3.12

验证是否正常

[root@localhost bin]# alternatives --display python
[root@localhost bin]# ls -l /usr/bin/python
[root@localhost bin]#  python --version



预期结果:
python - status is manual.
 link currently points to /usr/local/python3.12.11/bin/python3.12
/usr/local/python3.12.11/bin/python3.12 - priority 50
Current `best' version is /usr/local/python3.12.11/bin/python3.12.

# ← 不再是裸链,由 alternatives 接管
lrwxrwxrwx. 1 root root 24 Jun  3 14:51 /usr/bin/python -> /etc/alternatives/python

Python 3.12.11

  ---
  说明

  - 改完后链路变成:/usr/bin/python → /etc/alternatives/python → /usr/local/python3.12.11/bin/python3.12,这才是 RHEL 系发行版管理多版本命令的标准方式。
  - 第 3 步为什么推荐:如果将来你 dnf install python-unversioned-command,那个包也会通过 alternatives 注册 /usr/bin/python(指向 3.9)。用 --set 锁成手动模式后,alternatives 不会自动切换,你的 3.12 优先级稳固。
  - 完全不影响 yum/dnf:它们走 /usr/bin/python3(→3.9),跟 /usr/bin/python 没关系。

注意:

这段命令不用执行!

第一章、06-第一个Python程序

第一章、07-Python解释器

第一章、08-PyCharm开发工具的安装

   

第一章、09-PyCharm的基础使用

第二章、01-字面量

第二章、02-注释

第二章、03-变量

第二章、04-数据类型

第二章、05-数据类型转换

第二章、06-标识符

第二章、07-运算符

第二章、07-字符串的三种定义方式

  

第二章、08-字符串的拼接

正确写法:

name = '黑马程序员'
address = '厦门'
tel = 4242
print("我是:" + name + ",我的电话是:" + str(tel))

第二章、09-字符串格式化

第二章、10-字符串格式化的精度控制

第二章、11-字符串格式化的方式2

重点: 

        这种快速格式化方式不限制类型,同时也不做精度控制

第二章、12-对表达式进行格式化

第二章、13-数据输入(input语句)

第三章、01-布尔类型和比较运算符

      

第三章、02-if语句的基本格式

第三章、03-if else组合判断语句

第三章、04-if_elif_else组合使用的语法 

第三章、05-判断语句的嵌套

第四章、01-while循环的基础应用

第四章、02-while循环的嵌套应用

第四章、03-for循环的基础语法 

第四章、04-range语法 (*)

第四章、05-for循环临时变量作用域 

第四章、06-for循环的嵌套使用

第四章、07-continue和break

注意:这里,continue只会影响到内部for循环的语句3,对外部循环的语句4没有影响。

第五章、01-函数的初体验

第五章、02-函数的基础定义语法

 

第五章、03-函数的传入参数

第五章、04-函数的返回值定义语法

第五章、05-函数返回值之None类型(*)

无返回值

主动返回None

None用于if判断

None用于声明无初始内容的变量

第五章、06-函数的说明文档

显示效果

第五章、07 -函数的嵌套使用

第五章、08 -变量在函数中的作用域

解释:

        在test_b()方法内的num,是函数内的局部变量,跟外部的num没有关系,所以最终输出外部num还是200.

现在有个需求,就是要修改掉testb内部的num,可以通过global关键字:

第六章、01 -数据容器入门

第六章、02 -列表的定义语法

重点: 列表可以同时存储不同类型元素

第六章、03 -列表的下标索引(*)

取法:list[1][0]

 第六章、04 -列表的常用操作方法(*)

区别:

        1)del 仅仅可以删除元素;

        2)pop不仅可以删除元素,还可以返回被删除的元素;

第六章、05 -列表的循环遍历

第六章、06 -元祖的定义和操作(*)

注意: 定义单个元素的元祖,需要在括号内单个元素后面加个逗号,否则就不是元祖了,类型是是str

由于元祖的不可修改特性,所以元祖的操作是比较少的!

元祖不支持修改元祖的内容,但是可以修改元祖内list的内容

第六章、07 -字符串的定义和操作(*)

第六章、08 -数据容器(序列)的切片(*)

注意:对序列的操作,不会影响序列本身,而是会得到一个新的序列(列表、元祖、字符串等)

 注意:这种写法,-1代表从后向前取,等同于将序列反转了。

第六章、09 -集合的定义和操作(*)

第六章、10 -字典的定义(*)

第六章、11 -字典的常用操作(*)

第六章、12 -类数据容器的总结对比

第六章、13 -数据容器的通用操作(*)

正向排序(reverse默认=False)

反向排序(reverse=True)

第六章、14 -字符串大小比较的方式

第七章、01 -函数的多返回值(*)

第七章、02 -函数的多种参数使用形式(*)

重点:

        如果入参要设置默认值,需要放到定义参数的最后面!

第七章、03 -函数作为参数传递

看一下这两块代码区别:

def test_func(compute):
    result = compute(1,2)
    print(result)

def compute(x,y):
    return x+y

test_func(compute)


#   另一个代码

def test_func():
    result = compute(1,2)
    print(result)

def compute(x,y):
    return x+y

test_func()
主要区别

  ┌──────────────────────┬──────────────────────────┬──────────────────────┐
  │                      │          第一块          │        第二块        │
  ├──────────────────────┼──────────────────────────┼──────────────────────┤
  │ test_func 是否有参数 │ 有形参 compute           │ 无参数               │
  ├──────────────────────┼──────────────────────────┼──────────────────────┤
  │ compute 从哪来       │ 调用方传进来(依赖注入) │ 直接用全局的 compute │
  ├──────────────────────┼──────────────────────────┼──────────────────────┤
  │ 调用方式             │ test_func(compute)       │ test_func()          │
  ├──────────────────────┼──────────────────────────┼──────────────────────┤
  │ 运行结果             │ 3 ✅                     │ 3 ✅                 │
  └──────────────────────┴──────────────────────────┴──────────────────────┘

  关键点

  1. 两块现在都能跑,结果一样都是 3。
  2. 设计思想不同(这是真正的区别):
    - 第一块:把 compute 当参数传进去。test_func 用哪个函数计算由外部决定 —— 更灵活,可以随时换成别的函数,也更好做单元测试。
  test_func(lambda a,b: a*b)   # 比如想换成乘法,直接传别的函数即可,输出 2                                                                                                                                                                                                                                        
    - 第二块:test_func 写死去找全局的 compute,外部无法替换 —— 耦合更紧,但写起来简单。
  3. 第二块依赖「全局作用域里恰好有一个叫 compute 的函数」。如果哪天全局的 compute 改名或删掉,test_func 就会 NameError;而第一块不依赖全局名字,更稳健。

  一句话总结:功能结果相同,区别在于「函数从参数传入(解耦、灵活)」 vs 「直接用全局函数(简单、耦合紧)」。

第七章、04 -lambda匿名函数(*)

注意: lambda定义的匿名函数,函数体只能写一行。

第八章、01 -文件编码概念

第八章、02 -文件的读取操作

注意: 在同一个程序中,多次读取同一个文件,下一次读取文件起始,是接上一次读取文件结尾!

第八章、03 -文件的写出操作

注意:close()方法内置了flush()方法,在关闭文件前,将内存中积攒的内容,写入到硬盘的文件中。所以,代码还可以改成下面代码:

第八章、04 -文件的追加写入操作

第九章、01 -了解异常

第九章、02 -异常的捕获(*)

第九章、03 -异常的传递性

第九章、04 -模块的概念和导入

第九章、05 -自定义模块并导入

注意:这里只是引用了my_module1模块,但是my_module1中有测试代码,所以测试代码就直接执行了。

我们可以通过给my_module1设置main入口,意思是只有在my_modele1文件中执行run,才会触发my_module1文件的main入口。

这样,我们在外部导入my_module1模块时,就不会运行my_module1模块中的test函数。

注意:不是这个_all_,导入的是所有的,写了_all_导入的就是指定的。

不写__all__

写上__all__

发现test_b()就用不了了。

第九章、06 -自定义Python包

有__init__.py就是python包,没有就是普通文件夹!

因为__all__,只写了'my_module1'!

第九章、07 -安装第三方包

但是发现网络比较慢,可以使用国内镜像源

命令:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

如果网络比较慢:

第九章、08 -异常-模块-包-综合案例讲解

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐