python怎么加包流量_python 模块与包的引用及移动绑定

""" 注意只要是调用模块,就是创建新名称空间,并在此新的名称空间下执行原模块文件里定义的所有代码

多模块导入,可以逗号来分 (import re,sys )可以为模块定义别名咯 import spam as pi ,调用时就用pi.名字

1.为源文件(spam模块)创建新的名称空间,在spam中定义的函数和方法若是使用到了global时访问的就是这个名称空间。

2.在新创建的命名空间中执行模块中包含的代码

3.创建名字spam来引用该命名空间

4 事实上函数定义也是“被执行”的语句,模块级别函数定义的执行将函数名放入模块全局名称空间表,用globals()可以查看

print(globals())

'__name__': '__main__', '__cached__': None, 'getMoney': ,

'getFunc': , '__builtins__': , 'money': 1000, '__loader__': <_frozen_importlib_external.sourcefileloader object at>}

模块调用

A. import spam,会将源文件的名称空间'spam'带到当前名称空间中,使用时必须是spam.名字的方式(注意中import 后的那个名字 如果有点,则点左边只能是包名)

B. from 语句相当于import,也会创建新的名称空间,但是将spam中的名字直接导入到当前的名称空间中, 在当前名称空间中,直接使用名字就可以了

(注意啊,from 后面紧接只能包名,然后import名字不能有点啊,只能是名字 (当前有重名getMoney或者getFunc,那么会有覆盖效果)

支持别名:from spam import getMoney as gm from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置, 大部分情况下我们的python

程序不应该使用这种导入方式,因为*你不知道你导入什么名字, 很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题 # """

1 #spam.py

2 print('from module spam')3 money = 1000

4 y = 100

5 defgetMoney():6 print('get-->spam -->getmoney')7 print(money)8 defgetFunc():9 getMoney()10 defchange():11 print('get->spam-->change')12 globalmoney13 money =014 print("当前money :%s"%money)15 #可以使用__all__来控制*(用来发布新版本)

16 __all__= ['getMoney','money','y']17 #这样在另外一个文件中用from spam import *就这只能导入列表中规定的两个名字而不是全部

#testspam.py如下 :

1 importspam2 money = 1118

3 spam.getMoney()4 spam.getFunc()5 spam.change()

输出结果

from  module spam

get-->spam -->getmoney

1000

get-->spam -->getmoney

1000

get->spam-->change

当前money :0

练习:

要求一:保证包keystone可以在任意位置被导入

要求二:import keystone,然后就可以直接调用keystone.create和keystone.UserAuthInfo

1 创建如下目录结构2 keystone/

3 ├── __init__.py4 └── auth5 ├── __init__.py6 └── plugins7 └── core.py8

9 core.py内容为:

1 defcreate(cls, auth_payload, method_name):2 pass

3 classUserAuthInfo:4 def __init__(self):5 self.password =None6 print('hello i core--->userauthinfo--->init')

文件目录结构:

1 #plugins/__init__.py

2 from . importcore3 print('auth-->plugins-->init')

1 #keystone/__init__.py

2 from .auth.plugins.core importcreate3 from .auth.plugins.core import UserAuthInfo

1 #auth/__init__.py

2 from . import plugins

下面来测试:

1 importos,sys2 base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))3 print(base_dir)4 sys.path.append(base_dir)5 #from aaaaa import keystone

6 importkeystone7 keystone.create(keystone.UserAuthInfo,'gi','ddd')8 keystone.UserAuthInfo()

结果:

auth-->plugins-->init

hello i core--->userauthinfo--->init

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

如何基于移动方式绑定:

1 importos,sys

2 base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

3 #添加包的查找路径

4 sys.path.append(base_dir)

5 from aaaaa import keystone #从新路么下引入这个包

6 #import keystone

7 keystone.create(keystone.UserAuthInfo,'gi','ddd')

8 keystone.UserAuthInfo()

注意:其实只要知道__init__.py巧用,不管模块藏哪,都可以找到那个对应模块。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值