Python 符号*的特殊用法

简介: Python 符号*的特殊用法

特殊用法



1. 常规用法:


* 乘法运算     ** 指数运算



2. 函数参数


*args 和 **kwargs 主要用于函数定义。

*(星号) 才是必须的. 也可以写成 *ar  和 **k 。

*args 与 **kwargs 的区别,两者都是 python 中的可变参数:

*args 表示任何多个无名参数,它本质是一个 tuple

**kwargs 表示关键字参数,它本质上是一个 dict

如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。




3. 序列解包

可方便用于列表赋值

>>> a,*b,c=[1,2,3,4,5,6]
>>> b
[2, 3, 4, 5]
>>> 
>>> a,*b,c=1,2,3,4,5,6
>>> b
[2, 3, 4, 5]
>>> a
1
>>> c
6
>>>
>>> a,b,*c=range(1,7)
>>> c
[3, 4, 5, 6]
>>> a
1
>>> b
2
>>> c
[3, 4, 5, 6]
>>> *c
SyntaxError: can't use starred expression here
>>> #不能直接在提示符下操作,如下:
>>> print(*c)
3 4 5 6
>>> 


功能扩展: 给单个列表赋值,然后降序排列输出

>>> *a,=range(1,4)
>>> a
[1, 2, 3]
>>> print(*sorted(a,reverse=True))
3 2 1
>>> 
>>> a = [*range(1,4)]
>>> a
[1, 2, 3]
>>> 



4. 字典解包

可方便用于合并字典

>>> a = dict.fromkeys('abcd')
>>> b = dict.fromkeys('123')
>>> {**a}
{'a': None, 'b': None, 'c': None, 'd': None}
>>> c = {**a, **b}
>>> c
{'a': None, 'b': None, 'c': None, 'd': None, '1': None, '2': None, '3': None}
>>> 




附录


位置参数和关键字参数


Python的函数的输入参数有两种类型,一种是位置参数(positional argument),一种是关键字参数(keyword argument)。


所谓positional argument位置参数,是指用相对位置指代参数。关键字参数(keyword argument),见名知意使用关键字指代参数。位置参数或者按顺序传递参数,或者使用名字,自然使用名字时,对顺序没有要求。




形参与实参



1. 形参:


1.1 位置形参:在定义阶段,按照从左到右的顺序依次定义的形参

特点:必须被传值


1.2 默认参数:在定义阶段,就已经为某个形参赋值,该形参称之为默认形参

特点:在定义阶段就已经有值,意味着调用阶段可以不用为其传值

注意点:位置形参必须放在默认形参的前面


1.3 形参中*与**的用法


1. 形参中带*:*会将溢出的位置实参存成元组的形式然后赋值其后变量名

def func(x,y,*args):

print(x,y,args)

func(1,2,3,4,5,6)


2. 形参中带**:**会溢出的关键字实参存成字典的格式然后赋值其后变量名

def func(x,y,**kwargs):

print(x,y,kwargs)

func(1,y=2,z=3,m=1,n=2)


2. 实参


2.1 位置实参: 在调用阶段,按照从左到右的顺序依次传入的值

特点:这种传值方式会与形参一一对应

func(2,1,3)


2.2 关键字实参: 在调用阶段,按照key=value的格式传值

特点:可以完全打乱位置,但仍然能为指定的形参传值

func(z=3,y=2,x=1)

注意:可以混用关键字实参与位置实参,但是


1. 同一个形参只能被赋值一次

2. 位置实参必须跟在关键字实参的前面


func(1,z=3,y=2)

func(1,z=3,y=2,x=333)

func(x=1,2,z=3) # 报语法错误


2.3 实参中*与**的用法


1. 实参中带*:先将实参打散成位置实参,然后再与形参做对应

def func(x,y,z):

print(x,y,z)

func(1,[2,3])

func(*[1,2,3]) #func(1,2,3)

func(*'hello') #func('h','e','l','l','o')

func(*'hel') #func('h','e','l')


2. 实参中带**:先将实参打散成关键字实参,然后再与形参做对应




目录
相关文章
|
2月前
|
人工智能 算法 Python
【随手记】python的heapq库的基本用法
【随手记】python的heapq库的基本用法
32 1
|
2月前
|
Python
掌握 Python3 函数高级用法:详解与应用
掌握 Python3 函数高级用法:详解与应用
|
12天前
|
安全 Python
【Python】@property用法简述
【Python】@property用法简述
|
2月前
|
存储 缓存 Python
深入了解python中元类和连接符的用法
【6月更文挑战第20天】本文介绍包括`type`的多重用途,内建函数的常量,模块属性,类继承的概念,元类的工作原理,可哈希对象的重要性,加权平均值的计算,以及如何找到两个列表的交集。
64 5
深入了解python中元类和连接符的用法
|
2月前
|
存储 索引 Python
Python教程:深入了解 Python 中 Dict、List、Tuple、Set 的高级用法
Python 中的 Dict(字典)、List(列表)、Tuple(元组)和 Set(集合)是常用的数据结构,它们各自有着不同的特性和用途。在本文中,我们将深入了解这些数据结构的高级用法,并提供详细的说明和代码示例。
28 2
|
2月前
|
Python
Python Tkinter之variable用法
Python Tkinter之variable用法
42 3
|
1月前
|
Python
Python 中 decimal 模块的用法教程
Python 中 decimal 模块的用法教程
34 0
Python中strip()、lstrip()和rstrip()方法的区别与用法详解
在Python中,字符串是一种常见的数据类型,而处理字符串时,经常会用到 strip()、lstrip() 和 rstrip() 这几个方法。它们都用于删除字符串开头和/或结尾的指定字符或字符集合,但在具体使用时有一些区别。
|
2月前
|
Python
python之requests基础用法
python之requests基础用法