如果我将城市列表作为变量传递,那么任务将按预期完成。在
def count_top_rt(tweet_set):
for tweet in tweet_set:
print(tweet)
tweet_set = ["Sydney", "London", "Paris"]
print(tweet_set)
如果我在函数定义中输入错误的参数名,那么任务仍然完成,因为tweet_set变量是全局变量。在
^{pr2}$
感觉不恰当地传递论点是错误的。我有两个问题:
- 在第一个版本中,参数是否正确传递?在
- 我有什么方法可以确保正确传递论点?在
Tags:
参数是否正确传递?
是的,在第一个示例中参数被正确传递:例程只依赖于输入参数。在
有什么方法
在模块化哲学中,你不能有效地防止这个问题:你的功能不允许知道任何外部的东西。这就是“纯”模块化编程和Python特性有点不一致的地方。在
作为程序员,确保这一点的方法是使用不太可能发生冲突的变量名。在这种情况下,将测试驱动程序(主程序)中的tweet_set的名称改为其他名称。如果这是一个长期测试用例,请使用一个不太可能出现在函数中的名称,例如test_DRIVER_tweet_set。在
编程实践
您可以使用编辑器中的搜索功能来突出显示每个名称的所有匹配项。如果依次突出显示每个参数和变量名并“find all”,则可以看到哪些参数和变量没有正确键入。在
先进技术。。。只是为了让你知道“有一天”。。。在
Python的一些特性允许函数查看堆栈,获取下一个函数(调用此函数的函数)的堆栈帧,并检查其活动变量。如果你真的,真的需要这样做,你可以让你的函数检查自己的参数名与每个堆栈帧中的变量名,一直到操作系统中的主程序。在
很少有这样的情况。在
有一种简单的检查方法:
如您所见,当一个变量作为变量传递时,无论全局变量的名称是什么,局部变量都将成为它的
reference
。这是因为解释器首先去局部变量堆栈检查变量(它是引用的原因是因为函数的参数行为),然后才引用全局变量。在防止这种情况发生的最好方法是避免全局变量。将所有代码放入函数和类中。在
如果您在
count_top_rt
的定义中拼错了参数名,则会抛出一个NameError
。在相关问题 更多 >
编程相关推荐