目录
- 1、杂:
- 2、输入、输出:
- 3、特殊字符,转义字符:
- 5、数据类型
- 5.1数据类型转化
- 6、运算符
- 7、语句
- 7.1、条件分支:if...(elif...elif......)else...
- 7.2、条件表达式:
- 7.3、循环while、for:
- 7.4、上下文管理类型 with
- 7.5、is、==
- 8、序列数据结构:字符串str、列表list[]、元组tuple()、bytes/bytearray/memoryview(二进制序列)
- 8.1、元组(tuple):
- 8.2、索引:
- 8.3、切片:
- 8.4、len(序列名称)
- 8.5、列表插入:append(元素) insert(索引号,元素)
- 8.6、列表合并:extend(列表) +
- 8.7、列表删除部分:del、pop、remove
- 8.8、列表排序:顺序 sort(列表) 倒序 reverse(列表)
- 8.9、字符串分割:split()、rsplit()、filter()
- 9、字典dict 键/值对(key/vale)
- 10、集合 set、frozenset(不可修改)
- 12、鸭子类型
1、杂:
- 可能有用的网站
#Python查询 https://docs.python.org/zh-cn/3/tutorial/interpreter.html - 2种模式:交互模式和脚步模式
- 变量使用前无需声明
- 缩进表示代码块(C++用{})
- 大小写不同
- 标识符必须以下划线或字母开头,python3支持非英文字符
- 没有命名常量,常量无名字
- 一切皆对象:type->int->1
print(type(1)) # 输出:<class 'int'>
print(type(int)) # 输出:<class 'type'>
print(type(type)) # 输出:<class 'type'> type是一个类,同时是一个对象!
- object与type:构成环路
print(type.__base__) # 输出:<class 'object'>,type是object的子类
print(type(object)) # 输出:<class 'type'>,object是type的实例(对象)
print(object.__base__) # 输出:None,object不继承任何对象
2、输入、输出:
string=input("提示信息")#返回的是字符串类型!
>>>num=int(input("请输入整数:"))
请输入整数:100
print(输出内容,end),end默认是回车,如: (python2不需要加括号())
print("Hello,Sir")#输出Hello,Sir
print(1+2)#输出3
print("输入整数是:%d" %(num))
print("Hi, %s,I'm %s" %("Mike","John"))
print("1",end="-") #则输出1后不回车,而是输出-,若end=""表示输出1后不操作
3、特殊字符,转义字符:
\r 回车
\n 换行
\t 横向制表符
\v 纵向制表符
\f 换页
\a 响铃
\b 退格(Backspace)
\(行尾)续行符
\\ 反斜杠符号
\’ 单引号
\” 双引号
\000 空
\oyyy 八进制数yyy代表的字符
\xyy 十进制数yy代表的字符
%c 字符及其 ASCII码
%s 字符串
%d 整数
%u 无符号整型
%o 无符号八进制数
%x 无符号十六进制数
%X 无符号十六进制数(大写)
%f 浮点数字,可指定小数点后的精度,如%.5f表示保留5位小数
%e 用科学计数法格式化浮点数
%p 用十六进制数格式化变量的地址
失效转义字符:
>>>print("C: \MyProgram\rencent\num\test\ score" )
ecentrogram
um est\score
>>>print(r 'C: \MyProgram\ rencentnum\ test\score" )
C: \My Program\ rencent\num\test\score
>>>print (R'C: \MyProgram\rencent\num\test\score") #r与R相同?
C:\MyProgram\ rencent\num\test\score
4、format格式化输出
#不带编号
>>>print("今天是{}年{}月{}日 " .format(2019,5,18))
今天是2019年5月18日
#带数字编号
>>>print(‘她叫{0},今年{1}岁,她的朋友lisa,今年也{1}岁了’.format(’Lucy’,10))
她叫Lucy,今年10岁,她的朋友lisa,今年也10岁了
#带关键字
>>>print(‘她叫{name},今年 {age}岁。’.format (age=10,name= ‘Lucy’)
她叫Lucy,今年10岁。
#用{}转义大括号
>>>print ("{} 对应的位置是 {{0}}".format("runoob"))
runoob 对应的位置是 {0}
#{:填充字符 对齐方式 数据宽度 数据类型}
>>>print('第一个数字是{: ! > 8 .3f}'.format(12.98)) #用"!"填充,右对齐,数据宽度为8位,保留3位有效小数的浮点数表示
>>第一个数字是!!12.980
填充:默认空格填充
对齐:默认右对齐< 左对齐< 中间对齐^
数据类型:f浮点数、b二进制、o八进制、d十进制、x十六进制
5、数据类型
主要的有6种:数字、字符串、列表、元组、字典、集合
还有动态类型等概念(如鸭子类型)
其中集合set、列表list、字典dict都是用cpython实现,运行效率较高
数字:整型int,可以任意大
浮点数float
布尔值:1真、0假
复数:1+2i
字符串string:成对的单引号或双引号、三引号指定一个多行字符、也可用三引号做多行注释
字符串前添加一个‘r’:让反斜杠“\”转义字符失效:
“\”可作为续行符
print(r'C:\some\name') #\n失效,输出:C:\some\name
print('str'+'ing ','my'*3) #+ 、* 运算符,输出:string mymymy
print('str\
ing') #输出:string
5.1数据类型转化
int(x,base)转换为整型 int(“123”) #向0取整int(3.5)=3、int(-3.5)=3
float() 转换为浮点型 float(“123”)
bool() 转换为布尔型 bool(1)
str() 转换为字符串 str(123)
chr() 将整数转换为对应的 ASCII字符
ord() 将一个字符转换为对应的 ASCII码
complex() 转换为复数型 complex(1)
6、运算符
- 重载运算符
- 算术运算符
+ 加 1+2=3
- 减 3-1=2
* 乘 2*3=6
/ 除 7/2=3.5(精确除法)
% 求模 7%2=1(取余数,余数符号和除数一致,7%-2=-1)
** 幂运算2**3=8
// 整除 7//2.0=3.0(比商小的最大整数,-7//2=-4)
- 赋值运算符
= #连续赋值a=b=c=1,多元赋值(x,y,z)=(1,2,'Python')(例如x,y=y,x,交换x和y)
+= #x+=2就是x=x+2
类似有-= *= /= %=(x%=2就是x=x%2) **= //(x//2就是x=x//2)
- 字符串运算符:
+(字符串连接)
>>>py="Python"
>>>v2="2.0"
>>>v3="3.0"
>>>print(py+v2, py+v3)
Python2.0 Python3.0
* (重复输出多次)
>>>print("重要的话说三遍!”*3)
重要的话说三遍!重要的话说三遍!重要的话说三遍!
成员运算符:in、not in
>>>str="Hello!"
>>>'H' in str
True
- 其他:
不等于 != <>
位运算符: &与 丨或 ~非 ^异或 <<左移 >>右移
- 优先级:自上而下,自左而右(如:*高于~±高于/%//高于±)
运算符 | 描述 | 运算符 | 描述 |
** | 指数 (最高优先级) | <= < > >= | 比较运算符 |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) | <> == != | 比较运算符 |
* / % // | 乘,除,取模和取整除 | = %= /= //= -= += *= **= | 赋值运算符 |
+ - | 加法减法 | is is not | 身份运算符 |
>> << | 右移,左移运算符 | in not in | 成员运算符 |
& | 位 ‘AND’ | not or and | |
^ | 位运算符 |
7、语句
7.1、条件分支:if…(elif…elif…)else…
if x<y:
print(" is less than.")
elif x>y:
print(" is greater than.")
else:
print(" is equal to.")
print("continue....")
7.2、条件表达式:
表达式1 if判断条件 else 表达式2
print(a if a>b else b) #打印a、b最大值
7.3、循环while、for:
- 循环1:
while 循环条件:
循环体
i=1 #计算1到100之和
sum=0
while i<101:
sum+=i
i+=1
- 循环2:
for 标识符 in 可迭代对象:
循环体
for c in "Python":
print(c,end="")
print("") # 会自动回车
for i,val in enumerate("abc"):
print("序号:{}\t值:{}".format(i,val))
[print(c,end="") for c in "Python"]
# [a=c for c in "Python"] 但是不能赋值,这里报错
# 打印:
Python
序号:0 值:a
序号:1 值:b
序号:2 值:c
Python
7.4、上下文管理类型 with
with语句可以简化try-except-fibally语句(但不完全相同)
with:对于需要进行访问的任务,无论是否发生异常,都会执行必要的清理工作(文件关闭、线程中锁的自动获取和释放)
with 上下文管理器表达式 [as 变量]: #表达式:上下文管理器对象或函数(返回值是上下文管理器对象)
语句块
with open("mypython.txt") as f: #as f 可选
print(f.read()) #with完成时会自动关闭文件
实现上下文管理器:
在类定义时,实现__enter__()和__exit__()即可
在with语句块前先调用__enter__(),with后调用__exit__(),释放资源通常在exit中
eg.模拟实现一个文件类:
class File ()
def __init__(self, filename, mode):
self.filename=filename
self.mode=mode
def __enter__(self):
print("执行__enter__()方法")
self.f=open(self.filenam, self.mode)
return self.f
def __exit__(self, *args):
print("执行__exit__()方法")
self.f.close()
with File('mypython.txt','r') as f:
print(f.read()) #f内容:xxx
#正常输出结果:
执行__enter__()方法
xxx
执行__exit__()方法
7.5、is、==
is与==不同,is相当于判断对象的id()是否相等,而==是判断两个函数返回的值是否相等
8、序列数据结构:字符串str、列表list[]、元组tuple()、bytes/bytearray/memoryview(二进制序列)
8.1、元组(tuple):
一经定义不能改变,可以是不同的数据类型(列表也可以不同类型)
t1=(1) #t1是整数
t2=(1,) #t2是元组!!type((1,)) = tuple
8.2、索引:
正向和逆向
>>>str_py="Python"
>>>print(str_py[-1]) #逆向索引
n
8.3、切片:
#字符串切片
>>>str_py="Python"
>>>print(str_py[1:5])
'ytho'
>>>print(str_py[1:]) #str_py[:5]类似,不填写表示到尽头
'ython'
#列表切片
>>>list1=[1,2,3]
>>>list1[1:]
[2,3]
>>>print(list1) #打印整个列表
[1,2,3]
>>>print(list1[0]) #打印列表某个元素
1
8.4、len(序列名称)
序列名称可以是字符串、列表、元组
ndarray 转 list:ndarray对象.tolist()
>>>str="Python"
>>>len(str)
6 #len("Python")也是6
8.5、列表插入:append(元素) insert(索引号,元素)
>>>list_1=[1,2,3]
>>>list_1.append(4) # 没有返回值,但是+有返回值
>>>list_1
[1,2,3,4]
>>>list_1.insert(1,5)
[1,5,2,3,4]
8.6、列表合并:extend(列表) +
>>>list_1=[1,2,3]
>>>list_2=[4,5]
>>>list_1.extend(list_2) #等价于list_1=list_1+list_2
>>>list_1
[1,2,3,4,5]
8.7、列表删除部分:del、pop、remove
>>>list_1=[1,2,3]
>>>del list_1[1]
>>>list_1
[1,3,4]
- 第一种:del命令。删除元素后续不再使用。
格式:del name[3] - 第二种:.pop()。 保存删除的元素备用。
格式:popped_names = names.pop(3)
语法:list.pop([index=-1])
index:可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值 - 第三种:.remove()。 不知道位置,根据element的值剔除元素。
格式: names.remove(‘value’)
8.8、列表排序:顺序 sort(列表) 倒序 reverse(列表)
>>>list_1=[2,3,1,4]
>>>list_1.sort()
>>>list_1
[1,2,3,4] #用list_1.reverse()则输出[4,3,2,1]
8.9、字符串分割:split()、rsplit()、filter()
# str.split(" ") 用空格分割,划分多个空格请不要输入参数
print("a b cc d".split(" ")) # ['a', 'b', 'cc', 'd']
print("a b cc d".split(" ", 2)) # 仅划分前2个空格:['a', 'b', 'cc d']
print("a b cc d".split(" ")) # 有"":['a', 'b', '', '', 'cc', '', 'd']
print("a b cc d".split()) # 无"":['a', 'b', 'cc', 'd']
# rsplit就是从最后开始分割
print("a b cc d".rsplit(" ", 1)) # ['a b cc', 'd']
# 用filter(判断函数, 可迭代对象)
filter_obj = filter(None, "a b cc d".split(" "))
filter_obj = filter(lambda x:x!="", "a b cc d".split(" ")) # 或者这个一样
print(list(filter_obj)) # ['a', 'b', 'cc', 'd']
9、字典dict 键/值对(key/vale)
创建
>>>dic_score={"语文":80,"数学":85,"英语":70}
>>>dic_student1={"name":"Mary","age":26}
>>>dic_student2={"name":{"first":Mary,"last":"Smith"},"age":26}
打印
>>>print(dic_score) #打印字典
{"语文":80,"数学":85,"英语":90}
>>>print(dic_score["语文"]) #打印元素
80
遍历:
>>>for key_score in dic_score.keys(): #遍历键 .key()
print(key_score,end=" ")
70 80 85 #字典中的元素是无序的
>>>dic_student={‘name':’张明',’sex':'男','age':18,'score':98}
>>>for value in dic_ student.values(): #遍历所有值 .value()
print(value, end=" “)
18 张明 98 男
>>>for item in dic_student.items(): #遍历所有的键值对 .items()
print(item,end=" ")
('age',18) ('name','张明') ('score':98) ('sex','男')
查找:dict.get(key, default=None)
key – 字典中要查找的键。
default – 如果指定键的值不存在时,返回该默认值。
其它:
>>>len(dic_score) #len
3
>>>"数学" in dic_score #in
Ture
>>>dic_score['体育']=98 #添加元素 此时,dic_score={"语文":80,"数学":85,"体育"=98,"英语":90}
>>>dic_score['体育']=76 #修改元素 此时,dic_score={"语文":80,"数学":85,"英语":90,"体育"=76}
>>>dic_score.pop('体育') #删除元素 此时,dic_score={"语文":80,"数学":85,"英语":90}
>>>doc_score2=['体育':100]
>>>dic_score.update (dic_score2) #合并字典 此时,dic_score={"语文":80,"数学":85,"体育":100,"英语":90}
>>>dic_student2.clear() #清空字典所有元素 此时,dic_student2={}
传递参数:**param:两个星号**,表示将多个参数放入)
10、集合 set、frozenset(不可修改)
由一组无序的元素组成,无序所以不能用下标访问
集合set和字典dict效率在Python中较高
创建、打印:
>>>set1=(1,2,3,2,3) #创建时自动去除重复元素,实际上set1={1,2,3}
>>>print(set1)
{1,2,3}
>>>len(set1)
3
>>>set2=set("Python") #创建可变集合,可增、删、改
>>>print(set2)
{'n','P','o','t','h','y'}
>>>set3=frozenset("Hello") #创建不可变集合
12、鸭子类型
望文生义:
当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。(也就是多态与泛型)
- 鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。
class A(object):
def say(self):
print("A 的say函数")
class B(object):
def say(self):
print("B 的say函数")
objList = [A, B]
for i in objList:
i().say() # i()实例化对象,不同的类,函数名相同,可用统一的变量i表示(多态)
# 输出:
A 的say函数
B 的say函数