有人能为我提供一个导入整个模块目录的好方法吗?
我有这样的结构:
/Foo
bar.py
spam.py
eggs.py
Run Code Online (Sandbox Code Playgroud)
我尝试通过添加__init__.py和执行将其转换为包,from Foo import *但它没有按照我希望的方式工作.
我想知道代码片段之间是否有任何区别
from urllib import request
Run Code Online (Sandbox Code Playgroud)
和片段
import urllib.request
Run Code Online (Sandbox Code Playgroud)
或者它们是否可以互换.如果它们是可互换的,那就是"标准"/"首选"语法(如果有的话)?
谢谢!
我在Visual Studio 2013中运行Python 2.7.代码以前在Spyder中运行正常,但是当我运行时:
import numpy as np
import scipy as sp
import math as mt
import matplotlib.pyplot as plt
import Image
import random
# (0, 1) is N
SCALE = 2.2666 # the scale is chosen to be 1 m = 2.266666666 pixels
MIN_LENGTH = 150 # pixels
PROJECT_PATH = 'C:\\cimtrack_v1'
im = Image.open(PROJECT_PATH + '\\ST.jpg')
Run Code Online (Sandbox Code Playgroud)
我最终得到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\cimtrack_v1\PythonApplication1\dr\trajgen.py", line 19, in <module>
im = Image.open(PROJECT_PATH + '\\ST.jpg') …Run Code Online (Sandbox Code Playgroud) 假设您有一个包含大量变量,函数和子例程的Fortran 90模块.在您的USE陈述中,您遵循哪种惯例:
, only :语法显式声明您正在使用哪些变量/函数/子例程,例如 USE [module_name], only : variable1, variable2, ...?USE [module_name]?一方面,该only子句使代码更加冗长.但是,它会强制您在代码中重复自己,如果您的模块包含许多变量/函数/子例程,那么事情就会开始变得难以驾驭.
这是一个例子:
module constants
implicit none
real, parameter :: PI=3.14
real, parameter :: E=2.71828183
integer, parameter :: answer=42
real, parameter :: earthRadiusMeters=6.38e6
end module constants
program test
! Option #1: blanket "use constants"
! use constants
! Option #2: Specify EACH variable you wish to use.
use constants, only : PI,E,answer,earthRadiusMeters
implicit none …Run Code Online (Sandbox Code Playgroud) 我看过以下帖子:
我只是想知道如何知道何时将我的代码分解为多个文件而不是将多个函数放在一个文件中?我的具体问题是我有一个100行的函数,我想在另一个函数的for循环中调用.此外,什么时候脚本执行?导入它们时,还是在调用它们时?
注意:以下答案已完全解决了问题.谢谢!
我知道可以在Python中跨模块共享全局变量.但是,我想知道这可能的程度和原因.例如,
global_mod.py
x = None
Run Code Online (Sandbox Code Playgroud)
mid_access_mod.py
from global_mod import *
class delta:
def __init__(self):
print x
Run Code Online (Sandbox Code Playgroud)
bot_modif_mod.py
import mid_access_mod
import global_mod
class mew:
def __init__(self):
global_mod.x = 5
def main():
m = mew()
d = mid_access_mod.delta()
Run Code Online (Sandbox Code Playgroud)
即使所有模块共享全局变量x,也会打印None.为什么会这样?似乎x在mid_access_mod.py中被评估,然后由mew()在bot_modif_mod.py中分配.
我只是继承了一些让我感到不安的代码:有一个测试库,其中包含与我们网站上的网页相对应的类,每个网页类都有自动化该页面功能的方法.
有一些方法可以单击页面之间的链接,返回链接页面的类.这是一个简化的例子:
文件homePageLib.py:
class HomePage(object):
def clickCalendarLink(self):
# Click page2 link which navigates browswer to page2
print "Click Calendar link"
# Then returns the page2 object
from calendarLib import CalendarPage
return CalendarPage()
Run Code Online (Sandbox Code Playgroud)
文件calendarLib.py:
class CalendarPage(object):
def clickHomePageLink(self):
# Click page1 link which navigates browswer to page1
print "Click Home Page link"
# Then return the page2 object
from homePageLib import HomePage
return HomePage()
Run Code Online (Sandbox Code Playgroud)
然后,这允许脚本文件单击页面并将该对象作为该方法的返回值,这意味着脚本作者不必在浏览站点时保持实例化新页面.(我觉得这是一个奇怪的设计,但我不能完全理解为什么,除此之外,有一个名为'clickSomeLink'的方法并返回结果页面的对象似乎很奇怪.)
以下脚本说明了脚本如何在站点中导航:(我插入print page以显示页面对象如何更改)
脚本文件:
from homePageLib import HomePage
page = HomePage()
print page
page = …Run Code Online (Sandbox Code Playgroud) 如果我要导入一些名为modx的模块,那么与说法有何不同
from modx import *
Run Code Online (Sandbox Code Playgroud)
不是所有内容都是从每种方式导入的吗?这只是为了澄清而在python中.
在Python中,我不太清楚以下两行代码之间的区别:
import X
Run Code Online (Sandbox Code Playgroud)
要么
from X import *
Run Code Online (Sandbox Code Playgroud)
难道他们都不是从模块X导入所有内容吗?有什么不同?
我总是想知道为什么从模块导入特定对象的语法from module import x, y, z不是import x, y, z from module.我不是母语,但后者不是更正确/更自然吗?
那么,从第一个开始的原因是什么?它只是简化语法(需要更少的前瞻)?是否试图使两种进口在视觉上更加鲜明?或者这是其中一种显而易见的方式,"除非你是荷兰人,否则一开始并不明显"?;)
python ×9
import ×4
module ×4
syntax ×2
conventions ×1
difference ×1
fortran ×1
fortran90 ×1
function ×1
pageobjects ×1
scope ×1