【问题标题】:Is it ok to use a global variable in this case?在这种情况下可以使用全局变量吗?
【发布时间】:2018-02-10 00:12:09
【问题描述】:

所以我有一个连续运行的预定脚本。这是调度程序脚本:

import os
import schedule
import time

os.chdir("B:\Scheduled_Scripts")

def DSE():
    print("")
    print(colors.OK + '***DSE***')
    try:
        start = time.time()
        exec(open('B:/Scheduled_Scripts/DSE.py').read())
        print("")
        print(colors.OK + "DSE completed successfully in", round(time.time() - start, 2), 'seconds!')
    except Exception as e:
        logger.error(e)
        print(colors.WARNING + 'An error has occurred in DSE.py. It was a ' + type(e).__name__ + '-' + format(e))
        print('')
        pass

现在它将运行我的 DSE.py 脚本,我最终会使用 pandas sql 查询。然后我创建一个函数来开始映射一些值。

query = '''(my query)'''
price_levels = pd.read_sql_query(query, KORE, params={my_params})

def get_price_level(seat):
    pl = price_levels[price_levels['seatsid'] == seat]['priceleveldesc'].values()
    return str(pl)

DSE_avs['priceleveldesc'] = DSE_avs['seatsid'].map(get_price_level)

问题是现在它无法识别函数中定义了“price_levels”。如果我只是将 price_levels 设置为全局变量,那会是多么令人不悦?

【问题讨论】:

  • exec(open('B:/Scheduled_Scripts/DSE.py').read()) 真的吗?为什么不import DSE
  • 关于风格/最佳实践的问题并不适合 StackOverflow ——我们更喜欢具有具体、规范答案的问题(并且,作为一般准则,围绕问题或错误的问题;如果没有任何问题,那是一种气味,您所拥有的可能不是一个问题)。请参阅A Guide to Code Review for Stack Overflow Users 以讨论一种可能的替代方案,以及哪些问题适合或不适合这两个网站。

标签: python


【解决方案1】:

使用lambdaprice_levels 作为参数传递。

query = '''(my query)'''
price_levels = pd.read_sql_query(query, KORE, params={my_params})

def get_price_level(seat, price_levels):
    pl = price_levels[price_levels['seatsid'] == seat]['priceleveldesc'].values()
    return str(pl)

DSE_avs['priceleveldesc'] = DSE_avs['seatsid'].map(lambda s: get_price_level(s, price_levels))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 2022-11-14
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    相关资源
    最近更新 更多