Python - 干净地传递参数

标签 python python-2.7 arguments parameter-passing

如果我将城市列表作为变量传递,则任务会按预期完成。

def count_top_rt(tweet_set):
    for tweet in tweet_set:
        print(tweet)

tweet_set = ["Sydney", "London", "Paris"]
print(tweet_set)

如果我在函数定义中输入错误的参数名称,任务仍然完成,因为 tweet_set 变量是全局的。

def count_top_rt(mis_typed_arguament):
    for tweet in tweet_set:
        print(tweet)

tweet_set = ["Sydney", "London", "Paris"]
print(tweet_set)

感觉没有正确传递参数是错误的。我有两个问题:

  • 在第一个版本中,参数是否“正确”传递?
  • 有哪些方法可以确保正确传递参数?

最佳答案

参数是否“正确”传递?

是的,在第一个示例中正确传递了参数:您的例程仅取决于输入参数。

有哪些方法

在模块化哲学中,您不能有效地防止这个问题:不允许您的函数了解任何外部信息。这就是“纯”模块化编程和 Python 的特性有点不一致的地方。

作为程序员,确保这一点的方法是使用不太可能发生冲突的变量名。在这种情况下,将测试驱动程序(您的主程序)中的 tweet_set 的名称更改为其他名称。如果这是一个常设测试用例,请使用不太可能出现在函数中的名称,例如 TEST_DRIVER_tweet_set

编程实践

您可以使用编辑器中的搜索功能来突出显示每个名称的所有匹配项。如果您依次突出显示每个参数和变量名称并“查找所有”,您可以看到哪些输入不正确。

高级技术 ... 只是让您知道“某天” ...

有一些 Python 功能可以让函数查看堆栈,获取下一个函数(调用此函数的函数)的堆栈帧,并检查其事件变量。如果您真的、真的需要这样做,您可以让您的函数检查它自己的参数名称与每个堆栈帧中的变量名称,一直到操作系统中的主程序。

很少有这种情况有用。

关于Python - 干净地传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40728983/

相关文章:

python - 使用样式解包多行

javascript - 函数参数是否支持 JavaScript 中的默认值?

python - 如何从列表中提取其值包含该项目的相应键?

python - flask 时刻中的时刻未定义

python - 截断一个数字并获取删除的值。还是转换为 int?

python - 如何在没有管理员权限的情况下在 Windows 上安装 python

python - 我应该在哪里为 Airflow 创建一个包含我自己的 DAG 的文件夹?

python - 使用 Python 从 Excel (.xlsx) 中提取超链接

function - 我可以让一个函数在 Vala 中处理多个数据类型参数吗?

python - 使用字典中参数的所有组合评估函数