博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python基础10
阅读量:6003 次
发布时间:2019-06-20

本文共 3590 字,大约阅读时间需要 11 分钟。

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的内部函数的变量修改会影响到离当前函数最近一层的局部变量

#对全局无效

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

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

 

   

 

转载于:https://www.cnblogs.com/xuweng/p/10500023.html

你可能感兴趣的文章
Ubuntu 10.04升级git 到1.7.2或更高的可行方法
查看>>
MyBATIS(即iBATIS)问题集
查看>>
Linux下autoconf和automake使用
查看>>
UDP之socket编程
查看>>
Spring Security4实战与原理分析视频课程( 扩展+自定义)
查看>>
Centos6.5升级系统自带gcc4.4.7到gcc4.8.0
查看>>
redis安装与配置文件详解
查看>>
VMware安装失败 “Failed to create the requested registry key Key:installer Error:1021"
查看>>
虚拟化系列-VMware vSphere 5.1 VDP备份管理
查看>>
接口设计
查看>>
同步工具类 java.util.concurrent.CountDownLatch
查看>>
带动量因子的BP网络源码(C#实现)
查看>>
Skia深入分析9——延迟渲染和显示列表
查看>>
mmap函数实现共享内存
查看>>
java笔记
查看>>
贪吃蛇和俄罗斯方块软件
查看>>
消息队列服务器 memcacheq的搭建
查看>>
Bringing up interface eth0: Device eth0 does not seem to be present ,delayin
查看>>
解决输入ipconfig后出现ipconfig不是内部或外部命令
查看>>
跟我一起学docker(七)--网络
查看>>