python基础10
昨日回顾:
def 函数名():
函数体
return 返回值
所有的函数 只定义不调用就一定不执行
先定义后调用
函数名() #不接收返回值
返回值 = 函数名() #接收返回值
#返回值
#没有返回值:默认返回None
#不写return :函数内的代码执行完毕自动结束
#只写return :结束一个函数
#return None
#返回一个值:结束了函数且返回一个值,可以是任意的值
#返回多个值:多个值之间用逗号隔开,接收的时候可以用一个变量接受(元祖),也可以用等量的多个变量接收
#参数
#形参 定义函数的时候
#位置参数:必须传
#*args:动态参数 可以接收任意多个按位置传入的参数
#关键参数:可以不传
#**kwargs:动态参数 可以接受任意多个按关键字传入的参数
#实参 调用函数的时候
#按照位置传参数
#按照关键字传参数
#可以混用 位置参数必须在关键字传参之前
#不能对一个参数重复赋值
def w娃哈哈(*args): print(args) #娃哈哈(1,2,3,4) l = [1,2,3,4] 娃哈哈(*l)
默认参数:
如果默认参数的住是一个可变数据类型
那么每一次调用函数的时候
如果不传值就公用这个数据类型的资源
def qqxing(l = []): l.append(1) print(l) qqxing() qqxing() qqxing() qqxing()
def qqxing(l = []): l.append(1) print(l) qqxing() qqxing([]) qqxing() qqxing() def qqxing(k,l ={}) l[k] = ‘v‘ print(l) qqxing(1) qqxing(2) qqxing(3)
#函数进阶
a = 1 def func(): print(a) func()
def func(): a = 1 func() print(a)
#命名空间
#就是python解释器一启动就可以使用的名字存储在内置命名空间中
#内置的名字在启动解释器的时候被加载进内存里
#命名空间 有三种
#内置命名空间--------python解释器
#就是python解释器一启动就可以使用的名字存储在内置命名空间中
#内置的名字在启动解释器的时候被加载进内存里
#全局命名空间---------我们写的代码但不是函数中的代码
#是在程序从上到下被执行的过程中依次加载进内存的
#放置了我们设置的所有变量名和函数名
#局部命名空间--------函数
#就是函数内部定义的名字
#当调用函数的时候,才会产生这个名称空间随着函数执行的结束 这个命名空间就又消失了
#在局部:可以使用全局 内置命名空间中的名字
#在全局:可以使用内置命名空间中的名字,但是不能用局部中使用
def func(): a = 1 func() print(a)
def max(): print(‘in max func‘) max()
max([])
print(max([1,2,3])) def max(l) print(‘in max func‘) print(max([1,2,3]))
#在正常情况下,直接使用内置的名字
#当我们在全局定义了和内置名字空间中间名的名字时,会使用全局的名字
#当我自己有时候 我就不找我的上级要了
#如果自己没有 就找上一级要 上一级没有再找上一级 如果内置的名字空间都没有 就报错
def input(): print(‘in input now‘) def func(): input() func()
def input(): print(‘in input now‘) def func(): input() func() print(id(func))
def func(): print(input) print(func)
#对于不可变数据类型 在局部可是查看全局作用域中的变量
#但是不能直接修改
#如果想要修改,需要在程序的一开始添加global声明
#如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将所有操作将对全局的变量有效
#作用域两种:
#全局作用域--------作用在全局-------内置和全局名字空间中的名字都属于全局作用域---global()
#局部作用域--------作用在局部-------函数(局部名字空间中的名字属于局部作用域)----locals()
a = 1 def func(): global a a +=1 func() print(a) a = 1 b = 2 def func(): x = ‘aaa‘ y = ‘bbb‘ print(locals())#本地的 print(globals()) print(locals())#本地的 func()
def max(a,b): return a if a > b else b def the_max(x,y,z):#函数的嵌套调用 c = max(x,y) return max(c,z) print(the_max(1,2,3))
def outer(): def inner(): print(‘inner‘) inner outer()
def outer(): a = 1 def inner(): print(‘inner‘) inner() outer() def outer(): a = 1 def inner(): print(a) print(‘inner‘) inner() outer()
def outer(): a = 1 def inner(): b = 2 print(a) print(‘inner‘) def inner2(): a +=1#不可变数据类型的修改 print(‘inner2‘) inner2() inner()outer()
def outer(): a = 1 def inner(): inner() print(a) outer()
a = 1 def outer() a = 1 def inner(): b = 2 print(a) print(‘inner‘) def inner2(): global a#声明了一个全局变量 a +=1#不可变数据类型的修改 print(‘inner2‘) inner2() inner() print(‘**a**:‘,a) outer()
#函数的嵌套定义
#内部函数可以使用外部函数的变量
a = 1 def outer(): a = 1 def inner(): b = 2 print(a) print(‘inner‘) def inner2(): nonlocal a #声明了一个上面第一层局部变量 a += 1 #不可变数据类型的修改 print(‘inner2‘) inner2() inner() print(‘**a**:‘,a) outer() print(‘全局:‘,a) a = 1 def outer(): a = 1 def inner()
#nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量
#声明了nonlocal的内部函数的变量修改会影响到离当前函数最近一层的局部变量
#对全局无效
#对局部 也只是对最近的一层 有影响
#闭包:嵌套函数,内部函数调用外部函数的变量
原文地址:https://www.cnblogs.com/xuweng/p/10500023.html