首页 > 编程语言 >彻底掌握Python中 * 号

彻底掌握Python中 * 号

时间:2023-11-09 10:46:04浏览次数:43  
标签:name 彻底 掌握 Python age format 列表 参数 print

Python中的 *是一个特殊的符号,在其他编程语言中,它最广为人知的用途就是作为乘法运算的符号。
而在Python中,它的用途远不止如此。

本文总结了Python中*的所有用途,以供参考。

1. 算术运算

用来做算术运算几乎是所有编程语言采用的方法,
在Python中,
可作为乘法运算和指数运算。

比如:

a = 3
b = 5
print("乘法:3×5 = {}".format(a * b))
print("指数:3的5次方 = {}".format(a**b))

# 运行结果
乘法:3×5 = 15
指数:3的5次方 = 243

2. 构造与解构

除了基本的算术运算,*在Python中还可以用在数据结构的构造和解构中。

2.1. 列表的构造

如果要在一些数据中间的某个位置插入一个现有的列表,来构造一个新列表的话,
大部分语言只能通过循环来实现。

Python中的*,可以让我们用一行代码就实现。

lst = [1, 2, 3]
new_lst = [0, lst, 4, 5]
print("不使用*号,构造后的列表:{}".format(new_lst))

new_lst = [0, *lst, 4, 5]
print("使用*号,构造后的列表:{}".format(new_lst))

# 运行结果
不使用*号,构造后的列表:[0, [1, 2, 3], 4, 5]
使用*号,构造后的列表:[0, 1, 2, 3, 4, 5]

使用*,可以自动将现有列表中的元素展开。

2.2. 列表的解构

简单来说,解构就是将列表中的元素分配给几个变量。
比如下面的代码,利用*,可以迅速将一个列表中的元素分为3个部分:

# 列表解构
first, *lst, last = new_lst
print("列表第一个元素:{}".format(first))
print("列表中间元素:{}".format(lst))
print("列表最后一个元素:{}".format(last))

# 运行结果
列表第一个元素:0
列表中间元素:[1, 2, 3, 4]
列表最后一个元素:5

2.3. 字典的构造

字典的构造是用 两个*号

dict = {"name": "harry", "age": 40}
new_dict = {"gender": "male", **dict}
print("构造后的字典:{}".format(new_dict))

# 运行结果
构造后的字典:{'gender': 'male', 'name': 'harry', 'age': 40}

这样,就把已有字典中的key/value展开到新的字典中去了。

注意,字典类型的变量如果不加双*号,是会报错的,比如:

new_dict = { "gender": "male", dict}
# 这样写会报语法错误

字典只有构造的方法,没有类似列表的解构方法。

3. 函数参数

*用在函数参数中,可以定义更加灵活的参数形式。

3.1. 不定长参数

不定长参数让函数更加灵活,比如 print函数的参数就是不定长的,传入几个参数,它就打印几个。
再比如,我们构造一个求和的函数,希望可以对任意数量的整数求和,就可以用*来实现。

# 求和函数
def add(*numbers):
    sum = 0
    for number in numbers:
        sum += number

    return sum

使用此函数时,可以传入任意数量的参数:

# 可以传入任意数目的参数
sum = add(1, 2, 3)
print("1~3 求和:{}".format(sum))
sum = add(1, 2, 3, 4)
print("1~4 求和:{}".format(sum))

# 运行结果
1~3 求和:6
1~4 求和:10

当然,对于有 * 的参数,也可以传入列表变量作为参数,不过列表变量前要加 *

lst = [1, 2, 3]
sum = add(*lst)  # 变量 lst 前不加 *号 会报错
print(sum)

3.2. 不定长的关键字参数

所谓关键字参数,就是传入参数的时候,不仅传入参数的值,还传入参数的名称。
比如下面一个模拟改变对象属性的函数:

def change(obj, **attrs):
    for key, val in attrs.items():
        obj[key] = val

通过参数**attr,函数可以修改obj对象的任意属性。
这样的好处是不用定义多个不同的函数来修改obj的不同属性。

person = {"name": "harry", "age": 30, "gender": "male"}
print("修改前:{}".format(person))

# 调用方式
change(person, age=40, name="jack")
print("修改后:{}".format(person))

# 运行结果
修改前:{'name': 'harry', 'age': 30, 'gender': 'male'}
修改后:{'name': 'jack', 'age': 40, 'gender': 'male'}

4. 限制函数调用

最后的这个*的用途比较罕见,如果你知道这个用途的话,我会对你很佩服。

先定义一个示例函数:

def self_introduce(name, age):
    print("大家好,我是 {}, 今年 {} 岁。".format(name, age))

这个函数很简单,传入nameage两个参数,然后打印一段简单的自我介绍。

Python中,我们可以用下面两种方式调用这个函数:

# 方式一
self_introduce("harry", 40)
# 运行结果
大家好,我是 harry, 今年 40 岁。

# 方式二
self_introduce(name="harry", age=40)
# 运行结果
大家好,我是 harry, 今年 40 岁。

两种方式的效果是是一样的。
方式一也可以叫做位置参数调用法;
方式二也可以叫做关键字参数调用法。

4.1. 只能用关键字参数方式调用

如果我们想限制self_introduce只能用方式二(关键字参数)来调用,可以:

# 函数的第一个参数用 * 号
def self_introduce(*, name, age):
    print("大家好,我是 {}, 今年 {} 岁。".format(name, age))

这样调用时,只能使用方式二了。

# 这样调用会报错
self_introduce("harry", 40)

# 可以正常执行
self_introduce(name="harry", age=40)

4.2. 只能用位置参数方式调用

如果想限制self_introduce只能用方式一(位置参数)来调用,可以:

# 函数的最后一个参数用 / 号
def self_introduce(name, age, /):
    print("大家好,我是 {}, 今年 {} 岁。".format(name, age))

这样调用时,只能使用方式一了。

# 可以正常执行
self_introduce("harry", 40)

# 这样调用会报错
self_introduce(name="harry", age=40)

标签:name,彻底,掌握,Python,age,format,列表,参数,print
From: https://www.cnblogs.com/wang_yb/p/17819180.html

相关文章

  • cmd输入python弹出windows应用商店的问题
    一、环境操作系统:windows10Python:3.11(最开始是3.7)二、起因pip要求升级结果无论是在cmd还是pycharm的控制台都没反应于是我就在cmd输入python发现打开的居然是windows的appstore,我还以为是我的python坏了就安装了3.11.结果涛声依旧。于是我就问了问度娘有了答案,就是删除微软app......
  • 【misc】[HNCTF 2022 Week1]python2 input(JAIL) --沙盒逃逸,python2环境
    查看附件,这次有点不太一样,这次是python2的环境只有一个input函数,但是python2的input函数可是不太一样:在python2中,input函数从标准输入接收输入,并且自动eval求值,返回求出来的值在python2中,raw_input函数从标准输入接收输入,并返回输入字符串在python3中,input函数从标准输入接收输......
  • Python学习笔记:必应壁纸下载
    GitHub上开源的必应壁纸API作为数据来源。--1.开源地址https://github.com/zenghongtu/bing-wallpaper--2.请求接口https://bingw.jasonzeng.dev/一、接口使用说明1.API接口:https://bingw.jasonzeng.dev2.分辨率resolution默认分辨率为:1920×1080,其他可设置参数......
  • PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SV
    全文下载链接:http://tecdat.cn/?p=26219最近我们被客户要求撰写关于银行机器学习的研究报告,包括一些图形和统计输出。该数据与银行机构的直接营销活动相关,营销活动基于电话。通常,需要与同一客户的多个联系人联系,以便访问产品(银行定期存款)是否会(“是”)或不会(“否”)订阅银行数据......
  • python获取当前日期的前一天
     fromdatetimeimportdatetime,timedelta#获取当前日期today=datetime.today()#获取前一天的日期yesterday=today-timedelta(days=1)#格式化日期为所需的字符串格式date_str=yesterday.strftime("%Y-%m-%d")print("前一天的日期是:",date_str) ......
  • python json.loads()字符串转json
    python json.loads()字符串转jsonimportjsonimportrequestsres='''{"code":200,"message":"success","duration":147,"result":{"angle":0,"height":368,"tables":[],&qu......
  • numpy.meshgrid() in Python
    numpy.meshgrid函数用于从表示笛卡尔索引或矩阵索引的两个给定一维数组中创建矩形网格。网格函数是从MATLAB中得到启发的。语法numpy.asarray(arr,dtype=None,order=None)参数x1,x2,…,xn:array_like表示网格坐标的一维数组。indexing:{‘xy’,‘ij’},可选输出的笛卡尔(‘xy......
  • Python实验:Socket编程
    实验六Socket编程一、实验目标:了解TCP协议原理、标准库socket的用法、熟悉Socket编程。1.TCP协议原理:TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的、基于流的协议,用于在计算机网络中传输数据。它是互联网协议套件中的一部分,通常与IP(Internet......
  • 练手python脚本分享
    分享一个最近练手的脚本,没什么实际意义,纯粹就是练手用的,最近准备把python拿出来再练练,所以随意找了点东西研究下,脚本里主要用到了ttkbootstrap来做GUI,以及非常非常基础的azurepython的SDKimportdatetimeimportttkbootstrapasttkfromttkbootstrap.constantsimport*fromt......
  • Python中的列表和元组:添加、修改和删除元素的技巧
    在Python中,列表(List)和元组(Tuple)都是用于存储数据的集合类型。虽然它们在某些方面相似,例如都可以存储各种类型的数据,但它们也有一些重要的区别,比如可变性。列表是可变的,意味着我们可以更改、添加或删除列表中的元素,而元组是不可变的,一旦它被创建,就不能更改。在这篇文章中,我们将详细......