def add(x, y): print(x, y) #输出:10 20 return x + y # 返回值, return之后的语句将不会再执行 print(x) print(y) add(10,20)
def add(x, y): print(x, y) # 输出:1 2 return x + y # 函数体内,碰到return语句,函数执行完毕,以后的语句将不会再执行 return x - y # 不会再次执行 add(1,2)
def get_data(x,y,z): return x + 1, y + 1, z + 1 print(get_data(1,2,3)) # 获得的是一个元组(2, 3, 4)
def get_data(x,y,z): return [x + 1, y + 1, z + 1] print(get_data(1,2,3)) # 获得的是一个列表[2, 3, 4]
def outer_function(): # 内部函数 def inner_function(): print("inner_function") # 输出:inner_function print("outer_function") # 输出:outer_function # 内部调用 inner_function() outer_function() # 注意:inner_function函数只能在outer_function函数内部调用,没法再outer_function函数外部被调用
def add(x, y): z = 100 print(x, y , z) #输出:1 2 100 add(1,2) print(z) #报错:NameError: name 'z' is not defined
z = 100 def add(x, y): print(x, y, z)# 输出:1 2 100 add(1, 2) print(z) # 输出:100
# 例1 x=5 def add(): y = x + 1 print(y) #输出:6 add() # 例2 x=5 def add(): x = x + 1 # 报错:local variable 'x' referenced before assignment add() # 报错缘由分析: # 在例1中,函数内部引用的x为函数外部的x, 所以x的值为5 # 在例2中,函数内部从新定义了x的值,那么整个函数内部都会使用这个内部x, # 所以在运算x + 1的时候,x尚未完成定义就被引用了,这里的x引用的必定是内部正在定义的 x,不是函数外部的 x=5这个x; # 例3: x=5 def add(): print(x) # 这里的x引用的是x = 1的x,可是执行print(x)时,x尚未被定义,因此报错:local variable 'x' referenced before assignment x = 1 add()
# 例4: def outer_function(): x = 100 def inner_function(): print(x) # 内部函数引用了外部函数的自由变量 输出:100 return inner_function ret = outer_function() ret()
x=1 def add(): global x # 使用global关键字,指定x的引用全局的x变量 x = x + 1 print(x) #输出:2 add() x = 100 def foo(): global x # x被声明了全局变量 x = 10 x += 1 print(x) # x的值为11 foo() print(x) # 输出x的值为:11,本来这里应该引用的是全局变量x = 100 的,所以global关键字污染了全局变量 x
def outer_function(): x = 100 def inner_function(): x = x + 1 # 这样会报错,函数内部从新定义了x的值,可是尚未完成定义就被引用了 print(x) return inner_function ret = outer_function() ret() def outer_function(): x = 1 def inner_function(): nonlocal x # 使用nonlocal关键字声明x 为外层函数的x的值 x = x + 1 #因此这里使用的x 是外层函数的x print(x) #输出:2 return inner_function ret = outer_function() ret()
def add(lst = []): lst.append('hello') print(lst) add() # 输出:['hello'] print('id={}'.format(id(add))) # 函数对象的id值不变,调用的是同一个函数 id=1837000 add() # 输出['hello', 'hello'] print('id={}'.format(id(add))) # 函数对象的id值不变,调用的是同一个函数 id=1837000 # 查看函数的位置参数的默认值 print(add.__defaults__) #输出:(['hello', 'hello'],) # 查看函数的关键字参数的默认值 print(add.__kwdefaults__) #输出:None
def add(lst = []): lst = lst[:] lst.append('hello') print(lst) add() # 输出:['hello'] add() # 输出:['hello']
def add(lst=None): if lst is None: lst = [] lst.append(1) print(lst) add() # 输出:[1] print(add.__defaults__) # 输出: (None,) add([1, 2, 3]) # 输出: [1, 2, 3, 1] print(add.__defaults__) # 输出:(None,) add([4, 5, 6]) # 输出:[4, 5, 6, 1] print(add.__defaults__) # 输出:(None,)
def add(): print('add') del add add()
参考:侠课岛(9xkd.com)Python同窗计划闭包