如果我将城市列表作为变量传递,则任务会按预期完成。
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/