type
status
date
slug
summary
tags
category
icon
password
🧑🏻🏫 python安装目录解释
pip 作用
帮助我们安装第三方模块或者别人写好的python代码
👉🏻 注释
单行注释
格式: #空格 内容
多行注释
格式:""“空格 内容 空格”""
格式:’’‘空格 内容 空格’’’
🤲🏻 变量
先定义,再引用
变量名
变量命名规则
1. 变量必须以字母和下划线开头;
2. 其他可以是字母、数字、下划线;
3. 变量区分大小写;
4. python关键字不能作为变量名;
命名规范
- 见名识意;
- 小驼峰命名:userName
- 大驼峰命名:UserName
- 下划线命名:user_name
方法
- 统计一个变量的id:id(变量名)
- 统计一个变量的类型:type(变量名)
- 比较两个变量的 id 是否相等:变量1 is 变量2
- 比较两个变量的值是否相等:变量1 == 变量2
- 打印变量值:print(变量名)
- 删除引用关系:del 变量名
常量
注:python没有常量一说,约定名称为大写的就是表示常量
规范
常量:USERNAME
⌨️ 基本数据类型
数字类型
整型类型
int
浮点型类型
float
布尔类型
bool
值:True、False
is_sleep = True print(type(is_sleep)) print(is_sleep)
字符串类型
str
name = '张大仙' name = "张大仙" name = """张 大 仙""" name = '''张 大 仙'''
字符串运算
- 字符串的拼接:字符串 + 字符串 # 这种形式不建议
- 字符串的打印数字的个数次:字符串 * 数字
name = "张大仙" name2 = "坦克" name2 = name + name2 name = name * 5
列表类型
list
索引从0开始,第一个是0,最后一个是 -1
info = [0, '张大仙', 18, '坦克'] print(info[1], info[-1])
特点
有序
内存存储
列表存储是的地址
元组类型
tuple
俗称:不可变的列表,即不能对元组的元素进行修改
t = (1, 'name', [1,2], {"name":"张大仙", "age": 18})
内存结构
作用
如果数据只有读的需求,没有改的需求尽量是用元组而不是列表,这样更节省内存。
字典类型
dict
特点
无序
person = { "name": "张大仙", "age": 18 } print(type(person)) print(person) print(person.get("name")) print(person["name"])
内存存储
和列表类似,key和value都存储的是地址,地址指向真正的值
注意
key需要时不可变类型的变量,即:整型、浮点、布尔、字符串、元组类型的值
集合
set
# 只能这样定义 a = set()
特点
1. 对元素的类型有要求,需要存储不可变类型的变量;
2. 无序;
3. 不能存储相同的元素;
4. 不可索引;
作用
去重、做关系运算
内存存储
参见列表
使用
sets = {1, 2, 3, 4, 'ss'} print(sets.add(2)) print(list(sets))
🍭 可变类型和不可变类型
定义
名词 | 解释 | 包含类型 |
可变类型 | 值改变的情况下,id不变,说明改的是原值 | 容器类型:列表、字典、集合 |
不可变类型 | 值改变的情况下,id变了,说明产生了一个新值 | 整型、浮点型、布尔类型、字符串类型、元组 |
直接引用和间接引用
l[2]的值不会改变,因为间接引用没有改变
看图,他们之间产生了堆内存的循环依赖问题,使用标记清除解决他
🔍 访问方式
🗑️ 垃圾回收
回收方法
del 变量
接触变量和堆内存的绑定关系,这样如果堆内存不存在引用,则会被垃圾收集器回收。
回收机制
1. 引用计数法:栈变量引用计数为0则回收;
2. 标记清除:解决堆循环依赖问题;没有栈区引用的堆内存都会回收;
分代回收
解决回收的效率问题
常量池
- 小整数值的常量池:int 数值 -5 ~ 256 进行缓存;
- 字符的常量池:a,b,c.....都有常量池;
- None也是在小整数池中;
👨👦👦 与用户交互
输入
input()
python2返回值的类型使用的是用户输入的数据类型,也就是在用户输入之前需要明确类型
name = input("请输入名称:") print(name, type(name)) >> 请输入名称:"张大仙" >> 张大仙 <class 'str'>
python3将返回值都用一个字符串接收
name = input("请输入名称:") print(name, type(name)) >> 请输入名称:张大仙 >> 张大仙 <class 'str'>
注意上面的区别
python2方便的是程序员,用户得写字符串的引号,不输入的话会报错;
python3方便的是用户,用户随便输入什么,程序员可以对输入的遍历进行转换;
age = int(字符串变量)
age就会转换成数字类型的变量
raw_input()
这个是python2的函数,和python3的input()功能是一致的,返回值都是字符串
输出
print(变量名)
将变量名的值打印到终端的显示器上
默认是\n就行换行操作,如果想修改可以使用
print("修改换行符", end='\n') print("修改换行符", end='\t')
格式化输出
1. %占位符 # 效率最差,所有版本都有的功能 占位符: s: 字符串 d: 有符号十进制整数和i一样 c: 字符 i:有符号十进制整数 u:无符号十进制整数 o: 八进制整数 x: 16进制整数(小写字母) e:索引符号(小写e) E:索引符号(大写E) f:浮点实数 g:f和e的简写 G: f和E的简写 2. {}+字符串.format() | {索引}+字符串.format(索引值) # 效率其次,2.7版本才有的功能 name = "张三" print("你好{}".format(name)) {索引值} 对应format的索引的值 3. f # 效率最高,3.5 之后才有的功能 name = input("你的名称: ") hometown = input("你来自哪里: ") info = f"我的名字是{name} ,我的家乡叫{hometown}" 4. string.template - 字符串的模版方法
name = "张三" classPro = "清华大学" age = 21 print("大家好,我叫%s,来自%s,今年%d岁" % (name, classPro, age)) name = "张三" print("你好{}".format(name)) print("中国{1},{0}".format(name, classPro))
⚾ 基本运算符
赋值运算
= 1. 普通赋值; 2. 解压赋值; -- 集合类型的数据进行的多参数赋值
算数运算符
1. 加法 + 2. 减法 - 3. 乘法 * 4. 指数 ** 5. 取余 % 6. 除法 / 7. 取整 //
比较运算符
1. == 2. != 3. < 4. > 5. >= 6. <=
逻辑运算符
逻辑运算符 | 说明 | 优先级 |
not | 非 | 最高 |
and | 与 | 其次 |
or | 或 | 最低 |
成员运算符
in
- 字符串
- 列表 - 列表元素需要完全匹配
- 字典 - 判断关键字是否在key中, key完全存在
not in
- 字符串
- 列表 - 列表元素需要完全匹配
- 字典 - 判断关键字是否在key中
name = '张三' listNames = ['张三先', '李四'] print(name in listNames) dicts = { "name": "张三", "age": 18 } feature = "name" print(feature in dicts) str_name = '你好啊,张三' print(name in str_name) ''' False True True '''
🥈 条件判断
显示布尔值
直接返回True, False的类型
隐示布尔值
0,None, 空(空字符串、空列表、空字典) -> False
其他值对应的是 -> True
if 10: print('True')
if条件
语法
# if 条件是采用缩进来实现的 if condition1: condition1 program elif condtion2: condition2 program else: other condition program
👮🏻♂️ 拷贝
浅拷贝
如果元素都是不可变类型,浅拷贝和深拷贝没有区别。如果存在可变类型,那么浅拷贝是不会在内存在拷贝一份可变类型的变量的。那么就存在可变类型被修改的情况。
方法
# copy 方法 l1 = ['张大仙', '徐凤年', ['李淳罡', '邓太阿']] l2 = l1 l3 = l1.copy() print(id(l1), id(l2), id(l3)) print(id(l1[0]), id(l2[0]), id(l3[0])) print(id(l1[1]), id(l2[1]), id(l3[1])) print(id(l1[2]), id(l2[2]), id(l3[2])) l1[0] = '张坦克' print(id(l1[0]), id(l2[0]), id(l3[0])) print(l1[0], l2[0], l3[0]) # 不可变变量的值就不会变,所有值都改变 l1[2][0] = '李大嘴' print(id(l1[2]), id(l2[2]), id(l3[2])) print(l1[2][0], l2[2][0], l3[2][0]) ''' 4353582336 4353582336 4353581888 4352802416 4352802416 4352802416 4352802608 4352802608 4352802608 4353480832 4353480832 4353480832 4353687696 4353687696 4352802416 张坦克 张坦克 张大仙 4353480832 4353480832 4353480832 李大嘴 李大嘴 李大嘴 '''
内存结构
深拷贝
不可变量的id值不一样
方法
# copy.deepcopy() import copy l1 = ['张大仙', '徐凤年', ['李淳罡', '邓太阿']] l4 = copy.deepcopy(l1) print(id(l4[2]), id(l1[2])) ''' 4555592064 4555396608 '''
内存结构
🔁 循环语句
while循环
# 语法 while codition: condition program break # 退出当前层循环体 continue # 退出本次循环
while + else
只有while循环正常执行完成才会执行else, 否则不会
while condition: condition program else else program
示例
while 1: print('loop') if 1: print('if') break;
for 循环
对象
列表、字典、字符串、元组、集合
语法
for 变量名 in 可迭代对象: 子代码块
示例
names = ['张大仙', '张宏发', '张坦克'] for a in names: print(a) person = {'name': '张大仙', 'age': 18, 'score': 100} for per in person: print(per, '是', person[per])
range函数
含义
生成多少个列表元素
语法
range(10)
从0到10生成元素,不包含10
range(1, 9)
从从1到9生成元素,不包含9
range(1, 9, 1)
从1到9按步长1生成元素,不包含9
实现区别
python2是执行完就开辟对应的内存生成对应的空间
python3是只生成迭代器,当需要时才去生成对应的元素,这样就避免了空间的浪费。
用法
for i in range(10): print(i)
9*9乘法表
for i in range(1, 10): for j in range(1, i + 1): print(f'{i} * {j} = {i * j}', end='\t\t') print('\n')
🧗🏻 进制转换
十进制转其他进制
十进制转二进制
bin(十进制数字) 12 -> ob1100
十进制转八进制
oct(十进制数字) 12 -> 0o14
十进制转十六进制
hex(十进制数字) 12 -> 0xc
其他进制转十进制
int('进制数', 进制枚举值) float('进制数', 进制枚举值) ''' 进制枚举值: 2 : 二进制 8 : 八进制 16: 十六进制 '''
🔗 引用文章
- 小飞有点东西
有关于博客的任何问题,请在下方留言,感谢~ 🤞🏻
- 作者:Sheamus
- 链接:https://www.sheamus.top/article/python/base
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章