所以我从我正在阅读的书中写了这个函数,这就是它的开始:
def cheese_and_crackers(cheese_count, boxes_of_crackers):
print "You have %d cheeses!" % cheese_count
print "You have %d boxes of crackers!" % boxes_of_crackers
print "Man that's enough for a party!"
print "Get a blanket.\n"
好的,有道理。然后,这就是当这个函数运行的时候,我有点困惑,想要确认一些事情:
print "OR, we can use variables from our script:"
amount_of_cheese = 10
amount_of_crackers = 50
cheese_and_crackers(amount_of_cheese, amount_of_crackers)
让我困惑的是,amount_of_cheese和amount_of_crackers正在改变变量(verbage?不确定我说的是正确的术语)来自cheese_count和boxes_of_crackers分别来自函数中的第一个初始变量标签。
所以我的问题是,当你使用的是与你编写的初始函数中使用的变量不同的变量时,为什么要更改你写出新变量名的AFTER的名字?如果新变量显示在新变量之后,程序将如何知道它们是什么?
我认为python从上到下读取程序,还是从头到尾读取它?这有意义吗?我不确定如何解释它。感谢您的任何帮助。 :) (python 2.7)
答案 0 :(得分:6)
我认为你对参数传递的命名规则感到有些困惑。
考虑:
def foo(a, b):
print a
print b
您可以按如下方式致电foo
:
x = 1
y = 2
foo(x, y)
你会看到:
1
2
函数签名(函数定义的第一行)中的参数(a, b
)的变量名称不必与调用函数时使用的实际变量名称一致。
当你打电话时,可以这样想:
foo(x, y)
它说:"调用函数foo
;将x
传递为a
,将y
传递为b
"。此外,这里的参数作为副本传递,因此如果您要在函数内修改它们,它将不会更改函数外部的值,从调用它的位置。请考虑以下事项:
def bar(a, b):
a = a + 1
b = b + 2
print a
x = 0
y = 0
bar(x, y)
print x
print y
你会看到:
1
2
0
0
答案 1 :(得分:2)
脚本从上到下运行。该函数在您调用时执行,而不是在您定义时执行。
我建议先尝试理解变量和函数参数传递等概念。
答案 2 :(得分:0)
def change(variable):
print variable
var1 = 1
change(var1)
在上面的例子中,var1
是主要执行线程中的一个变量。
调用change()之类的函数时,范围会发生变化。只要你仍然在函数的范围内,你在函数外声明的变量就不复存在了。但是,如果您传递一个参数,例如var1,那么您可以在函数内使用该值,通过函数声明中给出的名称:variable
。但它与var
完全分开! 值是相同的,但它是不同的变量!
答案 3 :(得分:0)
您的问题与功能参数转移有关。
函数中有两种类型的参数传递:
在python中,非原子类型通过引用传输;原子类型(如字符串,整数)按值传输。
例如,
案例1:
x = 20
def foo(x):
x+=10
foo()
print x // 20, rather than 30
案例2:
d = {}
def foo(x): x['key']=20
foo(d)
print d // {'key': 20}