列表生成式,模块的使用
上节课复习
1,三元表达式
条件成立的情况下返回的值 if条件 else 条件不成立的情况下返回
res= x if x>y else y
2,函数的递归
回溯
递推
注意点:1,必须要有一个明确的结束条件
2,每进入下一次递归。问题的规模都应该减少
3,匿名函数
lambda定义
lambda x,y:x+y
info=[
{'name':'egon','age':'18','salary':'300'},
{'name':'alex','age':'156','salary':'56560'},
{'name':'lxx','age':'78','salary':'2000'},
]
max(info,key=lambda dic:int(dic['salary']))
min(info,key=lambda dic:int(dic['salary']))
l=sorted(info,key=lamdba dic:int(dic['salary']))
map(lambda x:x**2,[1,2,3,4])
redue
filter(lambda x:x>2,[1,2,3,4])
内置函数剩余
pow pow(2,3,3)2**3 %3
l=[1,4,3,5] round(四舍五入)
res=reversed(l)
print(list(res))
print(l)
# print(round(3.5))
# print(round(3.4))
# sc=slice(1,5,2) #1:5:2 切片
# l=['a','b','c','d','e','f']
# # print(l[1:5:2])
# print(l[sc])
# sum(求和)
# print(sum([1,2,3,4]))
zip(拉链,一一对应)
left='hello'
right={'x':1,'y':2,'z':3}
res=zip(left,right)
print(list(res))
2,列表生成式
1=[]
for i in range(100):
l.append('egg%s' %i)
print(l)
换成
l=['egg%s' %i for i in range(100)]
l=['egg%s' %i for i in range(1000) if i >10]
print(l)
用生成器表达式
l=(‘egg%s’ %i for i in range(1000)if i>10)
print(next(l))
print(next(l))
#练习题
names=['egon','alex_sb','wupeiqi','yuanhao','lxx']
res=map(lambda x:x.upper(),names)
names=list(res)
print(names)
names=['egon','alex_sb','wupeiqi','yuanhao','lxx']
names=[name.upper() for name in names]
print(names)
names=['egon','alex_sb','wupeiqi','yuanhao','lxx']
names=[len(name)for name in names if not name.endswith('sb')]
print(names)
nums=[]
with open('db.txt','r',encoding='utf-8')as f:
for line in f:
print(len(line))
nums.append(len(line))
print(max(nums))
with open('db.txt','r',encoding='utf-8')as f:
nums=(len(line) for line in f)
print(nums)
print(next(nums))
max((len(line) for line in f))
print(max(len(line) for line in f))
模块的使用之import
1,什么是模块?
模块就是一系列功能的集合体,在python中 ,一个py文件就是一个模块,比如module.py,其中模块名module
2,使用模块
1,import 导入模块
首次导入模块发生三件事
1,创建一个模块的名称空间
2,执行模块对应文件,将产生的名字存放于1中的名称空间
3,在当前执行文件中拿到一个模块名,该模块名指向1的名称空间
x=1
def f1():
pass
import spam
强调:之后的导入会直接引用第一次导入的结果,不会重复执行文件
文件如下
#spam.py
print('from the spam.py')
__all__=['money','read1'] # from .. import *
money=1000
def read1():
print('spam模块.read1:',money)
def read2():
print('spam模块.read2')
read1()
def change():
global money
money=0
# print(__name__)
# __name__的值
#1、在文件被直接执行的情况下,等于'__main__'
#2、在文件被导入的情况下,等于模块名
if __name__ == '__main__':
# print('文件被当中脚本执行啦。、。')
read1()
else:
print('文件被导入啦')
import spam
import spam
print(spam)
print(spam.money)
spam.read1()
2,模块中功能的执行始终以模块自己的名称空间为准
read1=111111
# print(spam.read1)
# money=1111111111111
# spam.read1()
# read1=11111111111111111111111111
# spam.read2()
# money=1111111111111111
# spam.change()
# print(money)
# spam.read1()
#3、为模块起别名
# import spam as sm
#
# print(sm.money)
# sm.read1()
engine=input('>>: ').strip()
if engine == 'mysql':
import mysql as db
elif engine == 'oracle':
import oracle as db
db.parse()
4模块的使用之from。。。import
首次导入模块发生三件事
#1、创建一个模块的名称空间
#2、执行模块对应文件,将产生的名字存放于1中的名称空间
#提示:from 。。。 import。。与import前两件事一模一样
#3、在当前名称空间中直接拿到模块中的名字,可以直接使用,不用加任何前缀
import spam #spam。名字
from spam import money,read1,read2,change
print(money)
read1()
read2()
import spam
print(money)
注意:1,同improm 执行模块中的功能,始终以模块的名称空间为准money=1111
print(money)
read1=11111
read1()
取别名
from spam import money as m
print(m)
在一行导入多个
from spam import money,read1,read2
from。。。import*
from spam import*
#print(money)
# print(read1)
# print(read2)
# print(change)
# from spam import *
# print(money)
# print(read1)
# print(read2)
import spam
模块的搜索路径
import m1
m1.f1()
模块的查找顺序是:
1,内存中已经加载的模块
2,内置函数
3,sys.path路径中包含的模块
import time
import m1
m1.f1()
tie.sleep(15)
import m1
m1.f1()
import sys
print('time' in sys.modules)
import time
time.sleep(2)
print('time in sys.modules)
import sys
sys.path.append(rD:\code\SH_fullstack_s1\day14\dir1')
import m1
m1.f1()
强调:
sys.path的第一次路径是当前执行文件所在的文件夹