第九天函数

 

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

一.定义

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

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

举个例子:

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(x,y)

     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️⃣并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数

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

 

 

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

转载于:https://www.cnblogs.com/shengg/p/8657596.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值