列表生成式,模块的使用

上节课复习
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的第一次路径是当前执行文件所在的文件夹

 

posted @ 2018-04-03 18:46  嘿,  阅读(146)  评论(0编辑  收藏  举报