在python中包含类似的内容?

在python中包含类似的内容?,python,import,include,Python,Import,Include,有没有什么方法可以像php一样在python中进行包含? 这与导入函数不同 我是python的初学者,正在编写一个Irc机器人 让我解释一下我想做什么,这是目前为止的剧本 import socket network = 'irc.irchighway.net' port = 6667 nick = 'bot'; canal = '#channel' irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM ) irc.connect (

有没有什么方法可以像php一样在python中进行包含? 这与导入函数不同

我是python的初学者,正在编写一个Irc机器人

让我解释一下我想做什么,这是目前为止的剧本

import socket

network = 'irc.irchighway.net'
port = 6667
nick = 'bot';
canal = '#channel'
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ( 'NICK '+nick+'\r\n' )
irc.send ( 'USER '+nick+' '+nick+' '+nick+' :Python IRC\r\n' )
irc.send ( 'PRIVMSG nickserv : identify xxxxx\r\n' )
irc.send ( 'JOIN '+canal+'\r\n' )
irc.send ( 'PRIVMSG '+canal+' :Im here\r\n' )
while True:
    data = irc.recv ( 4096 )
    if data.find ( 'PING' ) != -1:
        irc.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )    
    print data
我想做的是在while中加入一个include,然后创建另一个.py,类似这样的东西

机器人

import socket

network = 'irc.irchighway.net'
port = 6667
nick = 'bot';
canal = '#channel'
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ( 'NICK '+nick+'\r\n' )
irc.send ( 'USER '+nick+' '+nick+' '+nick+' :Python IRC\r\n' )
irc.send ( 'PRIVMSG nickserv : identify xxxxx\r\n' )
irc.send ( 'JOIN '+canal+'\r\n' )
irc.send ( 'PRIVMSG '+canal+' :Im here\r\n' )
while True:
    include('function.py')
函数.py

data = irc.recv ( 4096 )
if data.find ( 'PING' ) != -1:
    irc.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )    
print data
通过这种方式,我可以修改function.py文件并更改bot的行为,而无需停止脚本,这意味着bot将断开连接并重新连接到irc服务器


有没有办法做到这一点?

没有,也不应该有。就这么简单! 如果您认为必须动态生成代码(提示:通常不需要),请在正在运行的文件中以字符串形式生成代码,并使用“exec”进行编译—无需将其作为Python代码写入文本文件并导入

现在,您可以使用“重新加载”内置函数来执行您所描述的操作- 但这远远不是一个干净的设计


“不能做”的是在编译之前将另一个文件作为文本粘贴到当前文件中,就像在PHP中一样。

没有,也不应该有。就这么简单! 如果您认为必须动态生成代码(提示:通常不需要),请在正在运行的文件中以字符串形式生成代码,并使用“exec”进行编译—无需将其作为Python代码写入文本文件并导入

现在,您可以使用“重新加载”内置函数来执行您所描述的操作- 但这远远不是一个干净的设计


您“不能做”的是在编译之前将另一个文件作为文本粘贴到当前文件中,就像在PHP中一样。

您可以这样做。。。但这只是为了调试,好吗

bot.py

import socket
import helper

def main():
    network = 'irc.irchighway.net'
    port = 6667
    nick = 'bot';
    canal = '#channel'
    irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
    irc.connect ((network, port, ))
    print irc.recv(4096)
    irc.send ('NICK '+nick+'\r\n')
    irc.send ('USER '+nick+' '+nick+' '+nick+' :Python IRC\r\n')
    irc.send ('PRIVMSG nickserv : identify xxxxx\r\n')
    irc.send ('JOIN '+canal+'\r\n' )
    irc.send ('PRIVMSG '+canal+' :Im here\r\n')
    while True:
        reload(helper)
        helper.do_thing(irc)

if __name__ == '__main__':
    main()
def do_thing(sock):
    data = sock.recv(4096)
    if 'PING' in data:
        irc.send ('PONG ' + data.split()[1] + '\r\n')    
    print data
helper.py

import socket
import helper

def main():
    network = 'irc.irchighway.net'
    port = 6667
    nick = 'bot';
    canal = '#channel'
    irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
    irc.connect ((network, port, ))
    print irc.recv(4096)
    irc.send ('NICK '+nick+'\r\n')
    irc.send ('USER '+nick+' '+nick+' '+nick+' :Python IRC\r\n')
    irc.send ('PRIVMSG nickserv : identify xxxxx\r\n')
    irc.send ('JOIN '+canal+'\r\n' )
    irc.send ('PRIVMSG '+canal+' :Im here\r\n')
    while True:
        reload(helper)
        helper.do_thing(irc)

if __name__ == '__main__':
    main()
def do_thing(sock):
    data = sock.recv(4096)
    if 'PING' in data:
        irc.send ('PONG ' + data.split()[1] + '\r\n')    
    print data

你可以这样做。。。但这只是为了调试,好吗

bot.py

import socket
import helper

def main():
    network = 'irc.irchighway.net'
    port = 6667
    nick = 'bot';
    canal = '#channel'
    irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
    irc.connect ((network, port, ))
    print irc.recv(4096)
    irc.send ('NICK '+nick+'\r\n')
    irc.send ('USER '+nick+' '+nick+' '+nick+' :Python IRC\r\n')
    irc.send ('PRIVMSG nickserv : identify xxxxx\r\n')
    irc.send ('JOIN '+canal+'\r\n' )
    irc.send ('PRIVMSG '+canal+' :Im here\r\n')
    while True:
        reload(helper)
        helper.do_thing(irc)

if __name__ == '__main__':
    main()
def do_thing(sock):
    data = sock.recv(4096)
    if 'PING' in data:
        irc.send ('PONG ' + data.split()[1] + '\r\n')    
    print data
helper.py

import socket
import helper

def main():
    network = 'irc.irchighway.net'
    port = 6667
    nick = 'bot';
    canal = '#channel'
    irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
    irc.connect ((network, port, ))
    print irc.recv(4096)
    irc.send ('NICK '+nick+'\r\n')
    irc.send ('USER '+nick+' '+nick+' '+nick+' :Python IRC\r\n')
    irc.send ('PRIVMSG nickserv : identify xxxxx\r\n')
    irc.send ('JOIN '+canal+'\r\n' )
    irc.send ('PRIVMSG '+canal+' :Im here\r\n')
    while True:
        reload(helper)
        helper.do_thing(irc)

if __name__ == '__main__':
    main()
def do_thing(sock):
    data = sock.recv(4096)
    if 'PING' in data:
        irc.send ('PONG ' + data.split()[1] + '\r\n')    
    print data

exec
。。。但是糟糕…你应该编写一个函数,导入它,并在需要的地方调用。这就是为什么存在对象、配置文件以及那些将配置文件作为参数的对象的构造函数/工厂/构建器。甚至,正如@cha0site所说,只是简单的函数。我无法导入函数,我已经尝试过了,但在我看来,即使导入很困难,python也只导入一次,因此如果我在bot.py运行时修改functions.py,它根本不会影响代码。您可以强制重新导入,但这完全没有抓住重点。不要尝试将文件作为python导入;使用JSON或XML等外部配置文件,在每个循环开始时读取该文件,然后使用从配置加载的值来运行操作。然后,您可以在程序运行时修改配置文件。。。但是糟糕…你应该编写一个函数,导入它,并在需要的地方调用。这就是为什么存在对象、配置文件以及那些将配置文件作为参数的对象的构造函数/工厂/构建器。甚至,正如@cha0site所说,只是简单的函数。我无法导入函数,我已经尝试过了,但在我看来,即使导入很困难,python也只导入一次,因此如果我在bot.py运行时修改functions.py,它根本不会影响代码。您可以强制重新导入,但这完全没有抓住重点。不要尝试将文件作为python导入;使用JSON或XML等外部配置文件,在每个循环开始时读取该文件,然后使用从配置加载的值来运行操作。然后,您可以在程序运行时修改配置文件。