×乘号在python中怎么产生 python里的乘号怎么打_python两个乘号


1、数学运算符号

在作为数学运算符号时,*表示乘号,**表示乘方


a = 2
b = 3

>>> a * b
6

>>> a ** b
8


2、函数形参可以接收多个参数

(1)Python允许在函数的形参前面添加一个(*)号,这样就意味着这个形参可以接收多个参数值,而这多个参数值被当作元组传给该形参。同时python只允许一个函数中只能有一个带(*)号的形参,同时这个形参可以在形参列表中的任意位置,不一定非得要在最后一个位置。但处于该形参前面的形参必须使用位置参数,处于该形参后面的形参必须使用关键字参数。


def function(x, *y, z):
    print('x = ', x)
    print('y = ', y)
    print('z = ', z)

>>> function(1, 2, 3, 4, z=5) 
x = 1
y = (2, 3, 4)      
z = 5

>>> function(x=1, 2, 3, 4, z=5)
报错!

>>> function(1, 2, 3, 4, 5)
报错!

#如果某形参前面加了*号,那么该形参就不能再使用关键字参数进行传值
>>> function(1, y=2, z=3)
报错!


(2)函数形参前使用了两个星号(**)表示该形参可以收集多个关键字参数,这些关键字参数作为一个字典传给该形参。


def function(x, *y, m, **z):
    print('x = ', x)
    print('y = ', y)
    print('m = ', m)
    print('z = ', z)

>>> function(1, 2, 3, 4, m=7, a=5, b=6)
x = 1
y = (2, 3, 4)
m = 7
z = {'a':5, 'b':6}

>>> function(1, m=7, a=5, b=6)   #没有给参数y传值
x = 1
y = ()
m = 7
z = {'a':5, 'b':6}

#前面说到*号形参可以在任意位置,但**号形参只能在最后一个位置,所以*号形参必须要在**号形参之前


(3)星号分隔符,当一个函数中需要指定哪些是位置参数,哪些是关键字参数时,可以使用星号分隔符,星号分隔符前面的是位置参数,后面的是关键字参数。位置参数只能使用位置传递,关键字参数只能使用关键字传递。带星号的形参也相当于一个星号分隔符。


def function(x, y, *, z):
    print('x = ', x)
    print('y = ', y)
    print('z = ', z)

def fun(x, *y, z):
    print('x = ', x)
    print('y = ', y)
    print('z = ', z)


>>> function(1, 2, z=3)
x = 1
y = 2
z = 3

>>> function(x=1, 2, z=3)
报错!

>>> fun(1, 2, 3, z=4)
x = 1
y = (2, 3)
z = 4

>>> fun(x=1, 2, 3, z=4)
报错!


3、序列解包

在进行序列解包时,可以只解出右边变量的部分元素,其余元素依旧采用列表储存。在左边被赋值的变量前添加(*)号,那么该变量代表一个列表,可以保存多个元素。但一个表达式里面只能有一个带(*)号的变量。


t = tuple(range(6))
a, *b = t
c, *d, e = t

>>> t
(0, 1, 2, 3, 4, 5)

>>> a
0

>>> b
[1, 2, 3, 4, 5]

>>> c
0

>>> d
[1, 2, 3, 4]

>>> e
5

#根据自己想解出哪些元素可任意组合:
*a , b = t
a, b, *c = t
....


4、函数实参解出多个元素

前面说到函数的形参可以使用带星号和双星号的,那么当函数的实参为带星号和双星号的又代表什么意思呢?

(1)星号实参,星号实参将该一个可迭代变量(如列表,元组)中的各个元素解出,以位置参数的方式分别传给函数中的各个参数,但要保证可迭代变量解出的元素与函数中的形参数目相等。如果星号实参作用于字典,则将字典中的key解出以位置参数的方式赋给函数的形参。


def add(x, y):
    print(x + y)

param1 = [1, 2]
param2 = (1, 2)
param3 = [1, 2, 3]

>>> add(*param1)    # x = 1, y = 2
3

>>> add(*param2)    # x = 1, y = 2
3

>> add(*param3)
报错!

-----------------------------------------------------------------------------------
def fun(x, *y):
    print('x = ', x)
    print('y = ', y)

def fun2(x, *y, z):
    print('x = ', x)
    print('y = ', y)
    print('z = ', z)

a = list(range(6))

>>> a
[0, 1, 2, 3, 4, 5]

>>> fun(*a)
x = 0
y = (1, 2, 3, 4, 5)

>>> fun2(*a)
报错!   
# fun2中的形参z为关键字参数,不能通过*号实参传值。

----------------------------------------------------------------------------------
def fun(x, y):
    print('x = ', x)
    print('y = ', y)

param = {'a':1, 'b':2}

>>> fun(*param)     # == fun(x='a', y='b')
x = a
y = b


(2)双星号实参,双星号实参作用于字典,将字典中的key-value的形式转为关键字参数key=value传给函数中的形参,但要保证函数中的形参命名要与字典中的key保持一致,同时也要保持个数相等。


def fun(x, y):
    print('x = ', x)
    print('y = ', y)

def fun2(a, b):
    print('a = ', a)
    print('b = ', b)

param = {'x':1, 'y':2}

>>> fun(**param)      # == fun(x=1, y=2)
x = 1
y = 2

>>> fun2(**param)    # == fun2(x=1, y=2)
报错!
# 字典key与函数中的形参不对应