python基础10,,python基础10


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 = 1def func():    print(a)func()
技术图片

def func():    a = 1 func()print(a)
技术图片

  

#命名空间

  #就是python解释器一启动就可以使用的名字存储在内置命名空间中

  #内置的名字在启动解释器的时候被加载进内存里

#命名空间 有三种

#内置命名空间--------python解释器

  #就是python解释器一启动就可以使用的名字存储在内置命名空间中

  #内置的名字在启动解释器的时候被加载进内存里

#全局命名空间---------我们写的代码但不是函数中的代码

  #是在程序从上到下被执行的过程中依次加载进内存的

  #放置了我们设置的所有变量名和函数名

#局部命名空间--------函数

  #就是函数内部定义的名字

  #当调用函数的时候,才会产生这个名称空间随着函数执行的结束 这个命名空间就又消失了

#在局部:可以使用全局 内置命名空间中的名字

#在全局:可以使用内置命名空间中的名字,但是不能用局部中使用

def func():    a = 1func()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 = 1def func():    global a    a +=1func()print(a)a = 1b = 2def func():    x = ‘aaa‘    y = ‘bbb‘    print(locals())#本地的print(globals())print(locals())#本地的

func()
技术图片
def max(a,b):    return a if a > b else bdef  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‘)    innerouter()
技术图片

技术图片

技术图片

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 = 1def 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 = 1def 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 = 1def outer():    a = 1    def inner()

  

#nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量

#声明了nonlocal的内部函数的变量修改会影响到离当前函数最近一层的局部变量

#对全局无效

#对局部 也只是对最近的一层 有影响

#闭包:嵌套函数,内部函数调用外部函数的变量

   

python基础10

评论关闭