用户定义的函数是如何在python中真正运行的



我是python的新手,曾在http://do1.dr-chuck.com/pythonlearn/EN_us/pythonlearn.pdf4.9节用户定义的功能。一路上我很困惑。

当代码round0为:时

bruce=input("please enter what to be printed 2x")
def printTwice(bruce):
print(bruce)
print(bruce)
printTwice("alpha") 

不管我给出了什么输入,结果都是";α";。好吧,我明白了;α";被设置为"0"的值;bruce"在这里

圆形1:

bruce=input("please enter what to be printed 2x") #to input "hello"
not1=123
def printTwice(not1): #set parameter to not1 , not1 is set as 123 , but output is what was given in input 
print(bruce)
print(bruce)
printTwice("a") 

输出结果是为bruce输入的任何内容。例如";你好";

问:为什么它忽略了论点"a";以及";not1";并取得输入";你好";给布鲁斯

第二回合:#由于我看到python没有注意到我要求它做什么,我删除了"的引号;a",成为

bruce=input("please enter what to be printed 2x")
not1=123
def printTwice(not1): #set parameter to not1 , not1 is set as 123 , but output is what was given in input 
print(bruce)
print(bruce)
printTwice(a)  # argument doesn't have " " now

output:名称错误:未定义名称"a"。问:为什么我这次放在括号里的东西现在很麻烦,而不是第0轮和第1轮

我知道我的问题是初学者,或者可能在某个地方重复,如果是,请给我指右边的帖子。非常感谢。

这里有一些事实:

  1. 当你为函数定义一个参数时,它就变成了一个"局部变量";该功能
  2. 局部变量总是在全局变量(模块中定义的变量(的后面。(让我们暂时跳过全局关键字(
  3. 有一个LEGB规则,Python在试图查找名称(变量(时会关心它。它们代表本地包围全球建筑。它完全按照这个顺序搜索名称

round0中,您将bruce定义为参数,因此它将覆盖全局变量bruce。这就是为什么函数中的bruce正是作为局部变量的参数。您可以考虑在函数中创建一个变量bruce = 'alpha'。它在具有input()结果的全局命名空间中遮蔽变量bruce

round1中,您将not1定义为参数,但从未使用过该变量。相反,您使用了变量bruce,它不是局部变量,因为它没有在函数内部定义,也没有作为参数定义。现在Python也向前看,看看它是否能在全局命名空间中找到它。。。

round2是另一回事。。。不要混淆作为参数的名称和作为自变量的名称。如果将bruce这样的名称添加到参数中(如上所述(,则将创建局部变量。就像你在函数中说bruce = 10一样。但在这里,当您在调用函数时将a传递给它时,实际上就是将对象传递给该函数。a之前必须存在。在以前的情况下,你不会得到错误,因为你将对象(字符串对象'a''alpha'(传递给函数。如果你在用printTwice(a)调用函数之前有类似a = 10的东西,你也不会得到错误。因为现在a指向对象10

如果你把名称作为参数,Python会为你创建一个局部变量。如果你把一些东西传递给参数,Python就会首先对它求值(这就是为什么你之前必须有它们(,并把实际的(对该对象的引用(对象发送给函数的参数。

相关内容

  • 没有找到相关文章

最新更新