Python函数基础知识

本文详细介绍了Python函数的基础知识,包括形参、实参、动态传参、命名空间、返回值、闭包、迭代器、递归、装饰器和生成器。特别强调了生成器的创建方法、优点及使用方式,并探讨了推导式的应用。
摘要由CSDN通过智能技术生成

目录

函数的基础

形参:

实参:

动态传参:

不容易理解的地方:

return   返回值

命名空间

函数名:

闭包

如何分辨闭包:

闭包的作用:

迭代器:

递归:

装饰器:

作用:

使用情景:

扩展(带参装饰器)

生成器的三种创建办法:

定义:

优点:

使用方式:

推导式

列表推导式 [结果 for 变量 in 可迭代对象 if 筛选]

字典推导式 {键 : 值 for 变量 in 可迭代对象 if 筛选}   结果是 

集合推导式 {结果 for 变量 in 可迭代对象 if 筛选}



 


 

函数的基础

  1. # 申明方法

             def 方法名(形参):

                    代码块

  1. # 调用方法

              方法名(实参)

def demo(name,age):
    print(f'(我是{name},我今年{age}岁))

#调用方法
demo('admin',12)

形参:

位置形参:def demo(name,age)

默认值形参:def demo(name,age=12)

二者可以混合使用,但是 位置形参 必须在默认值形参之前

实参:

位置实参:demo('admin',12)

关键字实参: demo('admin',age=12)

二者可以混合使用,但是 位置实参 必须在关键字实参之前

动态传参:

*参数   是位置参数

**参数  是关键字参数 方法接受到的是字典 

位置参数>动态位置参数>关键字参数>动态关键字参数

 

在形参上:*聚合   **聚合

在实参上:*打散   **打散

格式:

*args  接受所有位置参数

lis = [1,2,3,4]
def function(*args): # 聚合 将打散的 内容 再次组成元组形式 (1,2,3,4)
    print(args)
    print(*args)

function(lis)   #
function(*lis)    #打散   *lis实际上就是 1,2,3,4

#结果:
([1, 2, 3, 4],)
[1, 2, 3, 4]

(1, 2, 3, 4)
1 2 3 4
 

**wargs 接受所有关键字参数*******************************************

dir = {'a':1,'b':2,"c":3,"d":4}
def function(**kargs): #这里将其聚合成 {'a':1,'b':2,"c":3,"d":4}
    # print(**kargs)  #报错 TypeError: 'a' is an invalid keyword argument for this function
    # print(*kargs)  # a b c d
    print(kargs)     #{'a': 1, 'b': 2, 'c': 3, 'd': 4}

function(**dir)  # 其实这里的是  a=1  b=2   c=3   d=4
# function(*dir) #报错 TypeError: function() takes 0 positional arguments but 4 were given
# function(dir) #报错 TypeError: function() takes 0 positional arguments but 1 was given


#注意 :
dir = {'a':1,'b':2,"c":3,"d":4}
def function(**kwargs):
    print(**kwargs)   #报错 TypeError: 'a' is an invalid keyword argument for this function
function(**dir)

为什么打印 **kwargs 会报错的原因是:
字典前加 ** 会将字典打散为 a=1,b=2,c=3,d=4。 
传入 function(**kwargs)方法后会被 **kwargs 全部接受 聚合成 {'a': 1, 'b': 2, 'c': 3, 'd': 4}
而 print(**字典)   则会将 字典再次打散为关键字参数, 
但是print 的方法的参数中是没有 **kwargs(接受所有的关键字参数的) , 因此会报错
但是 print()方法中是有 *args 参数的,也就是为什么print(*args) 并不会报错

不容易理解的地方:

def func(**kwargs):         
   print(kwargs)

dic = {"1":1}
func(**dic)

#结果:  {'1': 1}

#减少写参数量
# dic = {"1":1}
# func(**dic)  等同于 func("1"=1) 虽然后者报错,但是在实际空间中是以这种方式存储

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值