3.24 7.13 Python基础汇总
对象类型 | 类型名称 | 示例 | 简要说明 | 备注 |
数字 | int,float,complex | 1234,3.14,1.3e5,3+4j | 数字大小没有限制 | 十六进制用0x 前缀和0-9,a-f表示 |
字符串 | str | 'swd',"I'am a student",'''Python''' | 使用单引号、双引号、三引号作为定界符 | 标记实例:*
print('I\'m\"ok\"!') 这里用到转义字符\ |
字节符 | bytes | b‘hello world’ | 以字母b引导,可以使用单、双、三引号作为定界符 | |
列表 | list | [1,2,3],['b','a',1,2,3] | 所有元素放在一对方括号中,元素之间使用逗号分隔,其中的元素可以是任意类型 | |
字典 | dict | {1:'food',2:'tast',3:'import'} | 所有元素放在一对大括号中,元素之间使用逗号分隔,元素形式为”键:值“ | |
元组 | tuple | (2,-5,6),(-3,) | 同理,但是只有一个元素的话后面的逗号不能省略 | |
集合 | set ,frozenset | {‘a','b','c'} | 所有元素放在一对大括号中,元素之间使用逗号分隔,元素不允许重复; | |
布尔值 | bool | Ture,False | 逻辑值,关系运算符 | 注意开头大写,常与and,or,not运算 |
空类型 | NoneType | None | 空值 | None是一个特殊的值,None不能理解为0,0是有意义的 |
异常 |
Exception ValueError TypeError |
python内置大量异常类,分别对应不同类型的异常 | ||
文件 | f=open('data.dat','rb') | open是python的内置函数,使用指定的模式打开文件,返回文件对象 | ||
其他迭代对象 | 生成器对象、range对象、zip对象、enumerate对象、map对象、filter对象 | 具有惰性求值的特点 | ||
编程单元 |
函数(使用def 定义) 类(使用class定义) 模块(类型为module) |
类和函数都属于可调用对象,模块用来集中存放函数、类、常量或其他对象 |
*转义字符
转义字符\可以转义很多字符,比如\n
表示换行,\t
表示制表符,\\
表示的字符就是\
为了简化,添加了r' ' 表示 ' '内部的字符串默认不转义
变量
python 采用基于值得的内存管理模式。赋值语句得执行过程是:
首先把等号右侧表达式得值算出来,然后在内存中寻找一个位置把值存放进去,最后创建变量并指向这个内存地址
******其中里面存储了值的内存地址或者引用,这也是变量类型随时可以改变的原因********
#1 变量名必须以字母或下划线开头,不能用数字开头
#2 不能有空格或标点符号
#3 不能使用关键字作为变量名
#4 不建议使用系统内置的模块名、类型名或函数名
#尽量统一大小写,Student 和 student
常量
所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量
python是动态语言
————————》分数 高精度实数
Fractions 支持分数运算
计算最大公约数gcd()
高精度实数类Decimal
利用from fractions import Fraction/Decimal
—————————》字符串
“+”————————》》连接字符串
不同定界符之间可以互相嵌套——————————》》 ‘’‘Tom said that ,"let's go".'''
### 除了支持Unicode编码的str类型字符串外,还支持字节串类型 bytes
********************列表、元组、字典、集合
比较项 | 列表 | 元组 | 字典 | 集合 |
类型名称 | list | tuple | dict | set |
定界符 | 方括号【】 | 圆括号() | 大括号{} | 大括号{} |
是否可变 | 是 | 否 | 是 | 是 |
是否有序 | 是 | 是 | 否 | 否 |
是否支持下标 | 是 | 是 | 是 | 否 |
元素分隔符 | 逗号 | 逗号 | 逗号 | 逗号 |
对元素形式的要求 | 无 | 无 | 键:值 | 必须可哈希 |
对元素值得要求 | 无 | 无 | “键”必须可哈希 | 必须可哈希 |
元素是否可重复 | 是 | 是 |
“键”不允许重复, “值”可以重复 |
否 |
元素查找速度 | 非常慢 | 很慢 | 非常快 | 非常快 |
新增和删除元素速度 | 尾部操作快,其他位置慢 | 不允许 | 快 | 快 |
可哈希的数据结构,可以通过迭代等方法进行去重等;但不可哈希的数据结构,往往在去重的方法上需要做相应的改造,例如嵌套字典的列表,根据字典中的某些元素属性去重,嵌套列表去重等.
运算符和表达式
运算符 | 功能说明 |
+ | 算术加法,列表、元组、字符串合并于连接 |
- | 算术减法,集合差集,相反数 |
* | 算术乘法,序列重复 |
/ | 真除法 |
// | 求整商,但如果操作数中有实数得话,结果为实数的整数 |
% | 求余数,字符串格式化 |
** | 幂运算 |
<,<=、>、>=、==、!= | (值)大小比较,集合的包含关系比较 |
or | 逻辑或 |
and | 逻辑与 |
in | 成员测试 |
not | 逻辑非 |
is | 对象同一性测试,即测试是否为同一个对象或内存地址是否相同 |
|、^、&、<<、>>、~ |
位或、位异或、位与、左移位、右移位、位求反 |
&、|、^ | 集合交集、并集、对称差集 |
@ | 矩阵相乘运算符 |
1.+加法运算
不支持不同类型的对象之间相加或连接
2.%运算符号运算
a='%c,%d'%(65,65)
print(a)
把65 分别格式化位字符和整数
3.**运算符表示幂乘,等价于内置函数pow().
a=3**2
print(int(a))
b=pow(3,2)
print(b)
如果要取平方根那么就0.5次方
PS /除法计算结果是浮点 //地板除只取整数部分 %余数运算,可以得到两个数相除的余数
4.关系运算符
一个字符串和一个数字进行大小比较是毫无意义的
c={1,2,3}<{1,2,3,4,5} 测试是否为子集
c={1,2,3}>{1,2,3,4} 集合之间的包含测试
5.成员测试运算符in与同一性测试运算符is
d=5 in range(1,10,1)
print(d) ##range()是用来生成指定范围数字的内置数字
e='abdc'in'abdcsdadedwew'
print(e) ##子字符串测试
6.位运算符与集合运算符
位运算只能用于整数
内部执行过程为:首先将整数转换为二进制数,然后右对齐,每一个按位进行运算,最后再把计算结果转换为十进制数字返回。
位与和位或 就不多说
异或的公式为: 相同则置0,不同则置1.
集合的交集,并集,对称差集等运算借助于位运算来实现,并且差集是用减号实现。
逻辑运算符
a=3 and 5
print(a)
##### 最后一个计算的表达式的值作为整个表达式的值
a= not 3
print(a)
###### not加一个数字表示是 False
同理
not 0
为true
附加内容:
a=+(+3)
print(a)
输出为3。 于++i等价
相反-(-i)一样
关键字 | 含义 |
Flase | 常量,逻辑假 |
None | 常量,空值 |
True | 常量,逻辑真 |
and | 逻辑与运算 |
as | 在import或expect语句中给对象起别名 |
assert | 断言,用来确认某个条件必须满足,可用来帮助调试程序 |
break | 用在循环层里面,提前中断break所在的程序里面 |
class | 用来定义类 |
continue | 用在循环中,提前结束本次循环 |
def | 用来定义函数 |
del | 用来删除对象或对象成员 |
elif | 用在选择结构,循环结构和异常处理结构中 |
except | 用在异常处理结构中,用来捕获特定类型的异常 |
finally | 用在异常处理结构中,用来表示不论是否发生异常都会执行的代码 |
global | 定义或声明全局变量 |
if | 用在选择结构中 |
import | 用来导入模块或模块的对象 |
in | 成员测试 |
is | 同一性测试 |
lambda | 用来定义lambda表达式,类似于函数 |
nonlocal | 用来声明nonlocal变量 |
not | 逻辑非运算 |
or | 逻辑或运算 |
pass | 空语句,执行该语句时什么都不用做,常用作占位符 |
raise | 用来显示抛出异常 |
return | 返回值,如果没有返回值的话,表示返回值none |
try | 在异常处理结构中用来限定可能会引发异常的代码块 |
while | 用来构造while循环结构,只要条件表达式等价于True就重复执行限定的代码块 |
with | 上下文管理,具有自动管理资源的功能 |
yield | 在生成器函数中用来返回值 |
#######缺一个表格
类型转换与类型判断
内置函数 bin()、oct()、hex()、
### 把整数转换为二进制,八进制,十六进制。
b=(int('0b111',0))
print(b)
****不明白的一个点
ord()和 chr()是一对功能相反的函数,ord()用来返回单个字符的unicode,
而chr(0则用来返回Unicode编码对应的字符,str()则直接将其任意类型参数转换为字符串
# a=ord('梁')
# b=ord('锦')
# c=ord('成')
# print(a,b,c)
a=''.join((map(chr,(26753,38182,25104))))
print(a)
或者是ASCII可以把对象转换为ASCII码表示形式
内置类bytes用来生成字节串,或者把指定对象对象转换为特定编码的字节串
a=bytes('梁锦成','utf-8')
print(a)
b=bytes('梁锦成','gbk')
print(b)
c=str(b'\xc1\xba\xbd\xf5\xb3\xc9','gbk')
print(c)
d='梁锦成'.encode('utf-8')
print(d)
列表:list() 元组:tuple() 字典:dict() 可变集合set() 不可变集合frozenset()
a=dict(zip('1234','abcdfgt'))###创建字典
print(a)
反正就是 创建一个可变集合,并且自动去除重复————————》》set函数
创建一个不可变的集合,并且都可以自动消除重复————————————》》frozenset函数
内置函数 type() 和 isinstance() 可以用来判断数据类型,并且经常用来进行检查,可以避免错误的参数类型导致函数崩溃或返回意料之外的结构,
a=type({3})in (list,tuple,dict)
print(a)
b=type({3}) in(list,tuple,dict,set)
print(b)
a=isinstance(3j,int)
print(a)
b=isinstance(3,int)
print(b)
c=isinstance(3j,(complex,float,int))
print(c)
****************判断一个数是否为**的类型
a=max(['2','111'],key=len)
print(a)
from random import randint ******所有子列表中第二个元素最大的子列表
b=[[randint(1,50) for i in range(5)]for j in range(30)]
print(max(b,key=lambda x:x[0]))
a=sum(range(1,11),5)
print(a) ****指定start参数为5,等价于5+sum(range(1,11))
a=sum(2**i for i in range(200))
print(a) #等比数列前n项的和
##上一行的可以这样代替
b=int('1'*200,7)
print(b)
c=sum(range(101))
print(c) #101个人在开会,互相握手次数,不重复握手
基本输入与输出
input()和 print()是python的基本输入输出函数,前者用来接收用户的键盘输入,后者用来把数据以指定的格式输出到标准控制台或指定的文件对象。
不论对象输入什么内容,input()一律作为字符串对待,必要的时候可以使用内置函数int()、float()或 eval() 对用户输入的内容进行类型转换
print(value1,value2,…………,sep='',end='',file=sys.stdout.flush=False)
##切记要记住
***读取5个字符,如果不足5个,等待继续输入
import sys
x=sys.stdin.read(5)
print(x)
import sys
x=sys.stdin.readline('dawedsdsdad')
print(x)
###从缓冲区内容比需要的少,遇到换行符也结束。
###如果缓冲区内容比需要的多,就截断然后输出。
排序与逆序
sorted()对列表、元组、字典、集合、或其他可迭代对象进行排序并返回新列表,
reversed()对可迭代对象(生成器对象和具有惰性求值特性的zip、map、filter、enumerate等类似对象除外)进行翻转(首位交换)并返回可迭代的reversed对象
x=list(range(11))
import random
random.shuffle(x)###打乱顺序
# print(x)
b=sorted(x)###以默认规则排序
# print(b)
c=sorted(x,key=lambda item:len(str(item)))
print(c)
(这个暂时还不会)MARK
枚举与迭代
enumerrate ()函数用来枚举可迭代对象中的元素,返回可迭代的enumerate对象,其中每个元素都是包含索引和值的元组
a=list(enumerate('abcd')) ##枚举字符串中的元素
print(a)
b=list(enumerate(['Python','Greate']))##枚举列表中的元素
print(b)
c=list(enumerate({'a':13,'b':14,'c':124}.items()))##枚举字典的元素
print(c)
for index,value in enumerate(range(10,15)): ##枚举range对象中的元素
print((index,value))
for item in enumerate (range(5),6): ##索引从6开始
print(item,end=' ')
iter()函数用来返回指定对象的迭代器,有两种方法:iter(iterable) 和 iter(callable,sentinel)
iter(iterable) 前者要求参数必须为序列或者有自己的迭代器,
iter(callable,sentinel) 后者会持续调用参数callable直至其返回sentinel。
next()函数用来返回可迭代对象中的下一个元素,适用于生成器对象以及zip、enumerate、reversed、map、filter、iter等对象,
等价于这些对象的__next__()方法