我最近开始学习Python,我有两个与模块有关的问题.
所以这只是一个简单的问题.在python中导入模块时,这有什么区别:
from module import a, b, c, d
Run Code Online (Sandbox Code Playgroud)
还有这个
from module import a
from module import b
from module import c
from module import d
Run Code Online (Sandbox Code Playgroud)
对我而言总是有意义地压缩代码并使用第一个例子,但是我已经看到了一些代码样本.是否存在任何差异,还是程序员的偏好?
我有以下目录:
mydirectory
??? __init__.py
??? file1.py
??? file2.py
Run Code Online (Sandbox Code Playgroud)
我有一个在file1.py中定义的函数f.
如果,在file2.py中,我这样做
from .file1 import f
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
SystemError:父模块''未加载,无法执行相对导入
为什么?以及如何使它工作?
我的脚本的父目录中有一个模块,我想'使用'它.
如果我做
use '../Foo.pm';
Run Code Online (Sandbox Code Playgroud)
我得到语法错误.
我试着这样做:
push @INC, '..';
use EPMS;
Run Code Online (Sandbox Code Playgroud)
并且..显然没有出现在@INC中
我要疯了!这有什么不对?
我有以下Perl代码,它依赖于Term::ReadKey获取终端宽度; 我的NetBSD版本缺少此模块,因此我希望在模块丢失时将终端的宽度默认为80.
我无法弄清楚如何有条件地使用模块,提前知道它是否可用.我当前的实现只是退出一条消息,说它无法找到Term::ReadKey它是否缺席.
#/usr/pkg/bin/perl -w
# Try loading Term::ReadKey
use Term::ReadKey;
my ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
my @p=(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97);
my $plen=$#p+1;
printf("num |".("%".int(($wchar-5)/$plen)."d") x $plen."\n",@p);
Run Code Online (Sandbox Code Playgroud)
我在NetBSD上使用Perl 5.8.7,在CygWin上使用5.8.8你能帮我更有效地将它实现到我的脚本中吗?
究竟是什么模块?模块,类和函数之间有什么区别?如何在C#中访问模块?
我问这个是因为我想在运行时计算一些特定函数的IL代码的校验和(不使用代码签名).
为什么Python不允许模块有__call__?(显而易见的是,直接导入并不容易.)具体来说,为什么不使用a(b)语法找到__call__属性,就像它对函数,类和对象一样?(模块的查找是否不相同?)
>>> print(open("mod_call.py").read())
def __call__():
return 42
>>> import mod_call
>>> mod_call()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
>>> mod_call.__call__()
42
Run Code Online (Sandbox Code Playgroud) 在一些__init__.py模块文件中,我看到了这样的单行:
__import__('pkg_resources').declare_namespace(__name__)
Run Code Online (Sandbox Code Playgroud)
它做了什么以及为什么人们使用它?假设它与在运行时动态导入和创建命名空间有关.
我有两个特定的情况,我不明白导入如何在Python中工作:
第一个具体情况:
当我在两个不同的Python脚本中导入相同的模块时,模块不会导入两次,对吧?Python第一次遇到它时,会导入它,第二次检查模块是否已导入,还是复制了?
第二个具体情况:
考虑以下模块,称为bla.py:
a = 10
Run Code Online (Sandbox Code Playgroud)
然后,我们有foo.py一个导入的模块bla.py:
from bla import *
def Stuff ():
return a
Run Code Online (Sandbox Code Playgroud)
之后,我们有一个名为的脚本bar.py,由用户执行:
from foo import *
Stuff() #This should return 10
a = 5
Stuff()
Run Code Online (Sandbox Code Playgroud)
在这里我不知道:Stuff()返回10还是5?