怎么if __name__ == "__main__":
办?
# Threading example
import time, thread
def myfunction(string, sleeptime, lock, *args):
while True:
lock.acquire()
time.sleep(sleeptime)
lock.release()
time.sleep(sleeptime)
if __name__ == "__main__":
lock = thread.allocate_lock()
thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))
Run Code Online (Sandbox Code Playgroud) 我正在编写一个有趣的Python程序但是试图从另一个文件中的类导入函数时遇到困难.这是我的代码:
#jurassic park mainframe
from random import randint
from sys import exit
from comm_system import Comm_system #the file i want to import from
class Jpark_mainframe(object):
def mainframe_home(self):
print "=====Welcome to the Jurassic Park Mainframe====="
print "==========Security Administration==============="
print "===========Communications Systems==============="
print "===============System Settings=================="
print "===================Quit========================="
prompt = raw_input("What would you like to do? ")
while prompt != "Quit":
if prompt == "Security Administration":
print "Please enter the 5-digit passcode:"
security_passcode = "%d%d%d%d%d" % (2, 0, 1, 2, randint(1, 2))
security_guess …
Run Code Online (Sandbox Code Playgroud) 我需要从另一个运行其中的东西的python文件中导入一个函数,但是当我导入函数时,它运行整个代码而不是只导入我想要的函数.反正只有从另一个.py文件导入一个函数而不运行整个代码?
我仍在尝试掌握 python 3,但遇到了一个问题,我可以将 .py 文件作为脚本运行,也可以将其作为模块导入,但不能同时运行两者。
目录结构
test/
__init__.py
test.py
subwayclock/
__init__.py
subwayclock.py
build/
gen/
__init__.py
gtfs_realtime_pb2.py
nyct_subway_pb2.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
在这种情况下 test.py 看起来像这样并且可以工作(rawFEED()是subwayclock.subwayclock中的一个函数):
from subwayclock.subwayclock import *
print(rawFEED())
Run Code Online (Sandbox Code Playgroud)
但是,我无法直接运行脚本,即
python subwayclock/subwayclock.py
Run Code Online (Sandbox Code Playgroud)
因为它给出了以下错误:
Traceback (most recent call last):
File "subwayclock.py", line 32, in <module>
from .build.gen.gtfs_realtime_pb2 import FeedMessage
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
但是,如果我修改 Subwayclock/subwayclock.py 中的导入语句以声明(即删除前导“.”):
from subwayclock.subwayclock import FeedMessage
Run Code Online (Sandbox Code Playgroud)
我可以直接通过命令行运行substituteclock.py脚本,完美调用main函数。
但是,当我运行原始 test.py 文件时,导入语句不再起作用,并且出现以下错误:
Traceback (most recent call last):
File "test.py", line 1, in <module>
from …
Run Code Online (Sandbox Code Playgroud) 最近我注意到使用模块是保持我的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结构而不是模块的其他内容,我该怎么办?如果我在某处错了,请告诉我.
为了说明我遇到的问题,请考虑以下问题.我有两个.py文件,一个名为main.py,另一个名为testfuction.py.它们都在同一目录中.
main.py的内容:
from testfunction import mytestfunction
mytestfunction()
Run Code Online (Sandbox Code Playgroud)
testfunction.py的内容:
def mytestfunction():
for number in range(0,10):
print number
print "Hi"
Run Code Online (Sandbox Code Playgroud)
我的印象是导入函数只会导入该函数.但是,当我运行main.py时,这就是我得到的:
Hi
0
1
2
3
4
5
6
7
8
9
>>>
Run Code Online (Sandbox Code Playgroud)
为什么要调用打印功能?它不是我导入的功能的一部分!
我想使用 from 导入函数从另一个程序导入变量。示例代码:
script1:
c=1
print('hello')
script2:
from script1 import c
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我的反应是:
hello
10
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以只显示变量 c 进行此运行。
主文件
#main.py
import main
print('Hello')
Run Code Online (Sandbox Code Playgroud)
输出:
Hello
Hello
Run Code Online (Sandbox Code Playgroud)
我相信,当涉及到该行时import main
,当时main
已注册sys.modules
,因此另一个脚本的 import 语句(我相信它不是其中的一部分__main__
)不会被执行。有人可以告诉我我是否理解正确?如果不是,请给出解释。
python ×8
module ×2
python-2.7 ×2
python-3.x ×2
class ×1
function ×1
idioms ×1
import ×1
namespaces ×1
sys ×1