推导式和模块
一、推导式
列表推导式、字典推导式、集合推导式
(一)列表推导式
利用其他列表创建新列表
基本格式:
变量名 = [表达式 for 变量 in 列表]
变量名 = [表达式 for 变量 in 列表 if 条件]
执行流程:
遍历出列表中的内容给变量,表达式根据变量值进行逻辑运算。
或者遍历出列表中的内容给变量,然后进行判断,符合的值再给表达式。
a = [1, 2, 3, 4, 5, 6]
b = [i * i for i in a]
print(b)
a = [1, 2, 3, 4, 5, 6]
def qiupf(x):
return x * x
b = [qiupf(i) for i in a]
print(b)
a = [1, 2, 3, 4, 5, 6]
b = [i for i in a if i % 2 == 1]
print(b)
a = [1, 2, 3, 4, 5, 6]
b = [i**2 for i in a if i%2 == 0 if i > 2]
print(b)
b = [i**2 for i in a if i%2 == 0 and i > 2]
print(b)
b = [i for j in a for i in j]
print(b)
a = [[3*i+j+1 for j in range(3)]for i in range(3)]
print(a)
a = [lambda x:x*i for i in range(3)]
print(a[0](2))
print(a[1](2))
print(a[2](2))
(二)字典推导式
与列表推导式的区别就是,产生的是字典
字典推导式格式:
变量名={…}
a = {'a':'b', 1: 2}
b = {v:k for k,v in a.items()}
print(b)
a = {k:v for k,v in zip('abc', '123')}
print(a)
a = {'a': 1, 'A': 3, 'b': 4, 'B': 9, 'c': 10}
print(a.get('c', 9)) # 字典里有的取有的
print(a.get('C', 0)) # 没有的取默认的
a = {'a': 1, 'A': 3, 'b': 4, 'B': 9, 'c': 10, 'd':99}
x = {'a', 'A', 'B', 'b', 'c'}
b = {k.lower():a.get(k.lower(),0)+a.get(k.upper(),0)for k in a.keys() if k in x}
print(b) # {'a': 4, 'b': 13, 'c': 10}
(三)集合推导式
跟列表推导式非常相似,唯一区别就是用{}代替[]
模块
(一)模块的导入方式
import 模块名
import 模块名 as 别名
import 模块名1, 模块名2, … --------一行导入多个模块
from … import …
from … import … as 别名
from … import 功能1, 功能2…
from … import * --------- 导入所有
(二)常用模块
1、产生随机小数
(1)random()
产生0-1之间的小数
(2)uniform()
产生指定范围内的随机小数
import random
print(random.uniform(2, 3))
2、产生随机整数
(1)randint(a,b)
产生a,b范围内的整数,包含头和尾
a = [random.randint(1, 10) for i in range(10)]
print(a)
(2)randrange(start, stop, step)
产生范围内的整数,包含开头不包含结尾
step表示步长
a = random.randrange(1, 13, 2)
print(a)
(3)随机选择一个数据
choice()
随机返回序列中的一个数据
a = [10, 20, 30, 40]
b = random.choice(a)
print(b)
3、打乱
shuffle()
打乱列表顺序
a = [10, 20, 30, 40]
random.shuffle(a)
print(a)
练习生成随机验证码
def verify_code():
code=''
for i in range(4):
sz = random.randint(0, 9)
xzm = chr(random.randint(97, 122))
dzm = chr(random.randint(65,90))
c = random.choice([sz, xzm, dzm])
code = code + str(c)
return code
print(verify_code())
面向对象
一、类和对象
类–描述一个事物的行为和特征
对象–是由类创造出来的具体实体,可以直接使用的
二、类和对象之间的关系
先有类后有对象
类只有一个,对象可以有多个
三、类的设计
设计一个类,需要满足以下三个要素:
类名:大驼峰命名法
属性:描述这类事物的特性
方法:描述这类食物的具体行为
class Student():
name=''
def study(self):
print(self.name, '学习')
def eat(self):
print(self.name, '吃饭')
zhang = Student()
zhang.name = 'xx'
zhang.study()
zhang.eat()
#在别的方法中也可以对属性初始化
class Student():
def __init__(self, name):
self.name = name
def hehe(self,age):
self.age = age
def haha(self):
print(self.name,self.age)
zs = Student('张三')
zs.hehe(19)
zs.haha()
# 在类外增加属性
class Teacher():
def __init__(self, name):
self.name = name
def show(self):
print(self.name, self.age)
zs = Teacher('张三')
zs.age = 29
zs.show()
class Student():
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def show(self):
print(self.name,self.age,self.sex)
def setage(self):
self.age=19 # 在原age上进行修改
zs = Student('张三', 29, '男')
zs.show()
zs.setage()
zs.show()
class Dog():
def __init__(self, color, age):
self.color = color
self.age = age
def __str__(self): # 魔术方法
print('hhhhhhhhhhh')
return '颜色%s 年龄%d'%(self.color,self.age)
d = Dog('红色', 18)
# print(d, type(d), id(d)) # 启用了__str__,但d还是一个对象
x = str(d) # str方法触发了__str__方法
print(x, type(x))
b = d
print(b, type(b), id(b))