对于python传参理解
1、python传参
1。python 万物皆可以对象,这不同于传统传值或者传引用,而是这两种的升级版,传递对象。如果函数收到的是可变对象(list,dict,,,),在函数内操作对象,比如,添加,删除操作,会改变函数外的参数;如果是对参数进行赋值等操作,不会改变原参数,这相当于把参数名这个标签贴到另一个值上面。
如果函数收到是不可变对象(int,str,tuple),这时不会改变原参数值,只是将参数名便签指向另一个值,原来参数值被释放回收。
2.栗子
# 不可变参数
def num():
print(a) # 2
b = 3
print(b) # 3
a = 2
b = 2
num() # 2 3
print("-----")
print(a) # 2
print(b) # 2
# 为什么这里打印的是2呢,因为作用域不同,这里指向的就是全局变量
# 把函数作为域分界线,函数内是局部变量,函数外是全局变量
# 好比一班的小明,和二班的小明,只是名字相同,
# 可以理解为函数内重新定义了一个变量b = 3
# 为什么函数内的打印a 是2呢,因为函数内没有定义变量a,那么就往上层找,
# 1可变参数
def demo():
l.append("*")
print(l) # [1, 2, 3, '*']
l = [1, 2, 3]
demo()
print(l) # [1, 2, 3, '*']
# demo函数内打印出[1, 2, 3, '*'],这里就跟上面的函数内打印的a = 2 一样
# 因为函数内没有定义变量a,那么就往上层找,拿到l对象
# 2可变参数
def demo():
l = [4, 5, 6]
print(l) # [4, 5, 6]
l.append("*")
print(l) # [4, 5, 6,'*']
l = [1, 2, 3]
demo()
print(l) # [1, 2, 3]
# 为什么这里打印出的l不一样呢,因为函数内重新定义了变量l,是局部变量
# 解决方案:global
# 不可变参数
def num():
print(a) # 2
global b
b = 3
print(b) # 3
a = 2
b = 2
num() # 2 3
print("-----")
print(a) # 2
print(b) # 3 # 这里打印出3是因为函数内声明把3赋值给b(因为全局变量定义了b变量,跟上面的含义就不一样了)
一万小时定律
人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。
一万小时的锤炼是任何人从平凡变成超凡的必要条件。