用户正在使用 Python 构建一个程序,该程序可以比较他常用的公网 IP 地址和一个 TOR IP 地址。他的代码中有两个函数,一个用于获取公网 IP 地址,另一个用于连接到 TOR 网络并获取 TOR IP 地址。他想创建一个第三个函数来确认这两个 IP 地址是否不同。但是,他不确定如何将前两个函数生成的 IP 地址传递给第三个函数。
2、解决方案
方法一:在函数中使用全局变量
# 定义全局变量
public_ip_address = None
tor_ip_address = None
def public_ip():
"""获取公网 IP 地址"""
global public_ip_address
url = 'http://ifconfig.me/ip'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
response = urllib2.urlopen(request)
public_ip_address = response.read()
def connect_tor():
"""连接到 TOR 网络并获取 TOR IP 地址"""
global tor_ip_address
LOCALHOST = "127.0.0.1"
PORT = 9150
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, LOCALHOST, PORT)
socket.socket = socks.socksocket
url = 'http://ifconfig.me/ip'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
response = urllib2.urlopen(request)
tor_ip_address = response.read()
def compare_ip_addresses():
"""比较公网 IP 地址和 TOR IP 地址"""
if public_ip_address != tor_ip_address:
print("IP 地址不同")
else:
print("IP 地址相同")
# 调用函数
public_ip()
connect_tor()
compare_ip_addresses()
方法二:在函数中使用返回值
def public_ip():
"""获取公网 IP 地址"""
url = 'http://ifconfig.me/ip'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
response = urllib2.urlopen(request)
return response.read()
def connect_tor():
"""连接到 TOR 网络并获取 TOR IP 地址"""
LOCALHOST = "127.0.0.1"
PORT = 9150
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, LOCALHOST, PORT)
socket.socket = socks.socksocket
url = 'http://ifconfig.me/ip'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
response = urllib2.urlopen(request)
return response.read()
def compare_ip_addresses(public_ip_address, tor_ip_address):
"""比较公网 IP 地址和 TOR IP 地址"""
if public_ip_address != tor_ip_address:
print("IP 地址不同")
else:
print("IP 地址相同")
# 调用函数
public_ip_address = public_ip()
tor_ip_address = connect_tor()
compare_ip_addresses(public_ip_address, tor_ip_address)
方法三:在函数中使用参数
def public_ip(ip_address):
"""获取公网 IP 地址"""
url = 'http://ifconfig.me/ip'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
response = urllib2.urlopen(request)
ip_address = response.read()
return ip_address
def connect_tor(ip_address):
"""连接到 TOR 网络并获取 TOR IP 地址"""
LOCALHOST = "127.0.0.1"
PORT = 9150
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, LOCALHOST, PORT)
socket.socket = socks.socksocket
url = 'http://ifconfig.me/ip'
request = urllib2.Request(url)
request.add_header('Cache-Control','max-age=0')
response = urllib2.urlopen(request)
ip_address = response.read()
return ip_address
def compare_ip_addresses(public_ip_address, tor_ip_address):
"""比较公网 IP 地址和 TOR IP 地址"""
if public_ip_address != tor_ip_address:
print("IP 地址不同")
else:
print("IP 地址相同")
# 调用函数
public_ip_address = public_ip(None)
tor_ip_address = connect_tor(None)
compare_ip_addresses(public_ip_address, tor_ip_address)
以上三种方法都可以用来比较公网 IP 地址和 TOR IP 地址。第一种方法使用全局变量来传递 IP 地址,第二种方法使用返回值来传递 IP 地址,第三种方法使用参数来传递 IP 地址。这三种方法各有优缺点,用户可以根据自己的需要选择合适的方法。