python学习
users.pop[1] #列表删除特有
字符串本身不能修改删除//不可变类型。
不能用del删除字符串。
5. 修改(数字/布尔/字符串除外)
```python
users=['a','b',99]
users[2] = 66 #可以修改
users[0] = 'a' #可以修改
users[0][0] #不能修改
步长,默认步长为1,当步长为负数时从后往前取
name='alexalex'
val=name[0:-1:2] # 0为起始位置,-1结束位置,2为步长
print(name)
aeae
-------------------
val=name[::2] #从前到后步长为2
-------------------
val=name[-1:0:-2] #从后往前取,步长为2,答案是xlxl
val=name[::-2] #从后往前取,步长为2,答案是xlxl
-------------------
val=name[::-1] #反转,输入xela
for循环
name='alex'
for item in name : #遍历name将每个字符传递给item并打印
print(item)
打印1到10
for i in range(1,11): #前取后不取
print(i)
打印1到10不打印7
for i in rang(1,11):
if i==7:
continue
print(i)
列表
len
users=["a","b","c"]
val=len(users)
print(val) #3
索引
users=["a","b","c"]
val = users[0]
print(val) #a
切片
users=["a","b","c"]
val = users[0:2] #['a', 'b']
步长
users=["a","b","c"]
val = users[0:2:2] #['a']
将输入的字符存入列表里使用.append()
.append()
是在列表的最后追加一个元素
users=[]
while True :
name = input('输入姓名:')
users.append(name)
print(users)
-------------------------------
users=[]
users.append('alex')
print(users)
插入.insert(n,'xxx')
,在第n个元素前插入xxx
users=['a','b','c']
users.insert(0,'d')
print('users')
删除.remove(xxx)
如果有两个相同的,只删除第一个
users.remove('a') #删除users里的a
.pop(n)
n 是索引位置,如果不加索引位置,默认删除最后一个
delete = users.pop(0)
可以将删除的数据存储在delete
中,而del
仅仅是删除
users.pop(0) #删除第0个
clear
清空
users.clear() #清空列表
列表的嵌套
users=['a',1,True,[12,2,'b'],[3,['alex','d'],6]]
users=[3][2] #取2
users=[4][1][0] # 取'alex'
.extend()
习题:将字符出s='abc'添加到列表users中,不使用循环,()可以放元组,字符出,列表
users.extend(s)
反转 v1.reverse()
从小到大排 v1.sort(reverse=False)
从大到小排v1.sort(serverse=True)
判断敏感词
v = ['alex','我','你是谁']
if '我' in v :
print ('包含敏感词')
元组
元组的书写规范
users=[1,2,3,4,5,6] #列表(可变类型)
users=(1,2,3,4,5,6) #元组(不可变类型)
没有独有功能,只有公共功能
公共:
索引
users=(1,2,3,"a")
print(users[3])
切片
users=(1,2,3,"a")
print(users[0:2])
步长
users=(1,2,3,"a")
print(users[0:2:2])
删除(不能删除)
修改(不能修改)
for循环
users=(1,2,3,"a")
for i in users:
print(i)
len
users=(1,2,3,"a")
print(len(users))
特殊:元组中的元素不能被删除/修改
v1 = (11,22,33)
v1[1] = 999 #错误
v1 = 999 # 可以
----------------------
v1 = v1 = (11,22,33,(44,55,66)) # 可以嵌套
----------------------
v2 = [11,22,33,(44,55,66)]
v2[-1][1] = 99 # 错误 ,(44,55,66)里面不能修改,整体可以,因为是列表里的元素
v2[-1] = 123 # 正确
----------------------
v3 = (11,[1,2,3],22,33) #其中的[1,2,3]是元组的元素
v3[1] = 666 # 错误,[1,2,3]是元组的元素,不能修改
v3[1][2] = 123 # 可以
判断敏感词用 in 同字符串和列表一样
字典
帮助用户表示一个事物的信息(事物有多个属性)
data = {键:值,键:值,键:值}
获取值
info = {"name":'郭希文','age':21,'gender':'男'} #键值对
print(info['name'])#取值
取值,用这个也可以判断字典里是否有这个数据
info = {'k1':'v1','k2':'v2'}
n = info.get('k111',666) #'k111'是键,当能取到值时取值,当取不到时返回666,如果没设置默认返回None
.values()
取值
输出所有的键/值
info = {"name":'郭希文','age':21,'gender':'男'}
for i in info.keys():
print(i)
-----------------------------------
info = {"name":'郭希文','age':21,'gender':'男'}
# for a,b in info.items():
# print(a,b) #输出所有的键值
for i in info.items() :
print(i) #输出所有的键值
输出所有键和值,并让用户输入键,根据用户输入,输出对应的值
info = {"name":'郭希文','age':21,'gender':'男'}
for k,v in infor.items():
print(k,v)
key = input('请输入键:') #'name'
print(info[key]) #info['name']
给一个空字典,请在空字典中添加数据:k1:1,k2:2,k3:3
info = {}
info['k1'] = '1'
info['k2'] = 2
info['k3'] = 3
print(info)
给一个空字典,请让用户输入:key,value,将输入的key,value添加到字典里
info = {}
k = input('请输入key:')
v = input('请输入value:')
info[k] = v
print(info)
给一个空字典,请让用户一直输入:key,value,将输入的key,value添加到字典里,直到用户输入了N,则表示不在输入
info = {}
while True :
k = input('请输入key:')
if k == 'N' :
break
v = input('请输入value:')
info[k] = v
print(info)
给一个字符串,message = "k1|v1,k2|v2,k3|123"
,转换成字典
info = {}
message = "k1|v1,k2|v2,k3|123"
for item in message.split(','):
v1,v2 = item.split('|')
info[v1] = v2
print(info)
数据类型嵌套,int/bool/str/list/tuple/dict
列表里边嵌套字典
字典嵌套,列表不能当键,字典不能当键#不可哈希
info = {'k1':'v1','k2':True,'k3':1,'k4':(11,22),'k5':[33,44],'k6':{'kk':'vv'},1:{'kk':'vv'},False:{'kk':'vv'},(11,2):{'kk':'vv'}}
习题创建一个用户列表,列表里放字典,首先用户输入用户名密码注册,在进行登录
users_list = []
while True:
count = 0
info = {'username':'','password':''}
name = input('请输入账号:')
if name == 'N':
break
pwd = input('请输入密码:')
info['username'] = name
info['password'] = pwd
users_list.insert(count,info)
count += 1
print(users_list)
print('注册成功')
---------------------------------------------
k = input('请输入用户名:')
v = input('请输入密码:')
num = len(users_list)
for i in users_list:
num -= 1
k1 = i['username']
v2 = i['password']
if k == k1 and v == v2 :
print('登录成功')
num = 1
break
else :
continue
if num == 0 :
print('登录失败')
删除
info = {'k1':'v1','k2':'v2'}
result = info.pop('k2')
print(info,result) #结果为{'k1':'v1'} v2
del info['k1'] #也是删除
更新
info.updata({'k3':'v3'}) #如果不存在就添加,如果键存在就更新
判断k1是否在其中?
if 'k1' in v : #默认判断的是 键
判断v2是否在其中?
方式一:
flag = '不存在'
for v in v.values():
if v == 'v2':
flag = '存在'
print(flag)
方式二:
if 'v2' in list(v.values()): #将值的整体强制转换为列表,再进行判断
pass
判断k2:v2是否在其中?
value = v.get('k2')
if value == 'v2':
print ('存在')
else:
print ('不存在')
有序:元组,列表
无序:字典(3.6之后是有序的)
集合 set : v = {1,2,3,4}
无序,不重复的/不能通过索引删除
#v1 = set () 表示空集合
添加
v = {1,2}
v.add('a')
删除
v = {1,2,'a'}
v.discard('a')
updata,批量添加
v = {1,2,'a'}
v.updata({11,22,33})
交集
v = {1,2,'a'}
result = v.intersection({1,'a'}) #不对集合本身做操作,需要赋值
print(result)
并集
v = {1,2,'a'}
result = v.union({1,'a','b'})
print(result)
差集
v = {1,2,'a'}
result = v.difference({1,'a','b'}) #输出结果是,v中而{1,'a','b'}没有的
print(result)
对称差集
v = {1,2,'a'}
result = v.symmetric_difference({1,'a','b'})
print(result)
len()
for 循环
集合嵌套
- info = {1,2,3,True,'国风',None,(4,5)} #列表,字典,集合不能放在集合中,不能作为字典的 键
深浅拷贝
浅拷贝:拷贝第一次
深拷贝:拷贝所有数据(可变),有时候由于小数据池使得不可变数据地址一样
import copy
文件操作
file_object = open('log.txt',mode = 'r+',encoding='utf-8') #r+可读可写,r可读,w可写
content = file_object.read()
file_object.write('我')
file_object = open('log.txt',mode='w+',encoding='utf-8') #w,w+ ,会将文件清空,读取时需要调整光标
data = file_object.read()#读不到
print(data)
file_object.write('alex')
file_object.seek(0) #将光标移到第一个
data = file_object.read()
print(data)
file_object.close()
可读可写 'a+',只要写光标会自动跳到最后
file_object = open('log.txt',mode = 'a+',encoding='utf-8')#光标默认在最后,读文件是从光标开始读
file_object.seek(0)
data = file_object.read()
print()
file_object.close()
r,只能读 **
w,只能写,写之前清空 **
a,只能追加 *
r+
- 读:默认从0的光标开始读,也可以通过seek调整光标位置
- 写:从光标所在的位置开始写,也可以通过seek调整光标的位置
w+
- 读:默认光标永远在写入的最后或0,也可以通过seek调整光标位置
- 写:先清空
a+
- 读:默认光标在最后,也可以通过seek调整光标位置,然后再去读取
- 写:永远写在最后
#写入实例:一般用于图片/音频/视频/未知代码
f = open('a.txt',mode='wb')
#把要写入的字符串转换成二进制
data = '我好困'
content = data.encode('utf-8') #将字符串按 utf-8编码转换成二进制
#再将二进制写入文件中
f.write(content)
f.close()
f = open('a.txt',mode='rb')
#直接读取二进制
data = f.read
f.close()
print(data)
三目运算
如果a>b的结果为真,h="变量1",如果为假,h="变量2"
h = "变量1" if a>b else "变量2"
函数
局部变量
在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。
#局部变量
def func(x):
print('x is', x)
x = 2
print('Changed local x to', x)
print('局部变量')
x = 50
func(x)
print('x is still', x)
在上面这段代码中,首先函数定义了形参x,相当于函数的局部变量。在函数调用的时候,传入了外部x,外部x值为50。在函数内部将x值改为2,改变的是局部变量x,外部x不受影响,从最后的输出结果可以验证。运行结果如下:
局部变量
x is 50
Changed local x to 2
x is still 50
如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。例如:
#访问外部变量
def func2():
global x
print('x is', x)
x = 2 #这个x是全局变量
print('Changed local x to', x)
print('访问外部变量')
x = 50
func2()
print('Value of x is', x)
运行结果如下:
访问外部变量
x is 50
Changed local x to 2
Value of x is 2
默认参数值
只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。这是因为赋给形参的值是根据位置而赋值的。例如
def func(a, b=5)
函数可以当作参数进行传递
def func (arg):
arg()
def show ():
print 999
func(show)
lambda表达式
lambda表达式,为了解决简单函数的情况
def func(a1,a2):
return a1+100
func = lambda a1,a2:a1+100
#这两个是相同的效果
func1 = lambda:100 # 没有参数,返回100
func2 = lambda x1:x1*10
func3 = lambda *args ,**kwargs : 100
func4 = lambda n1,n2 : n1 if n1 > n2 else n2 #判断大小
内置函数
自定义函数
内置函数
len
open
range
max()
min()
sum()
abs() #计算绝对值
pow()
v = pow(2,3)
print(v)# 2**3 2的3次方
divmod() #计算出商和余数
round()
v = round (1.123,2) #保留小数点后2位,2可有可无
print (v) #1.12 有默认四舍五入
dict()
list()
tuple()
int()
str()
bool()
进制转换
bin () 将10进制转化成2进制
oct() 将10进制转换成8进制
hex() 将10进制转换成16进制
int() 将其他进制转换成10进制
v1 = '0b1101'
result = int(v1,base=2)#指定读的是二进制
print(result) #二进制转换成10进制
其他
- len()
- range()
- id()
- type()
- open()
编码相关
chr(),将十进制数字准换成unicode编码中对应的字符串
ord(),将unicode编码转换成十进制
生成随机数
import random
def ger_random_code(length=6):
data = []
for i in range(length):
v = random.randint(65,90)
data.append(chr(v))
return ''.join(data)
code = ger_random_code()
print(code)
高级内置函数
map()循环每个元素(第二个参数),然后让每个元素执行函数(第一个参数),将每个函数执行的结果保存到新的列表中,并返回。
map(x,y) #第一个参数:必须是一个函数,第二个参数:必须是可迭代的类型
v1 = [11,22,33]
result = map (lambda x:x+100,v1)
print(result) #在python2中会返回[111,122,133]
print(list(result)) #python3中需要使用list转换后才能显示
filter()过滤
v1 = [11,22,'a',34]
result = filter(lambda x:True if tpye(x) == int else False,v1)#使用lambda来代替func函数
result = filter(lambda x:tpye(x) == int,v1)#更简化
print(list(result))
reduce()
import functools
v1 = [11,22,33]
def func (x,y):
return x*y
result = functools.reduce(func,v1)
print(result)
----------------------------------
import functools
v1 = [11,22,33]
result = functools.reduce(lambda x,y:x*y,v1)
print(result)
模块
md5
import hashlib
obj = hashlib.md5()
obj.update('123'.encode('utf-8'))
result = obj.hexdigest()
print(result)
2.加盐
import hashlib
obj = hashlib.md5('qwesdsafewafewafaef123d'.encode('utf-8'))
obj.update('123'.encode('utf-8'))
result = obj.hexdigest()
print(result)
装饰器
在不改变原函数的情况下,在函数之前或者之后做操作
def func(arg):
def inner():
print('before')
v = arg()
print('after')
return v
return inner
def index():
print('123')
return '666'
index = func(index)
index()
def func(arg):
def inner():
print('before')
v = arg()
print('after')
return v
return inner
@func #第一步:执行func函数并将下面的函数当作参数传递。相当于:func(index)
#第二步:将func的返回值重新赋值给下面的函数名。index = func(index)
def index():
print('123')
return '666'
index()
Q.E.D.
相关文章
- Python 学习笔记 列表 for 循环 xxx XXX
- 快速入门Python机器学习(36)
- 快速入门Python机器学习(23)
- 快速入门Python机器学习(12)
- 快速入门Python机器学习(33)
- 快速入门Python机器学习(35)
- Python学习笔记(28)-Python读取word文本「建议收藏」
- 快速入门Python机器学习(29)
- 快速入门Python机器学习(30)
- 快速入门Python机器学习(22)
- 快速入门Python机器学习(27)
- Python学习笔记:几种排序算法
- 快速入门Python机器学习(32)
- 《深入浅出Python机器学习》读书笔记 第一章 概述
- Python学习系列:PyCharm CE 安装与测试
- 快速入门Python机器学习(19)
- 快速入门Python机器学习(11)
- 快速入门Python机器学习(20)
- 快速入门Python机器学习(25)
- 快速入门Python机器学习(31)