欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python基础入门教程(基于Python3.8)

程序员文章站 2022-03-03 20:06:25
Python的安装Python官网:https://www.python.org/Python学习网站整理Python官方文档:https://docs.python.org/zh-cn/3/菜鸟教程:https://www.runoob.com/python3/python3-tutorial.html刘江的博客:https://www.liujiangblog.com/course/python/Python123:https://www.python123.io/廖雪峰的官方网站:htt...

Python的安装

Python官网:https://www.python.org/

Python学习网站整理

Python官方文档:https://docs.python.org/zh-cn/3/

菜鸟教程:https://www.runoob.com/python3/python3-tutorial.html

刘江的博客:https://www.liujiangblog.com/course/python/

Python123:https://www.python123.io/

廖雪峰的官方网站:https://www.liaoxuefeng.com/wiki/1016959663602400

pip的使用

1、查看pip的版本

pip -V 

2、升级pip

python -m pip install -U pip 

3、安装Python模块

pip install some-package 

4、安装指定版本的Python模块

pip install some-package==版本号 

5、卸载已安装的Python模块

pip uninstall some-package 

6、列出已经安装的Python模块

pip list 

7、将已经安装的库列表保存到文本文件中

pip freeze > requirements.txt 

8、根据依赖文件批量安装库

pip install -r requirements.txt 

9、使用wheel文件安装

pip install 路径+模块.whl 

python模块仓库:https://www.lfd.uci.edu/~gohlke/pythonlibs/

10、使用清华大学镜像源安装

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

清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

Python之禅

Beautiful is better than ugly. (优美比丑陋好)
Explicit is better than implicit.(清晰比晦涩好)
Simple is better than complex.(简单比复杂好)
Complex is better than complicated.(复杂比错综复杂好)
Flat is better than nested.(扁平比嵌套好)
Sparse is better than dense.(稀疏比密集好)
Readability counts.(可读性很重要)
Special cases aren’t special enough to break the rules.(特殊情况也不应该违反这些规则)
Although practicality beats purity.(但现实往往并不那么完美)
Errors should never pass silently.(异常不应该被静默处理)
Unless explicitly silenced.(除非你希望如此)
In the face of ambiguity, refuse the temptation to guess.(遇到模棱两可的地方,不要胡乱猜测)
There should be one-- and preferably only one --obvious way to do it.(肯定有一种通常也是唯一一种最佳的解决方案)
Although that way may not be obvious at first unless you’re Dutch.(虽然这种方案并不是显而易见的,因为你不是那个荷兰人这里指的是Python之父Guido)
Now is better than never.(现在开始做比不做好)
Although never is often better than right now.(不做比盲目去做好极限编程中的YAGNI原则)
If the implementation is hard to explain, it’s a bad idea.(如果一个实现方案难于理解,它就不是一个好的方案)
If the implementation is easy to explain, it may be a good idea.(如果一个实现方案易于理解,它很有可能是一个好的方案)
Namespaces are one honking great idea – let’s do more of those!(命名空间非常有用,我们应当多加利用)

缩进

一个逻辑行开头处的空白 (空格符和制表符) 被用来计算该行的缩进等级,以决定语句段落的组织结构。

在一个源文件中不要混合使用制表符和空格符。

具体实现

在读取文件的第一行之前,先向堆栈推入一个零值;它将不再被弹出。被推入栈的层级数值从底至顶持续增加。每个逻辑行开头的行缩进层级将与栈顶行比较。如果相同,则不做处理。如果新行层级较高,则会被推入栈顶,并生成一个 INDENT 形符。如果新行层级较低,则 应当 是栈中的层级数值之一;栈中高于该层级的所有数值都将被弹出,每弹出一级数值生成一个 DEDENT 形符。在文件末尾,栈中剩余的每个大于零的数值生成一个 DEDENT 形符。

编码声明

如果一条注释位于 Python 脚本的第一或第二行,并且匹配正则表达式 coding[=:]\s*([-\w.]+),这条注释会被作为编码声明来处理;上述表达式的第一组指定了源码文件的编码。编码声明必须独占一行。如果它是在第二行,则第一行也必须是注释。推荐的编码形式如下:

# -*- coding: <encoding-name> -*- 
# -*- coding:utf-8 -*- 

Python命名规范(标识符)

  • 由数字、大写字母、小写字母和下划线组成,不能以数字开头。
  • 标识符没有长度限制,但对大小写敏感。
  • 不能和关键字重复。

推荐命名规范

模块:模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)。

类名:类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头。

函数名:函数名一律小写,如有多个单词,用下划线隔开。

变量名:变量名尽量小写, 如有多个单词,用下划线隔开。

常量名:常量使用以下划线分隔的大写命名。

参考:《Python3中的命名规范大全—基于PEP8标准》:https://blog.csdn.net/weixin_39723544/article/details/82144280

Python关键字(保留字)

import keyword
keyword.kwlist 

[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]

序号 保留字 说明
1 False 布尔类型,表示假
2 None 空对象
3 True 布尔类型,表示真
4 and 逻辑与操作
5 as 用于类型转换(导入库时起别名)
6 assert 断言,用来测试表达式
7 async
8 await
9 break 中断循环
10 class 用于定义类
11 continue 跳出本次循环
12 def 定义方法(函数)
13 del 删除变量
14 elif 条件语句
15 else 条件语句
16 except 包含捕获异常后的操作代码块
17 finally 用于异常处理之后一定需要执行的部分
18 for 循环遍历可以遍历的任何序列
19 from 用来导入相应模块
20 global 用于声明全局变量
21 if 条件语句
22 import 用来导入相应模块
23 in 查看是否包含
24 is 判断是否为同一对象
25 lambda 定义一个匿名函数
26 nonlocal 用于在函数外或其他地方使用非全局变量
27 not 逻辑非操作
28 or 逻辑或操作
29 pass 空语句,用于占位
30 raise 触发异常
31 return 跳出循环并返回结果
32 try 包含会触发异常的语句
33 while 在某条件下循环执行语句
34 with 使用with后不管with代码中出现什么错误都会对当前对象进行清理
35 yield 类似于return,返回一个生成器

转义字符

字节串字面值总是带有前缀 'b''B';它们生成 bytes 类型而非 str 类型的实例。它们只能包含 ASCII 字符;字节对应数值在128及以上必须以转义形式来表示。

字符串和字节串字面值都可以带有前缀 'r''R';这种字符串被称为 原始字符串 其中的反斜杠会被当作其本身的字面字符来处理。

包含 'f''F' 前缀的字符串字面值称为 格式化字符串字面值'f' 可与 'r' 连用,但不能与 'b''u' 连用,因此存在原始格式化字符串,但不存在格式化字节串字面值。

除非带有 'r''R' 前缀,字符串和字节串字面值中的转义序列会基于类似标准 C 中的转义规则来解读。可用的转义序列如下:

转义序列 含义 注释
\newline 反斜杠加换行全被忽略
\\ 反斜杠 (\)
\' 单引号 (')
\" 双引号 (")
\a ASCII 响铃 (BEL)
\b ASCII 退格 (BS)
\f ASCII 进纸 (FF)
\n ASCII 换行 (LF)
\r ASCII 回车 (CR)
\t ASCII 水平制表 (TAB)
\v ASCII 垂直制表 (VT)
\ooo 八进制数 ooo 码位的字符
\xhh 十六进制数 hh 码位的字符

仅在字符串字面值中可用的转义序列如下:

转义序列 含义 注释
\N{name} Unicode 数据库中名称为 name 的字符
\uxxxx 16位十六进制数 xxxx 码位的字符
\Uxxxxxxxx 32位16进制数 xxxxxxxx 码位的字符

Python注释

注释在语法分心中会被忽略,Python中可以使用以下的方式进行注释

# 这是一个注释 '''
使用三个单引号的多行注释
''' """
使用三个双引号的多行注释
""" 

Python运算符

序号 运算符 说明
1 +
2 -
3 *
4 ** 乘方
5 /
6 // 整除
7 % 取余
8 @ 矩阵乘法
9 << 左移
10 >> 右移
11 & 按位与
12 | 按位或
13 ^ 按位与或
14 ~ 按位取反
15 := 海象运算符,可在表达式内部为变量赋值
16 < 小于
17 > 大于
18 <= 小于等于
19 >= 大于等于
20 == 等于
21 != 不等于

成员检测运算符

序号 运算符 说明
22 in 检测x 是否为 s 的成员
23 not in 检测x 是否不为 s 的成员

标识符比较运算符

序号 运算符 说明
24 is 检测对象的标识号是否相同:x 和 y 是同一对象
25 is not 检测对象的标识号是否不同

运算符优先级

Python 按从左至右的顺序对表达式求值。但注意在对赋值操作求值时,右侧会先于左侧被求值。

运算符 描述
:= 赋值表达式
lambda lambda 表达式
ifelse 条件表达式
or 布尔逻辑或 OR
and 布尔逻辑与 AND
not x 布尔逻辑非 NOT
in, not in, is, is not, <, <=, >, >=, !=, == 比较运算,包括成员检测和标识号检测
| 按位或 OR
^ 按位异或 XOR
& 按位与 AND
<<, >> 移位
+, - 加和减
*, @, /, //, % 乘,矩阵乘,除,整除,取余 5
+x, -x, ~x 正,负,按位非 NOT
** 乘方 6
await x await 表达式
x[index], x[index:index], x(arguments...), x.attribute 抽取,切片,调用,属性引用
(expressions...),[expressions...], {key: value...}, {expressions...} 绑定或加圆括号的表达式,列表显示,字典显示,集合显示

参考:https://docs.python.org/zh-cn/3/reference/expressions.html

Python分隔符

序号 分隔符 说明
1 (
2 )
3 [
4 ]
5 {
6 }
7 ,
8 :
9 .
10 ;
11 @
12 = 赋值
13 ->
14 += 加法赋值运算符
15 -= 减法赋值运算符
16 *= 乘法赋值运算符
17 /= 除法赋值运算符
18 //= 取整除赋值运算符
19 %= 取模赋值运算符
20 @=
21 &=
22 |=
23 ^=
24 >>=
25 <<=
26 **= 幂赋值运算符

数据模型

对象 是 Python 中对数据的抽象。 Python 程序中的所有数据都是由对象或对象间关系来表示的。 (从某种意义上说,按照冯·诺依曼的“存储程序计算机”模型,代码本身也是由对象来表示的。)

Python中对象的三要素:id、type、value。

  • id用来唯一标识对象,你可以将其理解为该对象在内存中的地址。 ‘is’ 运算符可以比较两个对象的编号是否相同;id() 函数能返回一个代表其编号的整型数。
  • type用来标识对象的类型,对象的类型决定该对象所支持的操作 (例如 “对象是否有长度属性?”) 并且定义了该类型的对象可能的取值。type() 函数能返回一个对象的类型 (类型本身也是对象)。与编号一样,一个对象的 类型 也是不可改变的。isinstance(object, classinfo)用来判断type,如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。
  • value用来标识对象的值,有些对象的 可以改变。值可以改变的对象被称为 可变的;值不可以改变的对象就被称为 不可变的==用来判断两个对象的值是否相等,用value来判断。

Python垃圾回收机制

CPython 目前使用带有 (可选) 延迟检测循环链接垃圾的引用计数方案,会在对象不可访问时立即回收其中的大部分,但不保证回收包含循环引用的垃圾。

以下情况引用计数器**+1**

  • 对象被创建  a=14
  • 对象被引用  b=a
  • 对象被作为参数,传到函数中   func(a)
  • 对象作为一个元素,存储在容器中   List={a,”a”,”b”,2}

以下情况引用计数器**-1**

  • 当该对象的别名被显式销毁时  del a
  • 当该对象的引别名被赋予新的对象   a=26
  • 一个对象离开它的作用域,例如 func函数执行完毕时,函数里面的局部变量的引用计数器就会减一(但是全局变量不会)
  • 将该元素从容器中删除时,或者容器被销毁时。

当指向该对象的内存的引用计数器为0的时候,该内存将会被Python虚拟机销毁。

参考:https://blog.csdn.net/xiongchengluo1129/article/details/8046265

Python标准类型

Python基础入门教程(基于Python3.8)

Python特殊方法

一个类可以通过定义具有特殊名称的方法来实现由特殊语法所引发的特定操作 (例如算术运算或下标与切片)。这是 Python 实现 操作符重载 的方式,允许每个类自行定义基于操作符的特定行为。

object.__new__(cls[,...])

object.__init__(self[,...])

object.__del__(self)

object.__repr__(self)

object.__str__(self)

object.__str__(self)

object.__bytes__(self)

object.__format__(self,format_spec)

object.__hash__(self)

object.__bool__(self)

with语句上下文管理器

上下文管理器 是一个对象,它定义了在执行 with 语句时要建立的运行时上下文。上下文管理器处理进入和退出所需运行时上下文以执行代码块。 通常使用 with 语句(在 with 语句 中描述),但是也可以通过直接调用它们的方法来使用。

典型用法:上下文管理器的典型用法包括保存和恢复各种全局状态,锁定和解锁资源,关闭打开的文件等等。

命名空间(变量作用域)

局部变量

如果名称绑定在一个代码块中,则为该代码块的局部变量,除非声明为 nonlocalglobal

如果代码块中定义了一个局部变量,则其作用域包含该代码块。 如果定义发生于函数代码块中,则其作用域会扩展到该函数所包含的任何代码块,除非有某个被包含代码块引入了对该名称的不同绑定。

i = 10 def f(): print(i) f() i = 20 f() 

10
20

全局变量

如果名称绑定在模块层级,则为全局变量。 (模块代码块的变量既为局部变量又为全局变量。)

*变量

如果变量在一个代码块中被使用但不是在其中定义,则为 *变量

异常处理

异常是中断代码块的正常控制流程以便处理错误或其他异常条件的一种方式。

引发异常

  • 在检测到运行时错误(例如零作为被除数)的时候引发异常
  • 通过 raise 语句显式地引发异常

异常处理

异常处理是通过 tryexcept 语句来指定的。 该语句的 finally 子句可被用来指定清理代码,它并不处理异常,而是无论之前的代码是否发生异常都会被执行。

模块的导入

通过import导入指定函数

import 函数模块名 

通过import导入所有函数

from 模块名 import * 

通过别名方式导入

import numpy as np 

为了帮助组织模块并提供名称层次结构,Python 引入了 包的概念。包通过层次结构进行组织,在包之内除了一般的模块,还可以有子包。

所有包都是模块,但并非所有模块都是包。(包只是一种特殊的模块)

Python 定义了两种类型的包,常规包命名空间包

常规包

常规包通常以一个包含 __init__.py 文件的目录形式实现。当一个常规包被导入时,这个 __init__.py 文件会隐式地被执行,它所定义的对象会被绑定到该包命名空间中的名称。

本文地址:https://blog.csdn.net/qq_29537269/article/details/108871100

相关标签: Python python教程