参数可以让你的函数更灵活,不只能做死的动作,还可以根据调用时传参的不同决定函数内部的执行流程。

  • 形参:只有在被调用时才分配内存单元,在调用结束时,即可释放所分配的内存单元。因此形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
  • 实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值、输入等办法使参数获得确定值。
def calc(x,y): #x,y是形参
res = x**y
return res c = calc(a,b) #a,b是实参
print(a,b)
  • 默认参数
def stu_register(name,age,country,course):
print('----注册学生信息----')
print('姓名:',name)
print('年龄:',age)
print('国籍:',country)
print('课程:',course) stu_register('王山炮',22,'CN','python_devops')
stu_register('张叫春',21,'CN','linux')
stu_register('刘老根',25,'CN','linux')

发现country这个参数基本都是 'CN' 。

就像我们在网站上注册用户,像国籍这种信息,你不填写,默认就会是 中国 ,这就是通过默认参数实现的,把country变成默认参数非常简单。

这样,这个参数在调用时不指定,那默认就是CN,指定了的话,就用你指定的值。

def stu_register(name,age,course,country = 'CN'):
  • 关键参数

正常情况下,给函数传参数要按照顺序,不想按顺序就可以用关键参数,只需指定参数名即可(指定了参数名的参数就叫关键参数),但记住一个要求就是,关键参数必须放在位置参数(以位置顺序确定对应关系的参数)之后。

def stu_register(name,age,course='PY',country = 'CN'):
print('----注册学生信息----')
print('姓名:',name)
print('年龄:',age)
print('国籍:',country)
print('课程:',course)

可以这样调用:

stu_register('王山炮',course='PY',age=22,country='JP')

不可以这样调用,不能把位置参数放在关键参数后面

stu_register('王山炮',course='PY',22,country='JP')

不可以这样调用,不能给一个参数赋两个值

stu_register('王山炮',22,age=25,country='JP')
  •  非固定参数
#报警,一个运维人员
def send_alert(msg,user):
print(msg,',',user) send_alert('别浪了','alex') #报警,10个运维人员
send_alert('别浪了','alex')
send_alert('别浪了','xxx')
send_alert('别浪了','ooo')
如果参数中出现*args,传递的参数就可以不再是固定个数,传过来的所有参数都会被打包成元组发送给变量。
def send_alert(msg,*args):
for u in args:
print(msg, ',', u)
#方式一:
send_alert('别浪了', 'alex','xxx','ooo')
#方式二:
send_alert('别浪了',*['alex','xxx','ooo'])#要输入一个列表或者元组的话,要在前面加上*,让 (['alex','xxx','ooo']) -> ('alex','xxx','ooo')
带*的参数要放在最后,不然不带*的参数就没有输入值了,因为带*的参数会把后面所有的输入打包,会截胡。
def send_alert(msg,*args,age):
for u in args:
print(msg,u,age)

**kwargs只接收关键参数,以字典形式存储。

>>> def func(name,*args,**kwargs):
... print(name,*args,*kwargs)
...
>>> func('alex',22,'tesla','500w') #*args把位置参数后所有的输出元素都截胡了
alex 22 tesla 500w >>> func('alex',22,'tesla','500w',addr='山东',num=2333) #以关键参数形式输出的全部打包成字典发送给**kwargs
alex (22, 'tesla', '500w') {'addr': '山东', 'num': 2333} >>> d = {'degree':'primary school'}
>>> func('Peiqi',d) #默认d为*args的参数
Peiqi ({'degree': 'primary school'},) {} >>> func('Peiqi',**d) #用于直接给**kwargs赋值
Peiqi () {'degree': 'primary school'}

Python全栈之路----函数----参数的更多相关文章

  1. Python全栈之路----函数----返回值

    函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句,把结果返回. def stu_register(name,age,course='PY',country='CN'): prin ...

  2. Python全栈之路----函数进阶----装饰器

    Python之路,Day4 - Python基础4 (new版) 装饰器 user_status = False #用户登录后改为True def login(func): #传入想调用的函数名 de ...

  3. Python全栈之路----函数----作用域

    Python中,一个函数就是一个作用域. 局部变量放置在其作用域中,根据作用域来区分,函数属于你,函数属于我. 定义完成后,作用域已经生成,使用时顺着作用域链向上查找. 函数定义完成后,不管被在哪儿被 ...

  4. Python全栈之路----函数----高阶函数

    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一函数作为参数,这种函数就称之为高阶函数. 只需满足以下任意一个条件,即是高阶函数: 接收一个或多个函数作为输入 def func(x, ...

  5. Python全栈之路----函数----内置方法

    Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod ...

  6. Python全栈之路----函数进阶----名称空间

    又名name space,顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的=地方 名称空间共3种,分别如下 ...

  7. Python全栈之路----函数进阶----闭包

    关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数).而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数.当其中一个这样的内部函数在包含它们之外被调用时,就会形成闭 ...

  8. Python全栈之路----函数进阶----迭代器

    我们已经知道,可以直接作用于 for 循环的数据类型有以下几种: 一类是集合数据类型,如 list , tuple , dict , set ,str 等: 一类是 generator ,包括生成器和 ...

  9. Python全栈之路----函数

    基本介绍 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 编程中的函数在英文中有很多不同的叫法:在BASIC中叫做subroutine(子过程或 ...

随机推荐

  1. Python3 tkinter基础 Menu add_checkbutton 多选的下拉菜单

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  2. HTML基础(1)——样式表

    样式表按出现的位置可以分为:行间(内联)样式表,内部样式表,外部样式表. 行间(内联)样式表:由于要将表现和内容混杂在一起,内联样式会损失掉样式表的许多优势. <div style=" ...

  3. C++ 将 std::string 转换为 char*

    参考: std::string to char* C++ 将 std::string 转换为 char* 目前没有直接进行转换的方法.必须通过string对象的c_str()方法,获取C-style的 ...

  4. Linux常用命令——文件搜索命令

    Linux常用命令——文件搜索命令 Linux  以#号开头的内容都是内容描述或配置项 find 描述:文件搜索 语法:find [搜索范围] [范围条件] . 当前目录 示例:[root@local ...

  5. [笔记] SQL性能优化 - 避免使用 IN 和 NOT IN

    WHY? IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢? 1.效率低 可以参看我之前遇到的一个例子([小问题笔记(九)] SQL语句Not IN 效率低,用 NOT EXISTS试试 ...

  6. 全局解释器锁GIL & 线程锁

    1.GIL锁(Global Interpreter Lock) Python代码的执行由Python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行 ...

  7. Axure 交互样式和选项组的设置

    1.点击元件,点击属性,点击选中,点击图片,选择相应的图片,选中功能是当点击这个元件的时候,元件的变成相应的图片,然后再设置鼠标单击时的动作是选中,就可以实现选中某个元件的时候,元件会变成其他的图片. ...

  8. 第三方API使用的好习惯

    1自己封装API接口 有些不很稳定的API接口,最好还是自己封装隔离后再使用,否则哪天它一改接口,那我得到处替换了 比如融云的群组,聊天室

  9. vue分页控件

    下载:https://pan.baidu.com/s/1c125Vgc 一个简单的分页控件: 自动加载模式: 手动加载模式: loading图标使用了iconfont: 主要方法: beginRefr ...

  10. 基于Python——实现解压文件夹中的.zip文件

    [背景]当一个文件夹里存好好多.zip文件需要解压时,手动一个个解压再给文件重命名是一件很麻烦的事情,基于此,今天介绍一种使用python实现批量解压文件夹中的压缩文件并给文件重命名的方法—— [代码 ...