day10:函数的实参&形参

函数的参数 (参数:配合函数运算的值)
参数:
      (1)形参:形式参数,在函数的定义处
      (2)实参:实际参数,在函数的调用处

形参: 普通形参(位置),默认形参,普通收集形参,命名关键字形参,关键字收集形参
实参: 普通实参,关键字实参

遵循原则:
形参和实参要一一对应

1.普通形参

# 1.普通形参
# 函数的定义处
"""hang,lie是函数的普通形参"""
def s_star(hang,lie):
    i = 0
    while i < hang:
        j = 0
        while j < lie:
            print("*",end="")
            j+=1
        print()
        i+=1
        
 函数的调用处
10,10 是函数的实际参数"""
s_star(10,10)
s_star(3,8)

2.默认形参

 2.默认形参
def s_star(hang=10,lie=10):
    i =
在函数调用时:
    如果给予实参,那么直接使用实际参数
    如果没有给予实参,那么使用参数默认自带的值 

s_star()  10行10列小星星
s_star(3,8)  3行8列小星星
s_star(4)  4行10列小星星

3.普通形参+默认形参 

默认形参必须跟在普通形参的身后,顺序是一定的

 3.普通形参 + 默认形参def s_star(hang,1)"> 函数的调用处
s_star(3,3)  3行3列
s_star(3)  3行10列
s_star()  error

4.关键字实参

关键字实参是对具体的某个参数赋值,具体的顺序可以打乱

 4.关键字实参
 函数的定义处
()
        
        i+=1

 函数的调用处
s_star(hang=4,a=1,b=2,c=3,d=4,lie=5)
s_star(c=3,lie=5,hang=4,b=2)  关键字实参参数顺序可以打乱

5.普通实参+关键字实参

关键字实参必须跟在普通实参的身后,1)"> 5.普通实参 + 关键字实参 s_star(5,6,99,c=7,d=8,lie=9) s_star(c=7,lie=9,5,99) error 关键字实参必须跟在普通实参的后面 s_star(5,1,c=2,d=3,lie=10,b=5) ok s_star(5,a=5) error 重复给a赋值,错误

6.要注意区分默认形参和关键字实参

默认参数和关键字实参 在写法上一模一样
默认形参是在函数的定义处
关键字实参是在函数的调用处

7.普通收集参数 *args


1.普通收集参数:    专门用来收集多余的没人要的普通实参
    def func(*args):
        code...
    *args => arguments(参数)
    在args这个参数的前面加上一个*表达普通收集参数,形成一个元组
"""

 基本使用
def func(a,*args):
    print(a,c)  1 2 3
    print(args)  (4,7,8)
    
func(1,2,3,4,8)

 计算任意个数的累加和
def func(*args):
    total =for i in args:
        total += i
    (total)
    
func(1,10,11,100)

8.关键字收集参数 **kwargs


2.关键字收集参数 : 专门用来收集多余的没人要的关键字实参
    def func(**kwargs):
        code1...
    **kwargs => keyword arguments
    在kwargs参数的前面加上2个**表达关键字收集参数,形成一个字典
def func(a=1,**kwargs):
    (a,c)
    print(kwargs)  {'f': 1,'g': 2,'j': 3}

func(f=1,g=2,j=3,a=15,b=16,c=17 任意个数字符串的拼接

班长:宋云杰
班花:刘彩霞
班草:刘子涛
吃瓜群众:牧树人,晏国彰,刘聪
def func(**(kwargs)
     定义一个字典,存放每一位同学的身份
    dic = {monitor":班长class_flower班花class_grass班草"}
    strvar1 = 
    strvar2 = ""
    
     遍历字典中的键值对
    for k,v  kwargs.items():
        print(k,v)  monitor 宋云杰  class_flower 刘彩霞 class_grass 刘子涛 ....
         判断键是否在字典当中,如果在,获取对应的身份,拼装成字符串
        if k  dic:
            strvar1 += dic[k] + :" + v + \n"  班长 + ":" + 宋云杰 + '\n'
        else:
            strvar2 += v + ,"
    
     去掉右边多余的\n和,形成最后的效果
    (strvar1.strip())
    吃瓜群众:"+ strvar2.rstrip())
    


func(monitor=宋云杰刘彩霞刘子涛牧树人晏国彰刘聪")

9.命名关键字参数

 3.命名关键字参数

定义命名关键字参数的两种方式:
    (1)def func(a,*,c) c是命名关键字
    (2)def func(*args,**kwargs) c是命名关键字参数
    在函数调用时,必须使用命名关键字参数来进行赋值
 定义方式一
 1 2
    print(d)  3
    print(c)  10
 定义方式二
def func(*args,1)"> (1,6)
     100
     {'a': 1,'b': 2,'d': 6}

func(1,d=6,c=100)

10.关于* 和 ** 的使用方法

* 和 ** 在函数的定义处,用来做收集操作,打包
* 和 ** 在函数的调用处,1)">打散操作,解包

 * 解包列表
(c,d)  
lst = [1,2]
 *把列表里面的所有元素拿出来,当成参数一个一个赋值给func进行调用
func(*lst,d=4 ** 解包字典
c":3,1)">d":4}
 **把字典里面的所有元素拿出来,拼装成键=值的参数形式,赋值给func进行调用
func(1,**dic,)  func( c=3,d=4 )

 *和**的组合
func(*lst,1)">dic)
strvar = abc"
print(*strvar)

11.形参定义的顺序

当所有参数都在一起的时候,按照什么顺序定义呢?
参数定义的顺序:普通参数 -> 默认参数 -> 普通收集参数 -> 命名关键字参数 -> 关键字收集参数
收集到所有的实参: def func(*args,**kwargs)

12.关于所有参数混合的练习题

def f1(a,c=0,*args,1)">kw):
    'a =',1)">b =c =args =kw ='def f2(a,1)">d = 以上两个函数 打印结果

 第一题
f1(1,2)  a=1,args=(),kw={}
f1(1,c=3) ab') 
f2(1,d=99,ext=None)  第二题
args = (1,4)
kw = {': 99,1)">x': #}
f1(*args,**kw)  第三题
myargs = (1,3)
mykw = {': 88,1)">}
f2(*myargs,**mykw) a=1,d=88,kw={x:#}

 第四题
(d)
f1(1,d=67,x=99,y=77) 版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Python中的函数(二) 在上一篇文章中提到了Python中函数的定义和使用,在这篇文章里我们来讨论下关于函数的一些更深的话题。在学习C语言函数的时候,遇到的问题主要有形参实参的区别、参数的传递和改变、变量的作用域。同样在Python中,关于对函数的理解和使用也存在这些问题。下面来逐一讲解。一.函
Python中的字符串 可能大多数人在学习C语言的时候,最先接触的数据类型就是字符串,因为大多教程都是以&quot;Hello world&quot;这个程序作为入门程序,这个程序中要打印的&quot;Hello world&quot;就是字符串。如果你做过自然语言处理方面的研究,并且用Python
Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程。下面就来了解一下如何在Python中进行对象编程。一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法。 类是对现实世界中一些事物的封装,
Python面向对象编程(二) 在前面一篇文章中谈到了类的基本定义和使用方法,这只体现了面向对象编程的三大特点之一:封装。下面就来了解一下另外两大特征:继承和多态。 在Python中,如果需要的话,可以让一个类去继承一个类,被继承的类称为父类或者超类、也可以称作基类,继承的类称为子类。并且Pytho
Python中的函数(一) 接触过C语言的朋友对函数这个词肯定非常熟悉,无论在哪门编程语言当中,函数(当然在某些语言里称作方法,意义是相同的)都扮演着至关重要的角色。今天就来了解一下Python中的函数用法。一.函数的定义 在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明
在windows下如何快速搭建web.py开发框架 用Python进行web开发的话有很多框架供选择,比如最出名的Django,tornado等,除了这些框架之外,有一个轻量级的框架使用起来也是非常方便和顺手,就是web.py。它由一名黑客所创建,但是不幸的是这位创建者于2013年自杀了。据说现在由
将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime Text 2这款编辑器,然后这段时间就试了一下,就深深地喜欢上这款编辑器了...
Python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句&quot;#include&lt;math.h&gt;&quot;引入math.h这个头文件,否则是无法正常进行调用的。那么在Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中
Python的基础语法 在对Python有了基础的认识之后,下面来了解一下Python的基础语法,看看它和C语言、java之间的基础语法差异。一.变量、表达式和语句 Python中的语句也称作命令,比如print &quot;hello python&quot;这就是一条语句。 表达式,顾名思义,是
Eclipse+PyDevʽjango+Mysql搭建Python web开发环境 Python的web框架有很多,目前主流的有Django、Tornado、Web.py等,最流行的要属Django了,也是被大家最看好的框架之一。下面就来讲讲如何搭建Django的开发环境。一.准备工作 需要下载的
在windows下安装配置Ulipad 今天推荐一款轻便的文本编辑器Ulipad,用来写一些小的Python脚本非常方便。 Ulipad下载地址: https://github.com/limodou/ulipad http://files.cnblogs.com/dolphin0520/u...
Python中的函数(三) 在前面两篇文章中已经探讨了函数的一些相关用法,下面一起来了解一下函数参数类型的问题。在C语言中,调用函数时必须依照函数定义时的参数个数以及类型来传递参数,否则将会发生错误,这个是严格进行规定的。然而在Python中函数参数定义和传递的方式相比而言就灵活多了。一.函数参数的
在Notepad++中搭配Python开发环境 Python在最近几年一度成为最流行的语言之一,不仅仅是因为它简洁明了,更在于它的功能之强大。它不仅能够完成一般脚本语言所能做的事情,还能很方便快捷地进行大规模的项目开发。在学习Python之前我们来看一下Python的历史由来,&quot;Pytho
Python中的条件选择和循环语句 同C语言、Java一样,Python中也存在条件选择和循环语句,其风格和C语言、java的很类似,但是在写法和用法上还是有一些区别。今天就让我们一起来了解一下。一.条件选择语句 Python中条件选择语句的关键字为:if 、elif 、else这三个。其基本形式如
关于raw_input( )和sys.stdin.readline( )的区别 之前一直认为用raw_input( )和sys.stdin.readline( )来获取输入的效果完全相同,但是最近在写程序时有类似这样一段代码:import sysline = sys.stdin.readline()
初识Python 跟学习所有的编程语言一样,首先得了解这门语言的编程风格和最基础的语法。下面就让我们一起来了解一下Python的编程风格。1.逻辑行与物理行 在Python中有逻辑行和物理行这个概念,物理行是指在编辑器中实际看到的一行,逻辑行是指一条Python语句。在Python中提倡一个物理行只
当我们的代码是有访问网络相关的操作时,比如http请求或者访问远程数据库,经常可能会发生一些错误,有些错误可能重新去发送请求就会成功,本文分析常见可能需要重试的场景,并最后给出python代码实现。
1.经典迭代器 2.将Sentence中的__iter__改成生成器函数 改成生成器后用法不变,但更加简洁。 3.惰性实现 当列表比较大,占内存较大时,我们可以采用惰性实现,每次只读取一个元素到内存。 或者使用更简洁的生成器表达式 4.yield from itertools模块含有大量生成器函数可
本文介绍简单介绍socket的常用函数,并以python-kafka中的源码socketpair为例,来讲解python socket的运用
python实践中经常出现编码相关的异常,大多网上找资料而没有理解原理,导致一次次重复错误。本文对常用Unicode、UTF-8、GB2312编码的原理进行介绍,接着介绍了python字符类型unicode和str以及常见编解码错误UnicodeEncodeError和UnicodeDEcodeEr