ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python学习day26笔记

2021-07-05 21:02:46  阅读:176  来源: 互联网

标签:__ name spam python day26 笔记 导入 模块 import


匿名函数

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

为何要用匿名函数

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

如何定义匿名函数

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有