python基础数据类型1
python基础数据类型1
part1:
-
''' ''': 三个单引号用于换行的字符串
-
字符串可以相加(拼接)相乘(重复)
-
在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量
AGE_OF_OLDBOY = 56
- type: 判断类型
part2:
运算符
-
-
-
- / %
-
-
-
** :幂运算,求x的y次幂
-
// :整除 返回商的整除部分
-
逻辑运算符:
and or not
-
在没有括号情况下:not > and > or
-
str <=>int可以相互转化(字符串转数字int会自动去除空格)
int<=>bool : 可以相互转化(非0即True)
str<==> :非空即true
str<-->bool
s1=''
print(bool(s1))
s2=True
print(str(s2))
- 编码:(一个字节:8位)【1 byte = 8 bit】
-
ASCII码:1个英文字母:1个字节
-
GBK码: 1个英文字母:1个字节,1个中文,2个字节
-
Unicode: 无论中文英文: 4个字节
-
Utf-8: 升级: 最少用一个字节表示一个字符(a:一个字节,欧洲:2个字节 中文:3个字节)
格式化
-
input中输入的都是字符串
-
可以通过int将字符串转换成数字
-
也可以通过str将数字转化为字符串
格式化输出:
当你遇到这样的需求:字符串中想让某些位置变成动态可传入的,首先考虑到格式化输出。
while else (while没有被break终止则执行else)
pass: 过
part3
字符串
s1='python全栈22期'
1.按索引: s1[index]
2.按照切片: s1[start_index:end_index]
3.按照切片步长:s1[start_index:end_index:step]
4.反向按照切片步长:s1[start_index:end_index后延一位:-step]
5.
全取出来
s9=s1[:]
print(s9)
字符串常用操作方法
s='tAiBai'
1.s.upper() s.lower() 变成大小写
2.s.startswith('tA') s.endswith() 是否已某某开头或者结尾
3.s.replace('gg','xx',1) 替换
4.s.strip() 只能去除左右两边的
5.s.split() 默认按照空格分隔,返回一个列表
6.join (必须是字符串) s2=':'.join(l1)
7.count:数出某个字符串出现的次数
8.format:格式化输出(三种)
9.is系列
10. in 和 not in
part4:
列表
- 列表的创建:
方式一
li=[1,2,'alex']
方式2
li=list()
方式3:列表推导式
-
列表的索引,切片
-
列表的增删改查:
1.增:
1.append
2.insert
3.extend:迭代者增加(一个元素)一个一个的加上去
2.删除
1.pop按照索引位置删除
2.2.remove按照指定元素去删除,如果由重名元素,默认删除第一个
3.3.clear()清空所有[了解]
4.del1)按照索引删除2.按照切片删除 delli[-1] delli[::2]
3.改
1.按照索引改
2.按照切片改(了解)
3.按照切片步长改值(必须一一对应)
4.查
索引切片
-
列表的嵌套
-
tuple只读
1.查看
2.元组的拆包(一一对应)
3.元组应用场景:a.打包和解包操作:
# 打包
a = 1, 10, 100
print(type(a), a) # <class 'tuple'> (1, 10, 100)
解包
i, j, k = a
print(i, j, k) # 1 10 100
b.交换两个变量的值
a, b = b, a
a, b, c = b, c, a
需要说明的是,上面并没有用到打包和解包语法,Python的字节码指令中有ROT_TWO和ROT_THREE这样的指令可以实现这个操作,效率是非常高的。但是如果有多于三个变量的值要依次互换,这个时候没有直接可用的字节码指令,执行的原理就是我们上面讲解的打包和解包操作
c.让函数返回多个值
return语句中有两个值,这两个值会组装成一个二元组然后返回。所以调用find_max_and_min函数会得到这个二元组,如果愿意也可以通过解包语法将二元组中的两个值分别赋给两个变量
- range():看做:可以自己控制范围的数字列表,但是它不是列表
- 指定范围,生成指定数字
面试题:l1 = range(5)
print(l1[l1[1:3]]) #range(1,3) 但在python2中返回的是一个列表
print(l1[-1]) #4
for I in range(1,5,-1): print(i) # 没有东西
for I in range(5,1,-1): print(i) #5,4,3,2 #倒叙要从大到小
part5:
字典
- 数据类型的分类:
-
可变(不可哈希)的数据类型:list dict set
-
不可变(可哈希)的数据类型:str bool int tuple. 比如:str,对原字符的操作不会改变原字符串,而是形成一个新的字符串 (键应该是不可变数据类型)
- 字典的创建方式:
方式1:dic=dict((('one',1),('two',2),('three',3)))
方式2:dic=dict(one=1,two=2,three=3)
方式3(官方写法):dic=dict({'one':1,'two':2,'three':3})
-
验证字典的合法性:键应该是不可变数据类型
-
字典的增删改查
1.增:
1.直接增加有则改之,无则增加
2.setdefault()有则不变,无则增加
2.删:
1.pop()按照键去删除键值对返回值是删除对应的值(重要)#有第二个值不会报错,并且返回第二个值
2.clear()清空
3.del按照键删除,没有此键会报错
3.改:按键改
dic['name']='alex'
4.查:
1.直接没有会报错
2.get()(重要)可以设置返回值#没有此键时不会报错,并且返回第二个值
3.三个特殊的keys()values()items()
- 字典的嵌套
2022-6-3号新增
-- 命名惯例:
以单一下划线开头的变量名(_X)不会被from module import*等语句导入
前后有两个下划线的变量名(__X__)是系统定义的变量名,对解释器有特殊意义
以两个下划线开头但不以下划线结尾的变量名(__X)是类的本地(私有)变量
导入模块
- 从别的文件中导入模块:
- 绝对导入
import sys
sys.path.append(r'D:\老男孩python22期代码及笔记\python-learning\day14\bb') # r防止转义
print(sys.path)
import kk
- 相对导入
sys.path.append(r'../../day14/bb')
2021年11月23号 20:43加
在学习mmdetection源码中遇到的关于hook函数中的getattr(hook, hook_name)(self)
- 根据下面的官方解释,使用getattr(x, 'foobar')等同于使用x.foobar
getattr(object, name[, default]):
Return the value of the named attribute of object. name must be a string.
If the string is the name of one of the object’s attributes, the result is the value of that attribute.
For example, getattr(x, 'foobar') is equivalent to x.foobar.
If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised.