python之函数的传参形参的第三种动态参数*args和**kwargs

1. 位置/关键字传参的缺点

当给函数传入的参数数目不定时,之前的传参方式解决不了问题。

def eat(food1,food2,food3):
    print(f'我请你吃:{food1},{food2},{food3}')
eat('蒸羊羔','蒸熊掌','蒸鹿尾')

万能参数,动态参数。 *args
def eat(food1,food2,food3):
    print(f'我请你吃:{food1},{food2},{food3}')
eat('蒸羊羔','蒸熊掌','蒸鹿尾','烧花鸭','烧企鹅')

2. args 作用: **

  • 在实参角度:定义一个函数时,* 所有的位置参数聚合到一个元组中
  • *args传入位置参数
  • retrun后面跟args返回的是一个元组
def eat(*args):  # 在实参角度:定义一个函数时,* 所有的位置参数聚合到一个元组中。
    print(args)
    print(f'我请你吃:{args}')
# eat('蒸羊羔','蒸熊掌','蒸鹿尾','烧花鸭','烧企鹅')

练习题

函数接收不定个数的数字实参,将最终的和返回出去
def sum1(*args):
    # print(args)  (100, 2, 67, 3)
    result = 0
    for i in args:
        result += i
    return result
print(sum1(100,2,67,3))

3. kwargs作用 (重要性*****)

  • 函数的定义时:**将实参角度所有的关键字参数聚合成了一个字典,给了kwargs.
  • **wkargs传入关键字参数
  • retrun 后面跟**kwargs返回的是一个字典
def func(**kwargs):  # 函数的定义时:**将实参角度所有的关键字参数聚合成了一个字典,给了kwargs.
    print(kwargs)
func(name='alex',age=84,hobby='唱跳rap篮球')

特点:关键字形式的,一传传一堆,不管你传入多少实参

练习题

# *args,**kwargs 万能参数
def func(*args,**kwargs):
    print(args,kwargs)

# func(1,2,4,'fjdksal',age=84,hobby='唱跳rap篮球')

一句话总结:

*args在实参角度: 函数定义时, 将传入的值聚合到一个元组当中,返回的是元组

**kwargs在实参角度,函数定义时, 将传入的值聚合成一个字典,返回的是字典

用法:

l1 = [1,2,3]
dic1 = {'name':'太白','age':18}
def func(a,*args,**kwargs):
    print(args)  # (1, 2, 3,'太白', 'wusir', '景女神')
    print(kwargs)
func(1,l1,dic1,hobbie = '唱歌')

# 输出结果
([1, 2, 3], {'name': '太白', 'age': 18})
{'hobbie': '唱歌'}

# 个人见解,复习看这个就好
a传入的是位置参数1,*args传入的是l1和dic1(如果dic1后面还有位置实参还可以传给*args, **kwarg传入的hobbie = '唱歌'关键字参数)
# 记住一点就好:**args传入位置参数,不管写多少,都聚合到一个元组中,输出或返回. **kwargs传入的是关键字参数,不管有多少,都聚合成一个字典输出或返回

原文地址:https://www.cnblogs.com/zanao/p/11047878.html

时间: 2024-11-05 12:33:10

python之函数的传参形参的第三种动态参数*args和**kwargs的相关文章

asp.net 页面通过URL传参中文乱码的三种解决方案

1.编码 string state=Server.UrlEncode(stateName.Text.Trim());Response.Redirect("aaa.aspx?state="+state+""); 2.解码(aaa.aspx) string state= Server.UrlDecode(Request.QueryString["state"].ToString()); 是GB2312编码的,参数传值是UTF-8编码的 解决的方法一般

Python之函数(一)定义函数以及传参

定义函数以及传参 函数的定义 def 函数名(): 函数体 例子: def func():#def关键字--定义 func函数名--和变量定义规则一样 ()必须要写格式 :声明 语句结束 s=[1,2,3] count=0 for i in s: count+=1 print(count) 调用函数: def my_len(): s = (1,2,23,3,4,5,6) count = 0 for i in s: count += 1 print(count) #调用函数 函数名+() myle

PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值

<?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo "<br />"; echo "<hr />"; } say_hello();//函数调用 function say_helloS($some_name)//有参数 { echo "hello,".$some_name; echo

C#为什么不能像C/C++一样的支持函数只读传参

C#为什么不能像C/C++一样的支持函数只读传参? 这个问题其实问的人挺多的,我自己也经常想实现这个功能,但是发现总是那么的不尽人意. 有些人倒是给出了一下答案,但是都不能很好的解决像C/C++一样的支持函数只读传参这个问题. 其实这块我觉得我们可能有个误区.就是我们为什么要这样做呢?这样做的目的是什么?对了就是这个.答案也在这里面.关键就在这目的上.我们用C/C++可能有 function(Data const * const pcData),但是在C#里面没有了.感觉似乎少了点什么.对就是少

函数间传参实例(前一个函数产生的数据传到给后一个函数应用)

场景描述:A函数通过一系列的请求与执行,创建并产生订单 B函数获取该订单,然后查询该订单,获取订单信息 本次实例的关键就是,A产生的订单号,传给B,实现函数间传参 代码如下: import requests # 先导入包,这是必须的 import json ordid="190416111501017074" #A函数产生的订单号,具体过程不在此书写 #ordid为定义的变量,需要写到下面函数的括号中,可理解为把变量ordid传到函数search中 def search(ordid):

【机器学习算法-python实现】协同过滤(cf)的三种方法实现

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 协同过滤(collaborative filtering)是推荐系统常用的一种方法.cf的主要思想就是找出物品相似度高的归为一类进行推荐.cf又分为icf和ucf.icf指的是item collaborative filtering,是将商品进行分析推荐.同理ucf的u指的是user,他是找出知趣相似的人,进行推荐.通常来讲icf的准确率可能会高一些,通过这次参加天猫大数据比赛,我觉得只有在数据量非

初识python 函数(定义,传参,返回值)

python基础(二): 菜鸟教程基础知识讲解的非常全面,内容选择我认为的重点输出一遍 函数: 定义一个函数: 你可以定义一个由自己想要功能的函数,以下是简单的规则: def fun(arg): pass return arg # 函数调用语法 fun(arg) arg:argument,参数(也叫prarmeter) ,任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数. def:define,定义,创建函数 ,函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()

调用同事函数引发的坑--------python 传值引用和传参引用

调用同事的函数,传入goods_list,获取商品信息,然后将商品信息与goods_list的信息进行匹配,合并. 但是同事返回数据的同时改变了我传入的参数,goods_list.相当于传参引用,也就是在内存中相同的地址进行更改数据, 将我传入的参数goods_list 进行覆盖.导致我的参数不能匹配. 特此记录: 先看一个例子 t_list = [1, 2]t_dict = {"a":"haha", "b":"hehe"}t

第九天 什么是函数,函数的return的用法,函数的传参

1 函数 1内置函数(Python解释器中自带的函数,可以直接调用) 2自定义函数(自己写的函数) 注意自己写的函数,必须先定义,在调用,定义了的函数可以在任意位置调用 什么是函数 函数就是具有某个具体功能的工具 为什么要用函数 提供开发效率 减少代码冗余 提高程序的扩展性 定义一个函数 def是定义函数的关键字 函数名:函数名的命名规则与变量名一致 1.不能以关键字(******) 2.函数也应该做到见名知意 函数在定义的时候只检测函数体语法 不执行函数体代码 def func(): prin