- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下是3个模块,
point.py
segment.py
矩形.py
,
其中 rectangle.py
模块从 segment.py
模块导入函数对象,如上所述,
从段导入 get_size
。
# point.py
# Representation - start
from operator import sub, mul
from math import sqrt
#Constructor
def make_point(x, y):
return (x, y)
#Selector
def x_coordinate(point):
return point[0]
#Selector
def y_coordinate(point):
return point[1]
#Selector
def distance_between_points(p1, p2):
return sqrt(square(sub(p1[0],p2[0])) + square(sub(p1[1],p2[1])))
#helper for selector
def square(a):
return mul(a, a)
#Representation - end
#Use - start
def get_x_coordinate(point):
return x_coordinate(point)
def get_y_coordinate(point):
return y_coordinate(point)
#Use - end
<小时/>
# segment.py
# Representation - start
from point import distance_between_points, make_point, get_x_coordinate, get_y_coordinate
#Constructor
def make_segment(point1, point2):
return (point1, point2)
#Selector
def start_segment(lineSegment):
return lineSegment[0]
#Selector
def end_segment(lineSegment):
return lineSegment[1]
#Representation - end
#Use -start
def midpoint_segment(lineSegment):
return make_point((get_x_coordinate(start_segment(lineSegment)) + get_x_coordinate(end_segment(lineSegment)))/2, (get_y_coordinate(start_segment(lineSegment)) + get_y_coordinate(end_segment(lineSegment)))/2)
def get_size(lineSegment):
return distance_between_points(start_segment(lineSegment), end_segment(lineSegment))
#Use - end
#Driver code from user
p1 = make_point(1,2)
p2 = make_point(3, 4)
line = make_segment(p1, p2)
midpoint = midpoint_segment(line)
print(midpoint)
<小时/>
# rectangle.py
# Representation - start
from point import make_point, get_x_coordinate, get_y_coordinate
from segment import get_size
from operator import sub, abs
#Constructor
def make_rectangle(p1, p2, p3, p4):
if are_opposite_sides_equal(p1, p2, p3, p4):
return (p1, p2, p3, p4)
#Helper for constructor
def are_opposite_sides_equal(p1, p2, p3, p4):
if (abs(sub(get_x_coordinate(p1), get_x_coordinate(p2))) == abs(sub(get_x_coordinate(p3), get_x_coordinate(p4)))) and (abs(sub(get_y_coordinate(p2), get_y_coordinate(p3))) == abs(sub(get_y_coordinate(p1), get_y_coordinate(p4)))):
return True
else:
return False
#Selector
def get_length_side_segment(quadruple):
return (quadruple[0], quadruple[1])
#Selector
def get_breadth_side_segment(quadruple):
return (quadruple[1], quadruple[2])
#Representation - end
#Use -start
def perimeter(rectangle):
segment1 = get_length_side_segment(rectangle)
segment2 = get_breadth_side_segment(rectangle)
length = get_size(segment1)
breadth = get_size(segment2)
return 2 * (length + breadth)
def area(rectangle):
segment1 = get_length_side_segment(rectangle)
segment2 = get_breadth_side_segment(rectangle)
length = get_size(segment1)
breadth = get_size(segment2)
return (length * breadth)
#Use - end
#Driver code from user
p1 = make_point(1, 1)
p2 = make_point(3, 1)
p3 = make_point(3, 3)
p4 = make_point(1, 3)
rectangle = make_rectangle(p1, p2, p3, p4)
peri = perimeter(rectangle)
area_value = area(rectangle)
print(peri)
print(area_value)
<小时/>
我的问题:
根据rectangle.py
的调试,from segment import get_size
行使 segment.py
的驱动程序代码执行并给出输出 (2.0, 3.0)
。
我正在使用此语句来访问 get_size
。我想了解,函数对象的导入如何给出此输出?
最佳答案
在 python 中导入模块基本上意味着您将它们作为脚本执行。这两种情况都会发生,即使您说 import foo
或 from foo import bar
。 Python 需要运行 foo
才能找到函数 bar
。
在第一种情况(import foo
)中,您可以访问完整的命名空间,即您可以使用 foo.getsize()
或 foo.bar( )
或您的模块提供的任何函数、对象或其他内容。而在后一种情况(from foo import bar
)中,您仅将函数 bar
导入到当前命名空间中,即您只能使用 bar()
>,但不是 getsize()
,例如。
此外,有一种简单的方法可以让 python 执行模块的部分内容,当且仅当该模块作为主模块运行时,而不(如果它是导入的)。例如,在 segment.py
中,您可以在脚本末尾编写以下内容:
def main()
#Driver code from user
p1 = make_point(1,2)
p2 = make_point(3, 4)
line = make_segment(p1, p2)
midpoint = midpoint_segment(line)
print(midpoint)
if __name__ == '__main__':
main()
首先,我们定义一个main
函数。 main
函数仅在语句 __name__ == '__main__'
为 True
时被调用。这是什么意思?嗯,__name__
是模块本身的固有变量。每次通过 pythonegment.py
运行模块或通过 importsegment
或通过 fromsegmentimportsomething
导入模块时,此变量的设置都不同。
如果您通过python segment.py
运行该模块,__name__
等于字符串'__main__'
。如果导入模块,__name__
将设置为模块的名称,此处为 'segment'
。因此,您可以轻松区分模块是作为主文件运行还是只是由另一个文件导入。
编辑:
详细了解为什么 from foo import bar
需要完全执行 foo
!?
如果Python没有执行foo
,Python如何知道该模块包含函数bar
? Python 是一种解释性语言,因此函数和其他对象实际上仅在运行时从源代码创建。
但是,Python 足够智能,只需执行一次脚本。因此,foo
的其他几个导入(即使在其他脚本中)也不需要重新执行您的模块,因为 foo 的命名空间已经建立。这种行为有一些优点,可以让您在运行时自由修改任何模块/包(也可以来自其他人)。因此,如果您知道自己在做什么,则可以对任何导入模块的函数和对象进行猴子修补。这些修改可能会影响程序的整个范围(包括导入修改后的库的所有其他模块和脚本)。请注意,这通常很危险,但有时却非常有用。
无论如何,THIS也可能是一本有用的读物。
/编辑。
关于python - python中导入模块的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28938831/
我最近在我的机器上安装了 cx_Oracle 模块,以便连接到远程 Oracle 数据库服务器。 (我身边没有 Oracle 客户端)。 Python:版本 2.7 x86 Oracle:版本 11.
我想从 python timeit 模块检查打印以下内容需要多少时间,如何打印, import timeit x = [x for x in range(10000)] timeit.timeit("
我盯着 vs 代码编辑器上的 java 脚本编码,当我尝试将外部模块包含到我的项目中时,代码编辑器提出了这样的建议 -->(文件是 CommonJS 模块;它可能会转换为 ES6 模块。 )..有什么
我有一个 Node 应用程序,我想在标准 ES6 模块格式中使用(即 "type": "module" in the package.json ,并始终使用 import 和 export)而不转译为
我正在学习将 BlueprintJS 合并到我的 React 网络应用程序中,并且在加载某些 CSS 模块时遇到了很多麻烦。 我已经安装了 npm install @blueprintjs/core和
我需要重构一堆具有这样的调用的文件 define(['module1','module2','module3' etc...], function(a, b, c etc...) { //bun
我是 Angular 的新手,正在学习各种教程(Codecademy、thinkster.io 等),并且已经看到了声明应用程序容器的两种方法。首先: var app = angular.module
我正在尝试将 OUnit 与 OCaml 一起使用。 单元代码源码(unit.ml)如下: open OUnit let empty_list = [] let list_a = [1;2;3] le
我在 Angular 1.x 应用程序中使用 webpack 和 ES6 模块。在我设置的 webpack.config 中: resolve: { alias: { 'angular':
internal/modules/cjs/loader.js:750 return process.dlopen(module, path.toNamespacedPath(filename));
在本教程中,您将借助示例了解 JavaScript 中的模块。 随着我们的程序变得越来越大,它可能包含许多行代码。您可以使用模块根据功能将代码分隔在单独的文件中,而不是将所有内容都放在一个文件
我想知道是否可以将此代码更改为仅调用 MyModule.RED 而不是 MyModule.COLORS.RED。我尝试将 mod 设置为变量来存储颜色,但似乎不起作用。难道是我方法不对? (funct
我有以下代码。它是一个 JavaScript 模块。 (function() { // Object var Cahootsy; Cahootsy = { hello:
关闭。这个问题是 opinion-based 。它目前不接受答案。 想要改进这个问题?更新问题,以便 editing this post 可以用事实和引文来回答它。 关闭 2 年前。 Improve
从用户的角度来看,一个模块能够通过 require 加载并返回一个 table,模块导出的接口都被定义在此 table 中(此 table 被作为一个 namespace)。所有的标准库都是模块。标
Ruby的模块非常类似类,除了: 模块不可以有实体 模块不可以有子类 模块由module...end定义. 实际上...模块的'模块类'是'类的类'这个类的父类.搞懂了吗?不懂?让我们继续看
我有一个脚本,它从 CLI 获取 3 个输入变量并将其分别插入到 3 个变量: GetOptions("old_path=s" => \$old_path, "var=s" =
我有一个简单的 python 包,其目录结构如下: wibble | |-----foo | |----ping.py | |-----bar | |----pong.py 简单的
这种语法会非常有用——这不起作用有什么原因吗?谢谢! module Foo = { let bar: string = "bar" }; let bar = Foo.bar; /* works *
我想运行一个命令: - name: install pip shell: "python {"changed": true, "cmd": "python <(curl https://boot
我是一名优秀的程序员,十分优秀!