Python 函数(2)

2、函数

2.1、函数传递列表

将列表传递给函数后,函数就能直接访问其内容。

下列为一个实例:将一个名字列表传递给一个名为greet_users()的函数,这个函数将会向列表中的每一个元素执行相应的信息。

python 复制代码
def greet_users(name):
    for name in names:
        msg=f"Helo,{name.title()}!"
        print(msg)
names=['hannah','ty','margot']
greet_users(names)

我们将 greet_users()定义成接受一个名字的列表,并将其赋给形参names。这个函数遍历收到的列表,并对其中的每个元素打印一条信息。

2.1.1、在函数中修改列表

将列表传递给函数后,函数就可以对其进行修改了。在函数中对这个列表所做的任何修改都是永久的。

2.1.2、禁止函数修改列表

既要打印出执行操作后的列表,又要打印出原来的原始列表。为了解决这一问题,可向函数传递列表的副本而不是原来的列表。这样,函数所做的任何操作就都影响副本,而丝毫不影响原始列表。要将例表的副本传递给函数可以使用切片表示法[:]

2.2、传递任意数量的实参

有时不知函数需要接受多少个实参,好在Python允许函数从调用语句中收集任意数量的实参。

下面的函数只有一个形参*topp,不管调用语句提供了多少个实参,它都能将其收入囊中:

python 复制代码
def pizza(*topp):
    print(topp)
pizza('pepperoni')
pizza('mush','green peppers','extre')

形参名*topp中的星号让Python创建一个名为topp的元组,该元组包含函数收到的所有值。

**注:Python会将实参封装到一个元组中,即便函数值收到一个值也将它为元组看待。**所以下面的输出中的('pepperoni',)的后面有一个逗号:

不管函数收到多少个实参,这种语法都管用。

2.2.1、结合使用位置实参和任意数量的实参

要让函数接受不同类型的实参,必须在函数定义中将接受任意数量实参的形参放在最后。Python先匹配位置实参和关键词实参,再将剩下的实参收集到最后一个形参中。

例如下:

python 复制代码
def pizza(size,*topp):
    print(size)
    for topps in topp:
        print(f"-{topps}")

pizza(11,'pepperoni')
pizza(21,'mush','green peppers','extre')

pizza有两个形参,基于函数的定义,Python收到的第一个值赋给第一个形参size,将其他的所有的值都存储在元组topp中。调用两次函数,第一个值都是赋给第一个形参,余下的都存储在元组:

注:经常会看到通用形参名*args,它也这样收集任意数量的位置实参。

2.2.2、使用任意数量的关键字实参

当需要接受任意函数数量的实参,但预先不知道传递给函数的会是什么样的信息。在这种情况喜爱,可将函数编写成能够接受任意数量的键值对------调用语句提供多少就接受多少。

下列实例:

python 复制代码
def profile(first,last,**usef_info):
    usef_info['first_name']=first
    usef_info['last_name']=last
    return usef_info
uprofile=profile('albert','einstein',
                 location='princeton',
                 field='physics')
print(uprofile)

profile()函数的定义要求提供名和姓,同是允许根据需要提供任意数值的名值对。形参**usef_info中的两个星号让Python创建一个名为usef_info的字典,该字典包含函数收到的其他名值对。

相关推荐
Andy4 分钟前
Python基础语法4
开发语言·python
但要及时清醒9 分钟前
ArrayList和LinkedList
java·开发语言
孚亭24 分钟前
Swift添加字体到项目中
开发语言·ios·swift
hweiyu0028 分钟前
Go、DevOps运维开发实战(视频教程)
开发语言·golang·运维开发
mm-q291522272939 分钟前
Python+Requests零基础系统掌握接口自动化测试
开发语言·python
小李小李不讲道理1 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻1 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
星星火柴9361 小时前
笔记 | C++面向对象高级开发
开发语言·c++·笔记·学习
码界奇点1 小时前
Rust 性能优化全流程从 flamegraph 定位瓶颈到 unsafe 与 SIMD 加速响应快
开发语言·性能优化·rust·simulated annealing
mapbar_front2 小时前
在职场生存中如何做个不好惹的人
前端