我正在尝试归档一个由于我不擅长Python元编程而变得有点复杂的任务.
我想要一个locations带有函数的模块get_location(name),它返回一个在文件夹的位置/中定义的类,其名称传递给function.类的名称类似于NameLocation.
所以,我的文件夹结构:
program.py
locations/
__init__.py
first.py
second.py
Run Code Online (Sandbox Code Playgroud)
program.py将与:
from locations import get_location
location = get_location('first')
Run Code Online (Sandbox Code Playgroud)
和location是在first.py中定义的类,如下所示:
from locations import Location # base class for all locations, defined in __init__ (?)
class FirstLocation(Location):
pass
Run Code Online (Sandbox Code Playgroud)
等等
好吧,我已经尝试了很多导入和getattribute语句,但现在我感到无聊和投降.如何归档这种行为?
我不知道为什么,但这个代码
def get_location(name):
module = __import__(__name__ + '.' + name)
#return getattr(module, titlecase(name) + 'Location')
return module
Run Code Online (Sandbox Code Playgroud)
回报
>>> locations.get_location( 'first')
<module 'locations' from 'locations/__init__.py'>
Run Code Online (Sandbox Code Playgroud)
位置模块!为什么?!
给出模块名称列表(例如mymods = ['numpy','scipy',...])如何检查模块是否可用?
我试过以下但是不正确:
for module_name in mymods:
try:
import module_name
except ImportError:
print "Module %s not found." %(module_name)
Run Code Online (Sandbox Code Playgroud)
谢谢.
我将一个大的monolothic python文件分成六个独立的子模块.
最初在onebigfile.py中,我有
conn = MySqldb.connect()
c = conn.cursor()
Run Code Online (Sandbox Code Playgroud)
然后一个函数将使用它:
def getFromDB():
c.execute(sql)
Run Code Online (Sandbox Code Playgroud)
现在,我已将模块重组为
NewModule/
__init__.py
users.py
accounts.py
sixmoreofthese.py
Run Code Online (Sandbox Code Playgroud)
令我困惑的是如何处理像我的MySQL连接这样的半稀缺资源.
有没有办法访问父命名空间,例如conn.,c.可以放入__init__.py?我不想实例化MySQL的一大堆连接.只是将它们转储到那里并调用它们就像它们是全局命名空间的一部分一样不起作用..那就是:
__init__.py:
conn = MySqldb.connect()
c = conn.cursor()
> import NewModule
> NewModule.users.login('a','b')
--- login function calls the Mysql c. from the global namespace and can't find it.
Run Code Online (Sandbox Code Playgroud)
预测一个建议:拆分这些文件是有意义的 - 大约有50-75k的python,以及一群需要使用代码的人,还有非常明确的概念性功能组合.
我在两个不同的模块中有两个课程:
animal.pymonkey.pyanimal.py:
import json
class Animal(object):
pass
Run Code Online (Sandbox Code Playgroud)
猴:
import animal
class Monkey(animal.Animal):
def __init__(self):
super(Monkey, self).__init__()
# Do some json stuff...
Run Code Online (Sandbox Code Playgroud)
当我尝试实例化a时Monkey,我得到了一个
NameError: global name 'json' is not defined
Run Code Online (Sandbox Code Playgroud)
但我正在导入json超类的定义模块,为什么不加载?
我有一个modules.py文件:
global dns_server_ip
def SetVnetGlobalParameters():
dns_server_ip = '192.168.3.120'
Run Code Online (Sandbox Code Playgroud)
我在abc.py文件中导入此文件
from modules import *
SetVnetGlobalParameters()
print(dns_server_ip)
Run Code Online (Sandbox Code Playgroud)
但'dns_server_ip'仍无法访问.
我想通过Function设置全局参数.任何帮助将不胜感激!谢谢..
这是我的包层次结构
app
|--__init__.py //Empty file
|--server.py
|--global_vars.py
|
|--handlers
|--__init__.py //Empty file
|
|--url1
| |--__init__.py //Empty file
| |--app1.py
| |--app2.py
|
|--url2
|--__init__.py //Empty file
|--app3.py
Run Code Online (Sandbox Code Playgroud)
现在我想在global_vars.py里面导入app1.py.所以我给了
import app.global_vars.pyapp1.py.
但是我收到以下错误:
import app.global_vars
ImportError: No module named app.global_vars
Run Code Online (Sandbox Code Playgroud)
我还要提一下,我从server.py导入app1.py.server.py是我实际运行的文件.当server.py导入app1.py时,app1.py尝试导入global_vars.py,我得到上面提到的错误
我在这做错了什么?
最近我注意到使用模块是保持我的python编程整洁的好选择.为了开始,我创建了一个模块(名为oop.py),其中包含一个类,如下所示:
#Module named oop
class Team:
def __init__(self):
print "class Team initialized"
def displayTeam(self):
print "Team name: ", self.name, ",Rank :" , self.rank
def setTeam(self,name,rank):
self.name = name
self.rank = rank
t1 = Team()
t1.setTeam("Man-Utd", 1)
t1.displayTeam()
Run Code Online (Sandbox Code Playgroud)
根据python文档,如果我们想要使用模块中的特定属性,那么我们使用<from module_name> import <attribute>.我只想加载"班级队"
在另一个python代码(名为oop1.py)中,我只是导入了上面的模块.oop.py如下所述:
#This is oop1.py.
#Importing module oop
from oop import Team
Run Code Online (Sandbox Code Playgroud)
python oop1.py终端的输出是:
class Team initialized
Team name: Man-Utd ,Rank : 1
Run Code Online (Sandbox Code Playgroud)
通过声明from oop import Team,我期望只加载类定义.为什么t1 = Team()
t1.setTeam("Man-Utd", 1)
t1.displayTeam()
来自oop.py的额外行会被执行?
模块中是否允许初始化?如果我只想要类Team结构而不是模块的其他内容,我该怎么办?如果我在某处错了,请告诉我.
经过一次太多次意外输入import datetime真正需要的东西后from datetime import datetime,我想知道是否有可能破解并使前者做后者.
也就是说,要重新创建此行为(在新打开的解释器会话中):
$ python -ic ''
>>> import datetime
>>> datetime(2016, 5, 27)
datetime.datetime(2016, 5, 27, 0, 0)
Run Code Online (Sandbox Code Playgroud)
非常接近伪造下面的"可调用模块":
>>> import dt
>>> dt(2016, 5, 27)
datetime.datetime(2016, 5, 27, 0, 0)
Run Code Online (Sandbox Code Playgroud)
这是这样实现的:
# dt.py
import sys
import datetime
class CallableModule(object):
def __init__(self, thing):
self.thing = thing
def __call__(self, *args, **kwargs):
return self.thing.__call__(*args, **kwargs)
sys.modules['dt'] = CallableModule(datetime.datetime)
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用datetime.py模块的文件名,它就不起作用了,当我自己的文件也被调用时,我还没有找到任何黑客来获取内置的datetime模块datetime.py.
我们如何从影子模块本身暂时取消隐藏内置或网站包模块?datetime在这种情况下是否有任何间接的方式来获取核心(可能类似于我们仍然可以访问,sys.__stdout__即使sys.stdout已被重定向)?
免责声明:绝不表示这是一个理智的想法 …
是否有任何方法可以从Python配置CMD模块,即使在交互式shell关闭后仍保留持久历史记录?
当我按下向上和向下键时,我想访问先前在我运行python脚本以及我刚刚在此会话期间输入的脚本时先前输入shell的命令.
如果其任何帮助cmd使用set_completer从readline模块导入
"ModuleNotFoundError: No module named 'blog'"将我的博客应用添加到的INSTALLED_APPS部分时出现错误settings.py。我确定这与我在INSTALLED_APPS下添加“博客”应用程序的方式有关。当我从INSTALLED_APPS错误中删除“博客”引用时,该引用就会消失。似乎Django无法找到我的博客应用程序的目录?
我做了另一件事,那就是使用:
python manage.py startapp blog /myproject
Run Code Online (Sandbox Code Playgroud)
此处的区别是指定/myproject目录,而不使用:
python manage.py startapp blog
Run Code Online (Sandbox Code Playgroud)
它将放置在根目录下myproject。我想避免在根文件夹中添加应用程序目录,以便保持井井有条。但是看起来Django不喜欢这个,或者我在本INSTALLED_APPS节中没有正确引用这个?
我的项目目录如下:
myproject/
??? myproject
? ??? __init__.py
? ??? __pycache__
? ? ??? __init__.cpython-36.pyc
? ? ??? settings.cpython-36.pyc
? ? ??? urls.cpython-36.pyc
? ? ??? wsgi.cpython-36.pyc
? ??? blog
? ? ??? __init__.py
? ? ??? admin.py
? ? ??? apps.py
? ? ??? migrations
? ? ? ??? __init__.py …Run Code Online (Sandbox Code Playgroud) python ×10
python-module ×10
django ×1
installation ×1
module ×1
namespaces ×1
package ×1
python-2.7 ×1
python-cmd ×1
readline ×1
scope ×1