文件之间的Python全局变量

文件之间的Python全局变量,python,python-3.x,Python,Python 3.x,我有一个包含所有函数的functions.py文件。我想打印main.py文件中的一个变量,该文件是在function.py文件中的函数中创建的。我该怎么做 functions.py: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.web

我有一个包含所有函数的functions.py文件。我想打印main.py文件中的一个变量,该文件是在function.py文件中的函数中创建的。我该怎么做

functions.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox()

def open_tradeview():
    browser.get('https://www.tradingview.com/chart/')
    wait = WebDriverWait(browser, 10)

    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div/div/div/div"))).click() #Click on Hamburger menu
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div[11]"))).click() #Click on sign in button
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div[2]/div/div/div/div/div/div/div[1]/div[4]/div/span"))).click() #Click on sign in with email button
    wait.until(EC.visibility_of_element_located((By.NAME, "username"))).send_keys("trading_view_bot@fastmail.com") #type in email
    wait.until(EC.visibility_of_element_located((By.NAME, "password"))).send_keys("2C3-cc9r" + Keys.RETURN) #type in password
    time.sleep(18)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/article/button"))).click() #Click ad away
    time.sleep(26)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/div/article/button"))).click() #Click ad away
    time.sleep(5)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div[2]/div/div[2]/div/div/div[1]/button"))).click() #Click ad away
    wait.until(EC.element_to_be_clickable((By.ID, "header-toolbar-symbol-search"))).click() #Currency pair
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".search-Hsmn_0WX.upperCase-Hsmn_0WX.input-3n5_2-hI"))).send_keys("VETUSD") #type in currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'VeChain / US Dollar (calculated by TradingView)')]"))).click() #select new currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[2]/div/div"))).click() #click on time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div/div[12]/div"))).click() #select 30min time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[2]/div/input"))).send_keys("ATR Trailing Stoploss") #search for ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[3]/div[2]/div/div/div[2]/div[1]"))).click() #click on ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[1]/span"))).click() #close search window

    
def get_atr_price():
    global atr
    global price
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    
def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    return atr, price
main.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
import yagmail
from functions import *
import functions
functions.get_atr_price()

open_tradeview()


get_atr_price()

print(atr)
import functions

x = functions.get_atr_price()
当我想要打印变量atr时,我得到一个错误,变量atr没有定义


那么基本上我如何访问这两个文件中的每个变量呢?

您是否尝试过类似的方法

打印(functions.atr)
下面是一个适合我的例子:

main.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
import yagmail
from functions import *
import functions
functions.get_atr_price()

open_tradeview()


get_atr_price()

print(atr)
import functions

x = functions.get_atr_price()
导入函数
打印(“主屏幕中的您好!”)
打印(functions.hello)
functions.funky()#这会更改值
打印(functions.hello)
functions.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox()

def open_tradeview():
    browser.get('https://www.tradingview.com/chart/')
    wait = WebDriverWait(browser, 10)

    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div/div/div/div"))).click() #Click on Hamburger menu
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div[11]"))).click() #Click on sign in button
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div[2]/div/div/div/div/div/div/div[1]/div[4]/div/span"))).click() #Click on sign in with email button
    wait.until(EC.visibility_of_element_located((By.NAME, "username"))).send_keys("trading_view_bot@fastmail.com") #type in email
    wait.until(EC.visibility_of_element_located((By.NAME, "password"))).send_keys("2C3-cc9r" + Keys.RETURN) #type in password
    time.sleep(18)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/article/button"))).click() #Click ad away
    time.sleep(26)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/div/article/button"))).click() #Click ad away
    time.sleep(5)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div[2]/div/div[2]/div/div/div[1]/button"))).click() #Click ad away
    wait.until(EC.element_to_be_clickable((By.ID, "header-toolbar-symbol-search"))).click() #Currency pair
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".search-Hsmn_0WX.upperCase-Hsmn_0WX.input-3n5_2-hI"))).send_keys("VETUSD") #type in currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'VeChain / US Dollar (calculated by TradingView)')]"))).click() #select new currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[2]/div/div"))).click() #click on time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div/div[12]/div"))).click() #select 30min time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[2]/div/input"))).send_keys("ATR Trailing Stoploss") #search for ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[3]/div[2]/div/div/div[2]/div[1]"))).click() #click on ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[1]/span"))).click() #close search window

    
def get_atr_price():
    global atr
    global price
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    
def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    return atr, price
hello=4#这里声明了全局变量
def funky():
打印(“hello from functions.funky()”)
全球你好
hello=10#更改值
输出:

main的你好
4.
来自functions.funky()的您好
10
编辑: 如果希望在没有全局变量的情况下工作,可以让
get\u atr\u price()
函数返回atr和price,如下所示:

functions.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox()

def open_tradeview():
    browser.get('https://www.tradingview.com/chart/')
    wait = WebDriverWait(browser, 10)

    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div/div/div/div"))).click() #Click on Hamburger menu
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div[11]"))).click() #Click on sign in button
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div[2]/div/div/div/div/div/div/div[1]/div[4]/div/span"))).click() #Click on sign in with email button
    wait.until(EC.visibility_of_element_located((By.NAME, "username"))).send_keys("trading_view_bot@fastmail.com") #type in email
    wait.until(EC.visibility_of_element_located((By.NAME, "password"))).send_keys("2C3-cc9r" + Keys.RETURN) #type in password
    time.sleep(18)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/article/button"))).click() #Click ad away
    time.sleep(26)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/div/article/button"))).click() #Click ad away
    time.sleep(5)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div[2]/div/div[2]/div/div/div[1]/button"))).click() #Click ad away
    wait.until(EC.element_to_be_clickable((By.ID, "header-toolbar-symbol-search"))).click() #Currency pair
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".search-Hsmn_0WX.upperCase-Hsmn_0WX.input-3n5_2-hI"))).send_keys("VETUSD") #type in currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'VeChain / US Dollar (calculated by TradingView)')]"))).click() #select new currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[2]/div/div"))).click() #click on time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div/div[12]/div"))).click() #select 30min time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[2]/div/input"))).send_keys("ATR Trailing Stoploss") #search for ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[3]/div[2]/div/div/div[2]/div[1]"))).click() #click on ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[1]/span"))).click() #close search window

    
def get_atr_price():
    global atr
    global price
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    
def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    return atr, price
def get_atr_price():
atr=browser。通过xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div/div[1]/div')查找元素。文本
price=browser。通过xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]'查找元素。text
返回atr,价格
然后,在main.py文件中,可以这样使用它们:

atr,price=functions.get_atr_price();

您尝试过这样的东西吗

打印(functions.atr)
下面是一个适合我的例子:

main.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
import yagmail
from functions import *
import functions
functions.get_atr_price()

open_tradeview()


get_atr_price()

print(atr)
import functions

x = functions.get_atr_price()
导入函数
打印(“主屏幕中的您好!”)
打印(functions.hello)
functions.funky()#这会更改值
打印(functions.hello)
functions.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox()

def open_tradeview():
    browser.get('https://www.tradingview.com/chart/')
    wait = WebDriverWait(browser, 10)

    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div/div/div/div"))).click() #Click on Hamburger menu
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div[11]"))).click() #Click on sign in button
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div[2]/div/div/div/div/div/div/div[1]/div[4]/div/span"))).click() #Click on sign in with email button
    wait.until(EC.visibility_of_element_located((By.NAME, "username"))).send_keys("trading_view_bot@fastmail.com") #type in email
    wait.until(EC.visibility_of_element_located((By.NAME, "password"))).send_keys("2C3-cc9r" + Keys.RETURN) #type in password
    time.sleep(18)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/article/button"))).click() #Click ad away
    time.sleep(26)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/div/article/button"))).click() #Click ad away
    time.sleep(5)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div[2]/div/div[2]/div/div/div[1]/button"))).click() #Click ad away
    wait.until(EC.element_to_be_clickable((By.ID, "header-toolbar-symbol-search"))).click() #Currency pair
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".search-Hsmn_0WX.upperCase-Hsmn_0WX.input-3n5_2-hI"))).send_keys("VETUSD") #type in currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'VeChain / US Dollar (calculated by TradingView)')]"))).click() #select new currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[2]/div/div"))).click() #click on time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div/div[12]/div"))).click() #select 30min time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[2]/div/input"))).send_keys("ATR Trailing Stoploss") #search for ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[3]/div[2]/div/div/div[2]/div[1]"))).click() #click on ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[1]/span"))).click() #close search window

    
def get_atr_price():
    global atr
    global price
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    
def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    return atr, price
hello=4#这里声明了全局变量
def funky():
打印(“hello from functions.funky()”)
全球你好
hello=10#更改值
输出:

main的你好
4.
来自functions.funky()的您好
10
编辑: 如果希望在没有全局变量的情况下工作,可以让
get\u atr\u price()
函数返回atr和price,如下所示:

functions.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox()

def open_tradeview():
    browser.get('https://www.tradingview.com/chart/')
    wait = WebDriverWait(browser, 10)

    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div/div/div/div"))).click() #Click on Hamburger menu
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div[11]"))).click() #Click on sign in button
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div[2]/div/div/div/div/div/div/div[1]/div[4]/div/span"))).click() #Click on sign in with email button
    wait.until(EC.visibility_of_element_located((By.NAME, "username"))).send_keys("trading_view_bot@fastmail.com") #type in email
    wait.until(EC.visibility_of_element_located((By.NAME, "password"))).send_keys("2C3-cc9r" + Keys.RETURN) #type in password
    time.sleep(18)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/article/button"))).click() #Click ad away
    time.sleep(26)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/div/article/button"))).click() #Click ad away
    time.sleep(5)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div[2]/div/div[2]/div/div/div[1]/button"))).click() #Click ad away
    wait.until(EC.element_to_be_clickable((By.ID, "header-toolbar-symbol-search"))).click() #Currency pair
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".search-Hsmn_0WX.upperCase-Hsmn_0WX.input-3n5_2-hI"))).send_keys("VETUSD") #type in currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'VeChain / US Dollar (calculated by TradingView)')]"))).click() #select new currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[2]/div/div"))).click() #click on time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div/div[12]/div"))).click() #select 30min time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[2]/div/input"))).send_keys("ATR Trailing Stoploss") #search for ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[3]/div[2]/div/div/div[2]/div[1]"))).click() #click on ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[1]/span"))).click() #close search window

    
def get_atr_price():
    global atr
    global price
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    
def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    return atr, price
def get_atr_price():
atr=browser。通过xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div/div[1]/div')查找元素。文本
price=browser。通过xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]'查找元素。text
返回atr,价格
然后,在main.py文件中,可以这样使用它们:

atr,price=functions.get_atr_price();

在主函数中,您可以获取变量中任何函数的结果,然后打印

trade = open_tradeview()
atr = get_atr_price()

print(trade)
print(atr)

在main函数中,可以获取变量中任何函数的结果,然后打印

trade = open_tradeview()
atr = get_atr_price()

print(trade)
print(atr)

虽然有时需要全局变量,但它们不应该是函数之间传递数据的正常方式。在您的情况下,为什么不直接从函数返回您想要的值呢

def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    return atr, price
用法是

atr, price = get_atr_price()
print(atr)

虽然有时需要全局变量,但它们不应该是函数之间传递数据的正常方式。在您的情况下,为什么不直接从函数返回您想要的值呢

def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    return atr, price
用法是

atr, price = get_atr_price()
print(atr)

至少据我所知,Global不能跨文件工作,所以我通常在python中使用
return
命令,每次def调用可以返回1个东西1次,如果您想一次返回更多东西,则需要创建一个列表/dict,然后返回。例如,您还需要定义返回的变量/list/dict将与之关联的变量

functions.py的变体1:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox()

def open_tradeview():
    browser.get('https://www.tradingview.com/chart/')
    wait = WebDriverWait(browser, 10)

    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div/div/div/div"))).click() #Click on Hamburger menu
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div[11]"))).click() #Click on sign in button
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div[2]/div/div/div/div/div/div/div[1]/div[4]/div/span"))).click() #Click on sign in with email button
    wait.until(EC.visibility_of_element_located((By.NAME, "username"))).send_keys("trading_view_bot@fastmail.com") #type in email
    wait.until(EC.visibility_of_element_located((By.NAME, "password"))).send_keys("2C3-cc9r" + Keys.RETURN) #type in password
    time.sleep(18)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/article/button"))).click() #Click ad away
    time.sleep(26)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/div/article/button"))).click() #Click ad away
    time.sleep(5)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div[2]/div/div[2]/div/div/div[1]/button"))).click() #Click ad away
    wait.until(EC.element_to_be_clickable((By.ID, "header-toolbar-symbol-search"))).click() #Currency pair
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".search-Hsmn_0WX.upperCase-Hsmn_0WX.input-3n5_2-hI"))).send_keys("VETUSD") #type in currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'VeChain / US Dollar (calculated by TradingView)')]"))).click() #select new currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[2]/div/div"))).click() #click on time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div/div[12]/div"))).click() #select 30min time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[2]/div/input"))).send_keys("ATR Trailing Stoploss") #search for ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[3]/div[2]/div/div/div[2]/div[1]"))).click() #click on ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[1]/span"))).click() #close search window

    
def get_atr_price():
    global atr
    global price
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    
def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    return atr, price
main.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
import yagmail
from functions import *
import functions
functions.get_atr_price()

open_tradeview()


get_atr_price()

print(atr)
import functions

x = functions.get_atr_price()
现在,x将是一个列表,其中x[0]将是atr,x[1]将是价格,或者您可以使用dict使其变得更好:

functions.py的变体2

def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    tmp = {}
    tmp['atr'] = atr
    tmp['price'] = price
    return tmp
现在,您几乎可以使用相同的代码直接调用atr或price

main.py

import functions

x = functions.get_atr_price()

现在使用第二个变量,您可以调用x['art']作为art变量,或者调用x['price'],这样会更易于扩展和导航。

至少据我所知,Global不能跨文件工作,因此我通常在python中使用
return
命令,每次调用def时可以返回1件东西,如果你想一次归还更多的东西,你需要列一个清单,然后再归还。例如,您还需要定义返回的变量/list/dict将与之关联的变量

functions.py的变体1:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox()

def open_tradeview():
    browser.get('https://www.tradingview.com/chart/')
    wait = WebDriverWait(browser, 10)

    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div/div/div/div"))).click() #Click on Hamburger menu
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div[11]"))).click() #Click on sign in button
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div[2]/div/div/div/div/div/div/div[1]/div[4]/div/span"))).click() #Click on sign in with email button
    wait.until(EC.visibility_of_element_located((By.NAME, "username"))).send_keys("trading_view_bot@fastmail.com") #type in email
    wait.until(EC.visibility_of_element_located((By.NAME, "password"))).send_keys("2C3-cc9r" + Keys.RETURN) #type in password
    time.sleep(18)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/article/button"))).click() #Click ad away
    time.sleep(26)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div/div/article/button"))).click() #Click ad away
    time.sleep(5)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div[2]/div/div[2]/div/div/div[1]/button"))).click() #Click ad away
    wait.until(EC.element_to_be_clickable((By.ID, "header-toolbar-symbol-search"))).click() #Currency pair
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".search-Hsmn_0WX.upperCase-Hsmn_0WX.input-3n5_2-hI"))).send_keys("VETUSD") #type in currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'VeChain / US Dollar (calculated by TradingView)')]"))).click() #select new currency pair
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[2]/div/div"))).click() #click on time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/span/div[1]/div/div/div/div[12]/div"))).click() #select 30min time frame
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/div/div[1]/div[1]/div/div/div/div/div[5]/div/div"))).click() #click on indicators
    wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[2]/div/input"))).send_keys("ATR Trailing Stoploss") #search for ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[3]/div[2]/div/div/div[2]/div[1]"))).click() #click on ATR indicator
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[6]/div/div/div[1]/div/div[1]/span"))).click() #close search window

    
def get_atr_price():
    global atr
    global price
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    
def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    return atr, price
main.py:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
import time
import yagmail
from functions import *
import functions
functions.get_atr_price()

open_tradeview()


get_atr_price()

print(atr)
import functions

x = functions.get_atr_price()
现在,x将是一个列表,其中x[0]将是atr,x[1]将是价格,或者您可以使用dict使其变得更好:

functions.py的变体2

def get_atr_price():
    atr = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[2]/div[2]/div[2]/div[2]/div/div[1]/div').text
    price = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/div/table/tr[1]/td[2]/div/div[1]/div[1]/div[2]/div[3]/span[2]').text
    tmp = {}
    tmp['atr'] = atr
    tmp['price'] = price
    return tmp
现在,您几乎可以使用相同的代码直接调用atr或price

main.py

import functions

x = functions.get_atr_price()

现在,对于第二个变量,您可以调用x['art']作为art变量,或者调用x['price'],这样会更易于扩展和导航。

Python控制每个函数和每个模块的变量范围

global
指令将函数中使用的变量的范围更改为global。例如,如果所有代码都在同一个文件中,我们可以使用
global
指令

def func():
全球x
x=1
func()
打印(x)
它将打印
1

使用不同的模块时,变量名将以模块名作为前缀。例如,如果我们的
函数.py
包含以下内容:

def func():
全球x
x=1
main.py
需要使用模块名访问x

导入函数
functions.func()
打印(functions.x)
最后,使用全局变量可能会导致维护问题