返回顶部
首页 > 资讯 > 后端开发 > Python >一文搞懂Python的函数传参机制
  • 335
分享到

一文搞懂Python的函数传参机制

2024-04-02 19:04:59 335人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、最简单的函数(无返回值、参数)二、最简单的函数(带返回值、无参数)三、带一个参数(无默认值)四、带有多个参数(无默认值)五、参数设置默认值(一个参数)六、参数设置默认值(多个

大家好,我是Peter~

最近写了python函数的功能,犯了一些错误。本文主要是梳理下Python函数的传参机制,主要内容包含:

一、最简单的函数(无返回值、参数)

def hello_python():
    print("hello python!")
hello_python()  # 直接调用

输出:

hello python!

二、最简单的函数(带返回值、无参数)

def hello_python():
    data = "hello python!"
    return data  # data就是返回值
hello_python()

输出:

'hello python!'

三、带一个参数(无默认值)

def hello(data):
    result = "hello " + data 
    return result
hello("python")

输出:

'hello python'

传入另一个值:

hello("java")

输出:

'hello java'

还可以在内部修改参数的信息:

def hello_name(name):
    result = "Hello " + name.title() + "!"
    return result
hello_name("tom")

'Hello Tom!'

hello_name("jack")

'Hello Jack!'

四、带有多个参数(无默认值)

def infORMation(name, age):
    data = "我叫" + name.title() + ", 今年" + str(age) + "岁"
    return data
information("tom", 23)

'我叫Tom, 今年23岁'

information("JACK", 18)

'我叫Jack, 今年18岁'

五、参数设置默认值(一个参数)

def hello_name(name="Peter"):
    result = "Hello " + name
    return result

如果不给参数具体的值,就使用默认值

hello_name()  

'Hello Peter'

给参数一个实际的值,比如下面的例子中Tom就是实际的值;这就是常说的实参

hello_name(name="Tom")  

'Hello Tom'

六、参数设置默认值(多个参数)

def information(name="Peter", age=20):
    data = "我是" + name + ", 今年" + str(age) + "岁"
    return data

1、全部使用默认值:

information()

'我是Peter, 今年20岁'

2、全部传入实际的值:

information(name="Tom", age=27)

'我是Tom, 今年27岁'

3、只传入部分参数的实际值;未传入的使用默认值:

information(name="Tom")

'我是Tom, 今年20岁'

information(age=18)

'我是Peter, 今年18岁'

七、部分参数使用默认值

默认值的参数一定要放在最后面;具有默认值的参数一定要放在最后面

def information(name, age=20):
    data = "我是" + name + ", 今年" + str(age) + "岁"
    return data
information("Peter")  # age默认使用20

'我是Peter, 今年20岁'

information(name="Peter")

'我是Peter, 今年20岁'

information("Peter", age=18)

'我是Peter, 今年18岁'

下面的方式直接报错:

information(age=18, "Peter")  
  File "<ipython-input-26-2d03cd04a05a>", line 1
    information(age=18, "Peter")
                       ^
SyntaxError: positional argument follows keyWord argument

information(age=18, name="Peter")  # age默认使用20

'我是Peter, 今年18岁'

重点:在函数必须先列出没有默认值的形参,再列出有默认值的形参:

def information(age=20, name):
    data = "我是" + name + ", 今年" + str(age) + "岁"
    return data

  File "<ipython-input-28-d36363c3194c>", line 1
    def information(age=20, name):
                   ^
SyntaxError: non-default argument follows default argument

如何理解有默认值的参数一定要放在最后面?

下面自定义个get_name的函数,传入第一个、最后一个和中间的名字,但是并不是每个人都有中间名字:

def get_name(first_name, last_name, middle_name=''):
    if middle_name:  # 如果存在中间名字
        name = first_name + middle_name + last_name
    else:
        name = first_name + last_name
        
    return name
get_name(first_name="张", last_name="飞", middle_name='')

'张飞'

get_name(first_name="孙", last_name="空", middle_name='悟')

'孙悟空'

如果不传递middle_name的结果肯定不是我们想要的:

get_name(first_name="孙", last_name="空")

'孙空'

八、位置实参

def get_information(name, age):
    data = "我是" + name + ", 今年" + str(age) + "岁"
    return data
get_information("Tom", 20)

'我是Tom, 今年20岁'

get_information("20","Tom")  # 一定要按照原来形参的顺序传递

'我是20, 今年Tom岁'

上面的结果肯定不是我们想要的

九、关键字实参

当使用关键字传递实参的时候,和顺序无关:

get_information(name="Tom", age=20)

'我是Tom, 今年20岁'

get_information(age=20, name="Tom")

'我是Tom, 今年20岁'

十、位置实参和关键字实参混合使用

get_information("Tom", age=20)

'我是Tom, 今年20岁'

在使用的时候还是要按照原函数中的顺序,否则报错:

get_information(age=20,"Tom")

  File "<ipython-input-39-bc20bc544493>", line 1
    get_information(age=20,"Tom")
                          ^
SyntaxError: positional argument follows keyword argument

十一、进阶:*args使用

有时候我们实现并不知道函数需要接受多少个参数,这个时候可以通过*args或者**kwargs的用法来收集任意数量的参数。

先介绍*args的使用。假设我们想把一个班级中每个同学的身高都变成以米为单位,即除以100:

def height(*args):
    data = args 
    return data
height()

默认情况下函数收集到的是一个空元组:

()

height(178)

当传入数据的时候,以元组的形式表示:

(178,)

height(178,189)

(178, 189)

def height(*args):
    for data in args:  # 对args中的元素进行循环操作
        print("身高是: {}m".format(data / 100))
height(189,180,167,172)  # 调用

身高是: 1.89m
身高是: 1.8m
身高是: 1.67m
身高是: 1.72m

十二、进阶:**kwargs使用

**kwargs允许将不定长度的键值对,作为参数传递给一个函数

def information(**kwargs):
    data = kwargs
    print(data)

默认情况下收集的是字典:

 information(name="Peter")

{'name': 'Peter'}

information(name="Peter", age=23)

{'name': 'Peter', 'age': 23}

def information(**kwargs):
    for k, v in kwargs.items():
        print("{0} == {1}".format(k,v))
information(name="Peter")

name == Peter

information(name="Peter", age=23)

name == Peter
age == 23

information(name="Peter", age=23, height=175)

name == Peter
age == 23
height == 175

十三、进阶:*args 和形参连用

def fun(x, *args):
    print("x:", x)
    print("args:", args)
fun(1)

x: 1
args: ()

fun(1,2)

x: 1
args: (2,)

fun(1,2,3,4)

x: 1
args: (2, 3, 4)

fun(1,2,3,4,"Peter")

x: 1
args: (2, 3, 4, 'Peter')

十四、进阶:**kwargs 和形参连用

def fun(x, **kwargs):
    print("x:", x)
    print("kwargs:", kwargs)
fun(1)

x: 1
kwargs: {}

fun(1,name="Peter")

x: 1
kwargs: {'name': 'Peter'}

fun(1,name="Peter",age=23)

x: 1
kwargs: {'name': 'Peter', 'age': 23}

十五、进阶:形参+*args+**kwargs连用

def fun(x, *args, **kwargs):
    print("x:", x)
    print("args:", args)
    print("kwargs:", kwargs)
fun(1)

x: 1
args: ()
kwargs: {}

fun(1,2,3)

x: 1
args: (2, 3)
kwargs: {}

fun(1,name="Peter",age=23)

x: 1
args: ()
kwargs: {'name': 'Peter', 'age': 23}

fun(1,2,3,name="Peter",age=23)

x: 1
args: (2, 3)
kwargs: {'name': 'Peter', 'age': 23}
kwargs = {"name":"Peter","age":23}

fun(1,2,3,**kwargs)

x: 1
args: (2, 3)
kwargs: {'name': 'Peter', 'age': 23}

以上就是一文搞懂Python的函数传参机制的详细内容,更多关于Python函数传参机制的资料请关注编程网其它相关文章!

--结束END--

本文标题: 一文搞懂Python的函数传参机制

本文链接: https://lsjlt.com/news/119241.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 一文搞懂Python的函数传参机制
    目录一、最简单的函数(无返回值、参数)二、最简单的函数(带返回值、无参数)三、带一个参数(无默认值)四、带有多个参数(无默认值)五、参数设置默认值(一个参数)六、参数设置默认值(多个...
    99+
    2024-04-02
  • 一文搞懂Java的SPI机制(推荐)
    目录1 简介缺点 源码使用适用场景插件扩展案例1 简介 SPI,Service Provider Interface,一种服务发现机制。 有了SPI,即可实现服务接口与服务实现的解...
    99+
    2024-04-02
  • 一文搞懂Java中的反射机制
    目录一. 反射的概念二. 为什么需要反射三. 反射的基石四. 反射的实现1. 获取字节码文件对象 2. 反射的使用 反射的优缺点 一. 反射的概念 Ja...
    99+
    2024-04-02
  • 一文搞懂Python的hasattr()、getattr()、setattr() 函数用法
    目录hasattr()getattr()setattr()hasattr() hasattr() 函数用来判断某个类实例对象是否包含指定名称的属性或方法。该函数的语法格式如下: ha...
    99+
    2024-04-02
  • Python函数参数传递机制
            最近在写代码的过程中,发现Python参数传递不是很明白。Python确实很灵活,但是灵活的后果就是要花更多的时间去研究。废话不多说,始めましょう!!!Python参数传递有一下几种方式:1:位置参数Fun(arg1,arg...
    99+
    2023-01-31
    函数 机制 参数
  • 一文搞懂 MyBatis的事务管理机制
    目录一、事务概述二、MyBatis 实现事务的方式1. 编程式事务2. 声明式事务(1)JDBC 事务管理器(2)Spring 事务管理器三、事务源码理解(1)Transaction...
    99+
    2023-05-20
    MyBatis事务管理机制 MyBatis事务管理 MyBatis事务
  • 一文搞懂c++中的std::move函数
    目录前言左值和右值左值引用右值引用std::move函数remove_reference源码剖析std::forward源码剖析std::move()源码剖析小结std::move使...
    99+
    2024-04-02
  • 一文搞懂Python中函数的定义与使用
    目录函数的定义和调用无参函数有参函数带有返回值的函数函数与循环结合与while循环结合与for循环结合函数的分类内置函数自定义函数函数的嵌套调用函数的嵌套定义函数的定义和调用 函数的...
    99+
    2024-04-02
  • 一文搞懂MySQL运行机制原理
    目录前言mysql服务器体系架构网络连接层服务层存储引擎层系统文件层服务器处理客户端请求连接管理解析与优化查询缓存语法解析查询优化存储引擎小结前言 前文我们了解了MySQL采用客户端/服务器架构,用户通过客户端程序发送增...
    99+
    2024-04-02
  • 一篇文章搞懂MySQL加锁机制
    目录前言锁的分类乐观锁和悲观锁共享锁(S锁)和排他锁(X锁)按加锁粒度区分全局锁表级锁(表锁和MDL锁)意向锁行锁间隙锁next-key lock(临键锁)加锁规则死锁和死锁检测总结...
    99+
    2024-04-02
  • 一文搞懂JavaSPI机制的原理与使用
    目录SPI 概念举个栗子第一步第二步第三步第四步原理常用的框架优缺点优点缺点Java 程序员在日常工作中经常会听到 SPI,而且很多框架都使用了 SPI...
    99+
    2024-04-02
  • 一文搞懂Spring Security异常处理机制
    目录1.异常分类2.ExceptionTranslationFilter3.自定义处理今天来和小伙伴们聊一聊 Spring Security 中的异常处理机制。 在 Spring S...
    99+
    2024-04-02
  • 一文搞懂VueJs中customRef函数使用
    目录前言示例-延迟显示总结前言 ref是Vue官方提供的componsition API,将一个非响应式数据转变为响应式数据的函数,至于底层怎么实现数据的收集与响应式 使用者无需去...
    99+
    2023-05-14
    VueJs customRef函数使用 VueJs customRef
  • 一文搞懂 parseInt()函数异常行为
    目录正文1. parseInt() 的怪异行为2.解决parseInt()怪异行为3.总结正文 parseInt()是内置的 JS 函数,用于解析数字字符串中的整数。 例如,解析数字...
    99+
    2023-05-20
    parseInt()函数 parseInt()函数异常
  • 一文搞懂spring boot本地事务@Transactional参数
    目录1. 本地事务1.1. 基本概念1.2. 隔离级别1.3. 相关命令1.4. 传播行为1.4.1. 伪代码练习1.4.2. 改造商品新增代码1.4.3. 测试1:同一servic...
    99+
    2024-04-02
  • 一文搞懂Python中Pandas数据合并
    目录1.concat()主要参数示例2.merge()参数示例3.append()参数示例4.join()示例数据合并是数据处理过程中的必经环节,pandas作为数据分析的...
    99+
    2024-04-02
  • 一文搞懂python中Tkinter的使用
    本篇文章给大家带来了关于Python的相关知识,其中主要整理了Tkinter的相关问题,Tkinter 是使用 python 进行窗口视窗设计的模块,下面一起来看一下,希望对大家有帮助。【相关推荐:Python3视频教程 】一、前言1.1、...
    99+
    2022-07-04
    python
  • 一文搞懂Vue3中toRef和toRefs函数的使用
    目录toRef 函数toRef 函数使用ref 函数验证toRefs 函数toRefs 函数使用总结上一篇博文介绍了 vue3 里面的 ref 函数和 reactive 函数,实现响...
    99+
    2024-04-02
  • 一文搞懂 MySQL 中的常用函数及用法
    0️⃣前言 MySQL是一种常用的关系型数据库管理系统,它提供了许多内置函数来处理数据。本文将介绍MySQL中的各种常用函数,包括字符串函数、日期函数、数学函数、聚合函数等。 文章目录 0️⃣前言1️⃣字符串函数1.1CON...
    99+
    2023-08-19
    mysql 数学建模 数据库
  • 一文搞懂Python的文件路径操作
    如果你要在代码里读取一个文件,那么你首先要知道这个文件的路径。如果只有一个文件,那么很简单,直接复制这个文件所在的文件夹路径及其文件名即可。而在很多情况下,我们会处理大量的文件,这些文件一般都会按一定...
    99+
    2023-08-31
    python linux windows
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作