第十五天

Posted xueba

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十五天相关的知识,希望对你有一定的参考价值。

动态获取函数名

def wrapper():
    pass
def aa(f):
    print(f.__name__)
aa(wrapper)

自定义模块

什么是模块:

本质就是py文件,封装语句的最小单位,一个py文件就是一个模块

自定义模块:

实际上就是定义py,其中可以包含:定义变量,可执行语句,for 循环 函数定义 等等 他们统称模块的成员

模块的运行方式:

1.脚本模式

直接用解释器执行.或者pycharm中右键运行

2.被其他模块导入

为导入它的模块提供资源(变量,函数定义,)

//自定义模块被其他模块导入时,其中的可执行语句会立即执行

_ _ name _ _ 属性的使用

脚本方式运行时 _ _name 固定的字符串 : main__

以导入方式运行时 _ _name__就是本模块名字

if __name__ =="__main__":   #测试阶段
if __name__ =="a":        #模块调用阶段
    print("我是模块")

系统导入模块的路径 3个

如果三个都找不到,报错

  • 内存中:如果之前成功的倒入过某个模块, 直接使用已存在的模块

  • 内置路径下: 安装路径下:lib 下载 的 :site-packages

  • sys.path : 是一个路径的列表

    ? 查看 sys.path的内容

      import sys:
    
              print(sys.path)

添加a.py 所在路径到 sys.path中

import sys:

    print(sys.path)
    
sys.path.append(r'd:python_22day15aa')  #绝对位置

#使用相对位置找aa文件夹

print(__file__)  #当前文件的绝对路径
使用OS模块获取一个路径的父路径
import os
import sys
print(os.path.dirname(__file__)+"/aa")

###直接出来 d:python_22day15aa
            
    
sys.path.append(os.path.dirname(__file__)+"/aa")
    
    

导入模块的多种方式

import xxx :

导入模块的所有成员

import xx.bbb:

一次性导入多个模块的成员,不推荐这种写法 分开写

(一荣俱荣一焚俱焚)

from xxx import a:

从某个模块当中导入指定成员

from xxx import a,b,c:

从某个模块中导入多个成员

from xx import *:

从模块中导入所有成员

起别名 import a as ccc

原名字 a

新名字 ccc

import xxx :和 from xx import *: 的区别

第一种方式 使用成员时,必须使用模块名作为前缀

不容易产生命名冲突

第二种方式在使用成员时,不使用模块名字作为前缀

直接使用成员名.但容易产生冲突.在后定义的成员生效

(把前面的覆盖了)

怎么解决名称冲突

  • 改用import xxx

  • 避免使用同名

    使用别名解决 alias

    ? from a import ck as t:

    各成员起别名,避免名称冲突

    给模块起别名,目的简化书写

from xx import *:控制成员被导入

默认情况下,所有成员都会被导入

_ _all__ 是一个列表, 用于表示本模块可以被外界使用的成员.元素是成员的字符串

**使用_ _all__ 控制那些成员外界可以使用**

_ _all__ 只对 from xx import * 生效 其他方式不生效


def ck():
    print("ckckck")

def ck1():
    print("ckckck")

def ck2():
    print("ckckck")

def ck2():
    print("ckckck")

a=10
b=20

__all__=["ck","ck1","a"]

?

相对导入---成功了

////简单来说

asd 引用了zxc 然后c调用asd

a中使用(. .. ...) 不能直接使用的!!!!!!!

asd.py

from .zxc import *
age2=10
zxc.py

def ccc():
    print("asdas")
    pass
c.py

from test  import asd
print(asd.age2)

asd.ccc()

次模块作为对外引用的入口

相对导入同项目下的模块

from..z import zz

相对路径:包含了点号的相对路径

. 表示的是当前的路径。

..表示的是父路径。

...表示的是父路径的父路径。

    注意相对导入不能再执行文件中使用
    相对导入只能在被导入的模块中使用,使用相对导入 就不需要考虑
    执行文件到底是谁 只需要知道模块与模块之间路径关系
"""

常用模块:random

随机数

random.random() [0,1) 0取到 1取不到

random.randint(a,b) [a,b] ab 都取到

random.uniform(a,b) [a,b) a 取到 b 取不到

random.shuffle(x) 把参数指定的数据中的元素打乱 参数必须是一个可变的数据类型

import random
lst=list(range(1,10))
random.shuffle(lst)
print(lst)

random.sample(x,k) 从x中抽取k个数据,组成一个列表返回

import random
lst=list(range(1,10))
print(random.sample(lst, 3))

以上是关于第十五天的主要内容,如果未能解决你的问题,请参考以下文章

团队冲刺第十五天

寒假每日一题总结(第十五天)

第十五天:模块

CTF misc 第十五天

javaSE第十五天

河北重大技术需求开发第七版开发第十五天