好的,这是我的代码:
tick = 1
week = 1
month = 1
year = 1
def new_week(week, tick):
week = week + 1
tick = tick + 1
if tick == 4:
new_month()
tick = 1
new_week(week, tick)
print week, tick
new_week(week, tick)
print week, tick
不管以后我告诉它多少次运行new\u week()函数并打印'week'和'tick'的值,它总是为这两个值打印1。。。为什么忽略“week=week+1”行和“tick”行??你知道吗
我正在运行Python2.7 btw
全局名称
week
和tick
被函数参数的名称所掩盖。你知道吗您需要删除这些参数(因为它们是不必要的),并将
week
和tick
声明为函数内的全局参数(这将允许您修改它们的值):输出:
但是请注意,许多Python程序员认为使用全局声明的函数非常不雅观。一个更具python风格的方法是使用一个值字典,并使用一个函数来递增它们。你知道吗
下面是一个非常简单的例子,让您开始:
输出:
首先,
week = week + 1
只是将(本地)名称week
重新绑定到一个新值;它不影响调用范围中的变量。但是,由于int
是不可变的,所以即使week+=1
也不会影响调用范围;它仍然只会更新函数localweek
变量。你知道吗一种选择是使用
dict
而不是单个变量。由于dict
是一个可变对象,因此可以将对dict
的引用作为参数传递,对该对象的更改将在调用范围中可见。你知道吗这是关于范围的。你知道吗
为了获得所需的结果,您需要:
tick
和week
在每次调用new_week
时都将继续递增。显然,tick
一旦达到4,就会重置。如果要将变量存储在list
或dict
中,则可以执行以下操作:使用
dict
:这将改变函数处理数据的方式:
请在此处阅读有关范围的内容:
https://www.inkling.com/read/learning-python-mark-lutz-4th/chapter-17/python-scope-basics
http://www.python-course.eu/python3_global_vs_local_variables.php
相关问题 更多 >
编程相关推荐