Python常忘的基础知识,,0.目录1.进制1.


0.目录

1.进制

1.1 各进制的表示

1.2 各进制的转换

2.字符

2.1 转义字符

2.2 原始字符串

3.类型

3.1 基本数据类型

3.2 type()

4.变量与运算符

4.1 值类型与引用类型4.2 列表的可变与元组的不可变

4.3 运算符

5.包与模块

5.1 Python项目的组织结构5.2 导入模块5.3 __init__.py的用法5.4 模块内置变量5.5 入口文件5.6 __name__的经典应用

5.7 相对导入和绝对导入

6.函数

6.1 认识函数6.2 序列解包与链式赋值6.3 必须参数、关键字参数、默认参数6.4 可变参数、关键字可变参数

6.5 global关键字

1.进制

1.1 各进制的表示

0b(零b)表示二进制
0o(零o)表示八进制
0x(零x)表示十六进制

1.2 各进制的转换

bin() 将其他进制数转化为二进制
int() 将其他进制数转化为十进制
hex() 将其他进制数转化为十六进制
oct() 将其他进制数转化为八进制

2.字符

2.1 转义字符

转义字符:

特殊的字符无法“看见”的字符与语言本身语法有冲突的字符\n 换行\r 回车‘ 单引号

\t 横向制表符

2.2 原始字符串

用 r‘字符串‘ 或 R‘字符串‘ 表示原始字符串

3.类型

3.1 基本数据类型

有序(序列):列表 list

元组 tuple

无序:

集合 set字典 dict

序列共有的操作:

len() 求序列的长度max()最大元素min()最小元素ord()ASCII码

集合的操作:
{1,2,3,4,5,6} - {3,4} 为 {1,2,5,6}
{1,2,3,4,5,6} & {3,4} 为 {3,4}
{1,2,3,4,5,6} | {3,4,7} 为 {1,2,3,4,5,6,7}

字典的规则:

不能有相同的keykey的取值:必须是不可变类型,如int str tuple

value的取值:str int float list set dict

3.2 type()

type((1)) 是 int
type((1,)) 是 tuple

type((‘hello‘)) 是 str
type([1]) 是 list

定义空元组:type(())
定义空集合:type(set())
定义空字典:type({})

4.变量与运算符

4.1 值类型与引用类型

值类型:int str tuple(不可变)
技术分享图片
引用类型:list set dict(可变)
技术分享图片
id()函数显示变量在内存中的地址
技术分享图片

4.2 列表的可变与元组的不可变

列表可改变
技术分享图片
元组不可改变
技术分享图片

4.3 运算符

1.算术运算符:加减乘除、取余%、乘方
2.赋值运算符
3.比较(关系)运算符
不只是数字才能做比较运算:
技术分享图片
4.逻辑运算符:and(与)、 or(或)、 not(非)
5.成员运算符:in、not in
技术分享图片
6.身份运算符:is、not is
如何判断变量的值、身份与类型?**

== 比较是否相等用 is 比较身份是否相等,即比较两个变量的内存地址是否相等,可以用 id() 查看变量的内存地址用 isinstance() 比较类型是否相等,不推荐使用 type(a) == int 这种方法,而是使用 isinstance(a, str) 这种方法。而且还可以使用 isinstance(a, (int, str, float)) 判断a是不是int, str, float中的任意一种。最重要的是type不能判断变量的子类是否属于某种类型,但是isinstance可以

ps:对象的三个特征:id、value、type(分别用is、==、isinstance)
7.位运算符(把数字当做二进制数进行运算):

&(按位与)|(按位或)^(按位异或)~(按位取反)<<(左移动)>>(右移动)

5.包与模块

5.1 Python项目的组织结构

包 → 模块 → 类 → 函数、变量
包相当于文件夹

命名空间:包名.模块名

如何让普通文件夹成为包?——必须包含__init__.py文件

__init__.py文件本身也是一个模块
包下__init__.py的模块名就是包名

5.2 导入模块

import导入模块:

import 模块名 as xxximport 包名.模块名 as xxx——print(包名.模块名.变量名)

from import 导入模块

from 包名.模块名 import 变量名from 包名 import 模块名from 包名.模块名 import *

在模块中设置 __all__ = [‘a‘, ‘c‘] 可以控制 from 包名.模块名 import * 导入的变量为a和c

5.3 __init__.py的用法
**导入包时会自动运行 __init__.py 文件**
在 __init__.py 文件使用 __all__ = [‘c1‘] 可以控制导入的模块为 c1.py

包与模块的几个常见错误:

包和模块是不会被重复导入的避免循环导入

导入模块时Python会自动执行导入模块里面的所有代码

5.4 模块内置变量

dir()函数返回当前模块所有的变量:
技术分享图片
内置变量:
技术分享图片name 是模块的完整名称(包括命名空间)package 是包名doc 是模块的注释

file 是当前模块在系统里面的物理路径

不同的运行:
技术分享图片

5.5 入口文件

入口文件会导致内置变量的不同
技术分享图片
技术分享图片

如果一个普通的.py文件被当作应用程序的入口,那么它的变量 **__name__** 就不再是本身模块的名称,而是会被强制更改为 **__main__**

如果一个普通的.py文件被当作应用程序的入口,那么它的顶级是不会再有包的如果一个普通的.py文件被当作应用程序的入口,那么它的变量 **__file__** 不再是绝对路径,而是和执行python命名所在目录有关

5.6 __name__的经典应用
使用dir()函数查看模块或类相关的变量:
技术分享图片

Make a script both importable and executable
if __name__ == "__main__":
Python脚本既可以作为一个普通的模块提供给其它应用程序来调用,也可以让它自己成为一个可执行的文件。

__name__的经典应用:
技术分享图片

使用 python -m 命令将一个可执行文件当作一个普通的模块:
技术分享图片
ps:普通的模块必须要有包

5.7 相对导入和绝对导入

决定顶级包的是可执行文件

绝对导入(绝对路径):

import 顶级包...中间包...模块名绝对引入一定要从顶级包开始

相对引入:

. 表示当前目录.. 表示上一级目录

在入口文件中不能进行相对导入
相对路径之所以能够找到对应的模块,在于根据内置变量 __name__ 来定位。但是由于 main.py 是入口文件, __name__ 被强行改成 __main__ ,但是 __main__ 这个模块不存在,所以在入口文件中不可以使用相对路径来导入模块

6.函数

6.1 认识函数

round()函数用于保留几位小数(自动四舍五入):
技术分享图片

如何限制函数递归层数:
import sys
sys.setrecursionlimit(1000)

如何让函数返回多个结果:

返回元组

序列解包

6.2 序列解包与链式赋值

序列解包(数量要相等):
技术分享图片

链式赋值:
将a, b, c = 1, 1, 1改为a=b=c=1

6.3 必须参数、关键字参数、默认参数

1.必须参数——形参、实参
形参:
技术分享图片
实参:
技术分享图片

2.关键字参数
不用按必须参数的顺序传递,随意顺序
技术分享图片

3.默认参数
技术分享图片

6.4 可变参数、关键字可变参数

1.可变参数
必须参数必须放在可变参数前面
可以把默认参数放在可变参数后面,然后利用关键字参数传值
使用*a来解包元组:
技术分享图片

2.关键字可变参数
传入任意个数的关键字可变的参数:
技术分享图片

遍历字典:items
技术分享图片

使用**a来解包字典:
技术分享图片
ps:什么参数都不传,param 将为空字典

6.5 global关键字

global关键字:声明全局变量
技术分享图片

Python常忘的基础知识

评论关闭