李宁老师已经在「极客起源」 微信公众号推出《Python编程思想》电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法。读者可以在「极客起源」 公众号中输入 160442 开始学习。

《Python编程思想》总目录

《Python编程思想》专栏

目录

1. 关键字( keyword)参数

2. 参数默认值


在定义 Python函数时可指定形参,为函数指定的参数称为形参,这些形参的值要等到调用时才能确定下来,由函数的调用者负责向形参传入参数值。简单来说,就是谁调用函数,谁负责传入参数值。

1. 关键字( keyword)参数

Python函数的参数名不是无意义的, Python允许在调用函数时通过名字来传入参数值。因此,应该为Python函数的参数名起更有意义的名字。

按照形参位置传入的参数被称为位置参数。如果使用位置参数的方式来传入参数值,则必须严格按照定义函数时指定的顺序来传入参数值。如果根据参数名来传入参数值,则无须遵守定义形参时的顺序,这种方式被称为关键字(keyword)参数。例子代码如下:

示例代码:named_params_test.py

# 定义一个用于计算矩形面积的函数
def rectangle_area(width,height):print("width: ", width)print("height: ", height)return width * height
# 传统调用函数的方式,根据位置传入参数
print(rectangle_area(3.5, 4.1))
# 根据关键字参数来传入参数
print(rectangle_area(width = 3.3, height = 8.5))
# 使用关键字参数时可交换位置
print(rectangle_area(height = 8.5, width = 3.3))
# 部分使用关键字参数,部分使用位置参数
print(rectangle_area(3.7, height = 4.1))# 位置参数必须放在关键字参数之前,下面代码会出错
#print(rectangle_area(width = 2.5, 4.6))

运行程序,会输出如下内容:

width:  3.5
height:  4.1
14.349999999999998
width:  3.3
height:  8.5
28.049999999999997
width:  3.3
height:  8.5
28.049999999999997
width:  3.7
height:  4.1
15.17

上面程序定义了一个简单的 rectangle_area函数,该函数包含 width和height两个参数,该函数与前面定义的函数并没有任何区别。接下来在调用该函数时,既可使用传统的根据位置参数来调用,也可根据关键字参数来调用。在使用关键字参数调用函数时可交换参数的位置,还可混合使用位置参数和关键字参数。需要说明的是,如果希望在调用函数时混合使用关键字参数和位置参数,则关键字参数必须位于位置参数之后。换句话说,在关键字参数之后的只能是关键字参数。而下面的代码是错误的。

print(rectangle_area(width = 2.5, 4.6))

运行上面代码,将会提示如下错误。

SyntaxError: positional argument follows keyword argument

2. 参数默认值

在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值,这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值。

为形参指定默认值的语法格式如下:

形参名=默认值

从上面的语法格式可以看出,形参的默认值紧跟在形参之后,中间以英文“=”隔开。

例如,如下程序为name、 message形参指定了默认值。

示例代码:param_default_test.py

# 为两个参数指定默认值
def print_info(name = "李宁", message = "欢迎来到未来"):print(f"hello {name}")print(f"message:{message}")
# 全部使用默认参数
print_info()
# 只有message参数使用默认值
print_info("超人")
# 两个参数都不使用默认值
print_info("超人", "欢迎来到赛博坦")
# 只有name参数使用默认值
print_info(message = "欢迎来到冰雪世界")
# 如果不指定关键字参数,那么就会按形参顺序指定参数值,所以这里name的值是"欢迎学习Python"
print_info("欢迎来到火星")# print_info(name="神秘博士", "欢迎来到太阳系")   # 出错# print_info("欢迎来到地球" , name="神奇女侠")  # 为name传递参数值参数歧义(这两个值都被认为是name参数值)print_info("钢铁侠", message="我在哪里?")
print_info(name="绿巨人", message="这是阿斯加德吗?")

运行程序,会输出如下内容:

hello 李宁
message:欢迎来到未来
hello 超人
message:欢迎来到未来
hello 超人
message:欢迎来到赛博坦
hello 李宁
message:欢迎来到冰雪世界
hello 欢迎来到火星
message:欢迎来到未来
hello 钢铁侠
message:我在哪里?
hello 绿巨人
message:这是阿斯加德吗?

上面程序中在定义print_info函数时为name和 message形参指定了默认值,因此程序中第1次调用print_info函数时没有为name和message参数指定参数值,此时name、 message参数将会使用其默认值。程序在第2次调用print_info函数时为name参数(使用位置参数)指定了参数值。此时 message参数将会使用默认值。程序第3次调用print_info函数时为name和message参数(使用位置参数)都指定了参数值,因此这两个参数都使用开发者传入的参数值。程序第4次调用print_info函数时只为 message参数(使用关键字参数)传入了参数值,此时name参数将使用默认值。

从这段程序可以看出,如果只传入一个位置参数,由于该参数位于第1位,系统会将该参数值传给name参数。因此,我们不能按如下方式调用 print_info函数。

print_info("欢迎来到火星")

上面调用时传入的“欢迎来到火星”字符串将传给name参数,而不是 message参数。

我们也不能按如下方式来调用 print_info函数。

print_info(name="钢铁侠","我在哪里?")

因为 Python规定,关键字参数必须位于位置参数的后面。因此提示错误:positional argument follows keyword argument

那么,我们能不能单纯地将上面两个参数交换位置呢?

print_info("欢迎来到地球", name="雷神")

上面调用依然是错误的,因为第一个字符串没有指定关键字参数,因此将使用位置参数为name参数传入参数值,第2个参数使用关键字参数的形式再次为name参数传入参数值,这意味着两个参数值其实都会传给name参数,程序为name参数传入了多个参数值。因此提示错误:TypeError: print_info() got multiple values for argument 'name'

将函数调用改为如下两种形式是正确的。

print_info("雷神", message="欢迎来到地球")
print_info(name="绿巨人", message="我在哪里?")

上面第一行代码先使用位置参数为name参数传入参数值,再使用关键字参数为 message参数。

Python编程思想(18):哇!原来Python参数还可以这样用相关推荐

  1. Python编程思想(24):类的实例方法

    李宁老师已经在「极客起源」 微信公众号推出<Python编程思想>电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法.读者可以在「极客起源」 公众号中输入 160 ...

  2. Python编程思想【系列文章】

    <Python编程思想>专栏 本系列文章持续更新中....... 李宁老师已经在「极客起源」 微信公众号推出<Python编程思想>电子书,囊括了Python的核心技术,以及P ...

  3. Python编程思想(26):成员变量

    李宁老师已经在「极客起源」 微信公众号推出<Python编程思想>电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法.读者可以在「极客起源」 公众号中输入 160 ...

  4. Python编程思想(8):使用字典

    <Python编程思想>总目录 目录 1. 创建字典 2. 字典的基本用法 3. 与字典相关的方法 字典是Python提供的一种常用的数据结构,可以用于保存具有映射关系的数据.比如有成绩单 ...

  5. Python编程思想(16):压缩与排序列表

    李宁老师已经在「极客起源」 微信公众号推出<Python编程思想>电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法.读者可以在「极客起源」 公众号中输入 160 ...

  6. Python编程思想(4):字符串类型

    <Python编程思想>总目录 目录 1. 字符串和转义符 2. 字符串内建函数 3. 字符串高级操作 4. 保持字符串的原汁原味 5. 长字符串 字符串的意思就是"一串字符&q ...

  7. Python编程思想(9):条件语句(if)

    <Python编程思想>总目录 上一篇:Python编程思想(8):使用字典 目录 1. if语句基础 2. 由于缩进错误引发的血案 3. if条件的类型 4. pass语句 if语句用于 ...

  8. python进阶练习题:馏分类【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python进阶练习题:馏分类[难度:2级]: 为您提供了类"分数",这两个参数(分子,分母)的骨架. 例: fraction1 =分数(4,5) 分数fraction1 =新分数 ...

  9. python编程培训多少钱-python编程培训多少钱?[python培训]

    python编程培训多少钱?2018年Python的发展可谓是大红大紫,2019年python的热度依然不减.各大公司对python开发工程师的需求都有所增加,因此参加python培训学习python ...

最新文章

  1. ssh框架实现数据库_自顶向下介绍SSH及其如何实现安全的数据共享
  2. “A and B ...”,谓语动词必以复数形式呈现?
  3. Android Gesture 手势识别使用实例 - Android - mobile - ITeye论坛
  4. 【SpringBoot实战】员工部门管理页面,增删改查,含源码
  5. Linux记录-TCP状态以及(TIME_WAIT/CLOSE_WAIT)分析(转载)
  6. Spring Cloud微服务之Nacos服务注册(九)
  7. 潜意识、读懂行为、说服的艺术
  8. Mac安装jadx查看dex文件
  9. oracle替换指定字符串字符_实例:替换方框内字符串内容
  10. k8s kafka集群 连接不上_k8s利用statefulset部署kafka集群(依赖zookeeper)
  11. 计算机入门认识图标,初学UI设计如何了解ICON图标的用处
  12. android 控件上下排列_Android几种常用布局详解
  13. Linux网络的网络配置(超详细,百分百成功)
  14. 第六章-循环控制结构
  15. Sentinel-【控制台介绍及规则配置】
  16. 积极心态的力量——杨吉
  17. 对栈的学习(前缀、中缀、后缀表达式)超详细!由计算器的实现哦
  18. react结合rust编写wasm图像处理
  19. python爬取豆瓣电影并分析_Python实战之如何爬取豆瓣电影?本文教你
  20. Tensorflow③ Keras的LSTM和TF的LSTM实现的源码剖析

热门文章

  1. IT桔子分布式项目2
  2. 苹果新妙控键盘上的 Touch ID 与 M1 iPad Pro 不兼容
  3. abp更改为mysql_ABPZero系列教程之拼多多卖家工具 更改数据库为MySQL数据库
  4. 华为鸿蒙Matepad 11,你值得拥有的学习、娱乐、办公利器
  5. WORD设置从开始页数算总页数
  6. mysql 记录所有操作_mysql记录操作
  7. dc dc变换器的建模及matlab仿真,基于Matlab的AC/DC变换器的系统建模和仿真.pdf
  8. Redis—击穿、穿透、雪崩
  9. 西门子1200plc两部六层电梯程序
  10. 一文读懂工业设计中心的申报条件-深科信