编程语言
首页 > 编程语言> > python学习day26笔记

python学习day26笔记

作者:互联网

匿名函数

匿名函数就是没有名字的函数

为何要用匿名函数

用于临时使用一次的场景
通常与其他函数搭配使用

如何定义匿名函数

lambda关键字

lambda 形参:函数内容
lambda x,y:x+y

调用匿名函数

1.(蠢)
f = lambda x,y:x+y
2.
(lambda x,y:x+y)(1,2)

例:
salaries = {
    'axx':1000,
    'bxx':10000,
    'cxx':100000
}
print(max(salaries,key=lambda name:salaries[name]))
# max将字典内的k值传给key里函数的形参,得到的返回值再进行max找到最大值,得到最大值对应的k值
print(min(salaries,key=lambda name:salaries[name]))
# 与max同理
print(sorted(salaries,key=lambda name:salaries[name]))
# sorted默认从小到大排序 其他与max同理

names = ['lxx','hxx_vip','wxx_vip']
# 下面的一般不使用,只是为了反映出函数式编程的思想
map(lambda name:name+'_vip',names) # 直接输出是内存地址
# res=[name+'_vip' for name in names] 
filter(lambda name:name.endswith('_vip'),names)  # 直接输出是内存地址
# res=[name for name in names if name.endswith('_vip')]
from functools import reduce
reduce(lambda x,y:x+y,[1,2,3],100) # 将其中数据累加,可以是字符串也可以是整型浮点型,必须是同一数据类型

面向过程编程

编程思想

过程就是流程,即先干什么再干什么
基于该思想写程序就好比在设计一条条的流水线

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

在哪里使用

1.实现基础的功能
2.构建程序的框架
# 框架即软件的半成品

模块介绍

模块本质上就是一个工具,它本身不能达成需求

自定义模块

1.一个py文件可以当做一个模块
2.包就是一个存放有__init__.py文件的文件夹,包的本质就是一个模块

模块的三种来源

1.自带的    内置    标准库2.第三方的    pip3 install 第三方库3.自定义的

导入模块

首次导入模块发生了两件事

import spam
1.会触发spam.py的运行,同时会在内存中产生一个模块的名称空间,用来存放模块运行过程中产生的名字
2.会在当前文件的名称空间中产生一个名字spam,该名字指向模块的名称空间
# 后续的导入引用之前已经产生的名称空间

整体流程

名称空间的关系是在定义阶段生成的,与调用阶段没关系

spam.money  # 指名道姓的问spam里的money
spam.read1()  # 指名道姓的执行spam里的read1函数
被调用模块内的参数只能调用该模块文件内的数据

import语法

import指向大空间,里面包含了你需要的模块

起别名
import spam as a  # 给spam起别名叫a
import spam as a,os as b

一行导入多个
import spam,os

使用时需要加上前缀,例如:spam.money

from ... import ...语法

from ... import ...直接指向你需要的模块

from spam import money
使用时不需要加前缀

如果在调用money后再给money定义,新的定义会覆盖掉之前的调用

from spam import *
将模块内全部调用
# 极易容易与当前变量冲突
在模块内写入:__all__ = ['money','read1']  # 列表内输入字符串格式的变量名
再调用from spam import *,只能导入__all__内的内容

循环导入问题

'''!!!尽量不要使用循环导入!!!'''
例子:
有个m1.py文件,内容是:
    from m2 import y
    print(y)
    x = 3
有个m2.py文件,内容是:
    from m1 import x
    print(x)
    y = 4
此时在一个新的py文件内import m1
此时会报错

导入具体流程:
    新的py文件import m1,导入时会触发m1.py的运行,m1.py运行时第一行代码是from m2 import y,又触发了m2的运行,此时要等m2运行完毕后m1才会运行下一步内容,所以此时m1只有from m2 import y这一行代码,但是m2的运行需要调用m1的x变量,此时m1已经存在内存里了,所以m2直接问内存的m1要x变量,很显然要不到,所以报错
    
解决方法1:
    将m2需要的x代码放在导入m2之前
解决方法2:
    将导入m2那串代码变成函数
    
最好的解决方法:
    不使用循环导入,将需要被两边调用的值放进另一个模块内
    m1导入os模块,添加代码os.environ['x']=str(x)
    m2导入os模块,添加代码os.environ['y']=str(y)
    这时就会将xy放进共用的os模块内

模块搜索路径

模块搜索路径,优先级从高到低
1.内存
2.内置
3.sys.path(环境变量的一种,是个文件夹,里面包含了很多文件夹)
sys.path内的第一个文件夹就是当前执行程序的文件夹

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

正确使用自定义模块:
    sys.path.append(r'导入模块的路径')
    将需要的模块导入到环境变量
    
如果需要的模块在当前文件夹的某个文件夹内:
    from aaa.bbb.ccc import spam
    .是文件路径分隔符,指导入当前路径下aaa内bbb内ccc内的spam

name

__name__是一个内置的函数,如果该文件被运行了,__name__='__main__',通常用在自动启动模块内参数:
    if __name__=='__main__':
        f1()

标签:__,name,spam,python,day26,笔记,导入,模块,import
来源: https://www.cnblogs.com/Milu-Mi/p/14974332.html