当前位置:首页>编程日记>正文

第九天函数

本站寻求有缘人接手,详细了解请联系站长QQ1493399855

 

---恢复内容开始---

一.定义

形参:在定义函数时括号内的参数,其实就是变量名

实参:在调用函数时括号内的参数,其实就是变量的值

举个例子:

def func(x,y):(x,y就是形参)

print(x)

print(y)

func(10,5):(10和5就是实参)

二.位置参数

位置即顺序,就是按位置从左到右的的顺序依次定义的参数

2.1位置形参:在定义函数时按照位置定义的形参

def func(x,y,z)

     print(x,y,z)

注意点:再调用函数的时候必须为其传值,一个也不能多一个也不能少。

2.2位置实参:在调用函数时,按照位置定义的实参

func(1,2,3)

注意:位置实参会和形参一一对应

三.关键字参数

定义:在调用函数时以key=value的形式来定义的实参,称之为关键字实参

def foo(x,y,z)

print(x,y,z)

需要注意一下几点:

1相当于指名道姓的为形参传值,意味着即便不按顺序定义也能够为形参传值

foo(x=1,y=2,z=3)

2.在调用函数时,位置实参和关键字实参可以放一起使用但必须遵循以下规则:

①必须遵循形参规则

 foo(1,z=3,y=2)

foo(1,z=3)#少一个参数都不行

②不能为同一个形参重复传值

foo(1,x=1,y=2,z=3)

③位置实参必须放到关键字实参前面

foo(z=3,y=2,1),错

foo(1,z=3,y=2)

四:默认参数

定义:在定义阶段已经为某一个形参赋值,那么该形参就会默认参数

注意事项:

①在定义阶段有值,意味着调用阶段可以不用传值

②位置形参必须在默认参数的前面

③默认参数的值只在定义阶段赋值一次,也就是说默认参数的值在定义阶段就已经赋值死了

④默认参数的值应该设置为不可变类型

五.可变长度的参数

定义:可变长指的是实参值的个数不固定
        而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs

5.1形参中包含

①*args:*会将溢出部分的参数全部接收,然后保存成为元组的形式赋值给args

def func(x,y,z,*args)

print(x,y,z,args)

func(1,2,3,4,*[5,6,7,8])

②**kwargs:**会将溢出的部分的参数全部接收,然后保存成字典的形式赋值给kwargs

def foo(x,y,**kwargs):

     print(x,y)

     print(kwargs)

foo(1,y=2,a=1,b=2,c=3)

5.2实参中包含*:就把该实参的值打散

def foo(x,y,*args):

     print(args)

foo(1,2,*[3,4,5])

 

def foo(x,y,z)

      print(x,y,z)

foo(*[1,2,3]) #foo(1,2,3)

foo(*[1,2])#foo(1,2)#报错

5.3实参中包含**,就是把实参的值打撒

 

def foo(x,y,z):
print(x,y,z)

foo(1,**{'z':3,'y':2}) #foo(1,z=3,y=2)
foo(1,**{'z':3,'y':2,'x':111}) #foo(1,z=3,y=2,x=111)#报错,不能给一个形参多重赋值

5.4
组合使用

def wrapper(*args,**kwargs): #args=(1,2,3),kwargs={'x':1,'y':2,'z':3}
     print(args)
     print(kwargs)
index(*args,**kwargs) # index(*(1,2,3),**{'x':1,'y':2,'z':3}) # index(1,2,3,z=3,y=2,x=2)

wrapper(1,2,3,x=1,y=2,z=3)

6.命名关键字参数:

定义:在*后面的参数都是命名关键字参数
特点:①必须被传值

     ②约束函数的调用者必须用key=value的形式传值

     ③约束函数调用者必须用指定的key名

例子:

1.

def foo(x,y,*,z)

    print(x,y,z)

foo(1,2)

foo(1,2,3)

foo(1,2,z=3)#正确

2.

def auth(*args,name,pwd)

print(name,pwd)
auth(pwd='213',name='egon')

7.1函数的嵌套调用:在函数内又调用了其它函数

例如:

def max2(x,y):

  if x>y:
    return x

     else:

           return y

def max3(x,y,z):
  res1=max2(x,y)

  res2=max2(res1,z)

      return res2

print(max3(11,199,2))

结果输出:199

7.2函数的嵌套定义:在函数内又定义其它函数 

def func1():

      print('from func1')

     def func2(): #func2=内存地址
          print('from func2')

     print(func2) #<function func1.<locals>.func2 at 0x0000024907A098C8>
     func2()
    func2()
    func2()
func1()

8.名称空间与作用域

一.名称空间:存放名字与绑定关系的地方

二.名称空间分三类:
1.内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,解释器关闭就失效

2.全局名称空间:文件级别的名字,在执行文件的时候生效,在文件结束或者文件执行期间被删除则失效

3.局部名称空间:存放函数内定义的名字(函数的参数内的名字都存放与局部名称空间)在函数调用时临时生效,函数结束时则失效

加载顺序:内置名称空间==》全局名称空间==》局部名称空间

查找名字:局部名称空间==》全局名称空间==》内置名称空间

三.作用域

①全局作用域:包含的是内置名称空间与全局名称空间的名字

特点:1️⃣在任何位置都能访问的到

         2️⃣在该范围内的名字会伴随程序整个生命周期

②局部作用域:包含的是局部名称空间的名字

特点:1️⃣只能在函数内使用

         2️⃣调用函数时生效,调用时结束

9.函数在python中时第一类对象

1️⃣可以被引用

2️⃣可以当作参数引用

3️⃣可以当作函数的返回值

4️⃣可以当作容器类型的元素

10.闭包函数

1️⃣指的是定义在函数内部的函数

2️⃣并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数

作用域关系:在函数定义阶段就规定死了,与调用位置无关

---恢复内容结束---


http://www.coolblog.cn/news/28224fb0cd0eb757.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • Mac原生Terminal快速登录ssh
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • mysql commit 机制_1024MySQL事物提交机制
  • 2019-9
  • jquery 使用小技巧
  • 科学计算工具NumPy(3):ndarray的元素处理
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • linux批量创建用户和密码
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • js常用阻止冒泡事件
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • 气泡图在开源监控工具中的应用效果
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • 【设计模式】 模式PK:策略模式VS状态模式
  • CSS小技巧——CSS滚动条美化
  • JS实现-页面数据无限加载
  • 最新DOS大全
  • Django View(视图系统)
  • 阿里巴巴分布式服务框架 Dubbo
  • 阿里大鱼.net core 发送短信
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 程序员入错行怎么办?
  • 两张超级大表join优化
  • Arm芯片的新革命在缓缓上演
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • 《看透springmvc源码分析与实践》读书笔记一
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • 通过Spark进行ALS离线和Stream实时推荐
  • 行为模式之Template Method模式