匿名函数和模块

 

匿名函数

1,什么是匿名函数?
匿名函数就是没有名字
2,为什么要用匿名函数
用于临时使用一次的场景
3,如何定义匿名函数
def foo(x,y)
return x + y


lambda

lambda x,y:x+y调用的两种方式
1,f = lambda x,y:x+y
printf(1,2)

2,res = (lambda x,y:x+y)(1,2)
print(res)

(lambda x,y:x+y)(1,2)

真的使用方式是和其他的函数搭配使用

 

max

salaries = {
'axx' : 30000000,
'bgon':3000,
'zxx':1000
}

def f(name):
   return salaries[name]

print(max(salaries,key = f ))

print(max(salaries,key = lamdba name:salaries[name]))
print(min(salaries,key = lamdba name:salaries[name]))
print(sorted(salaries)

print(min(salaries,key = lamdba name:salaries[name]))






max:最大
min:最小
sorted:排序
   
map:映射
names = ['lxx','hxx','wxx']
res = [name+'_vip' for name in names]

res = map(lambda name:name + '_vip',names)
print(res)
print(list(res))
     
     
filter:过滤
names = ['lxx_vip','hxx','wxx_vip']  
res = [name for name in names if name.endswith('vip')]      
print(res)    
filter(lambda name:name.endswith('_vip'),names)      
     
reduce:
res = reducee(lambda x,y:x+y,['a','b','c','d'],'aaa')
print(res)
   
res = reduce(lambda x , y:x+y , [1,2,3],可以设置一个初始值)      
     
     
     

 

面向过程编程思想

1,面向过 程编程思想
过程就是流程,即先干什么在干什么
基于该思想学程序就好比在设计一条条的流水线

优点:复杂的问题流程化、进而简单化
缺点:牵一发而动全身,扩张性差

 

模块

模块是一堆功能的集合体

自定义模块的两种格式:
1,一个py文件就是一个模块
2,包就是一个存有__init__.py文件的一个文件夹,包的本质就是一个模块

模块的三种来源:
1,自带的
 内置的
 标准库
2,第三方的库
pip3 install 第三方库
3,自定义的,减少代码冗余,提取对自己有用模块

前两种称之为拿来主义

首次导入模块发生的三件事:
1,会触发spam.ry的运行,会产生一个模块的名称空间,用来存放模块运行过程中产生的名字
2,会在当前文件夹得名称空间中产生一个名字spam。改名字指向模块得名称空间

print('from the spam.py')
moeny = 1000

def read1():
print('spam模块,moeny')

def read2():
print('spam模块')

def change():
pass




import spam  
print(spam.money)
print(spam.read1)
print(spam.read2)
print(spam.change)




使用语句中出现的点,代表问摸一个名称空间要东西
导入语句中出现的点,代表路径分隔符


import from import

import语法:
优点:不会于当前名称空间发生冲突
缺点:每次都要加前缀
import,调用时 要加前缀,

import spam as sm
as语法
import spam as sm,os as xxx,sys re  起别名

from sapm import moeny ,read1,read2,change
print(moeny)
print(read1)
print(read2)
print(change)

相同之处:名称空间这一点上都是一样得
不同之处:import 调用要加前缀,from import 不需要加前缀  但是要注意容易和当前名称空间发生冲突


form 模块名  import *
代表模块中所有得函数名全部调用
优点:很方便,直接调用即可
缺点是  你自己都不知道有哪些模块内得函数名被调用至当前执行文件




运行文件就会产生一个文件的名称空间



循环导入:把循环的语句放入 函数里,用函数的定义阶段不运行的特性
不要使用循环导入
用一个第三方的模块 来解决 需要用到循环导入的 地方


print(os.environ['x'])

自定义模块不要和内置模块重名


 

模块搜索路径

模块搜索路径,优先级从高到低
1,内存
2,内置
3,sys.path


import sys
print(sys.path)


导模块用的是 路径分割符,windows中用右斜杠,linux用左斜杠,python中也可以用·,
导入语句中的·是路径分隔符的意思,使用语句中的·代表问某一个名称空间要名字

 

py文件的两种用途

def f1():
   print('xxxds')
   
f1()


print(__name__)

if __name__ == '__main__'

输出结果为 __main__


f1直接调用了,所以在其他位置调用时,会直接执行代码,所以要用到 __name__,来使f1不会在 其他文件调用时 就直接运行代码,
__name__,__main__,是内置函数

 

 

 

 

 

 

posted @ 2021-07-05 21:27  旧梦难圆  阅读(133)  评论(0)    收藏  举报