QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6687|回复: 1
打印 上一主题 下一主题

Python中*和**运算

[复制链接]
字体大小: 正常 放大
hfyxr        

2

主题

1

听众

4

积分

  • TA的每日心情
    开心
    2020-5-30 12:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    网络挑战赛参赛者

    跳转到指定楼层
    1#
    发表于 2020-4-15 11:15 手机频道 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。
    * p0 |: c* G% I" q9 Y+ |) J7 c# A. I- P2 C  k
    1. 算数运算8 q; v/ ^" k% T( n# i+ \% [

    % x# }7 z- C" J' }7 L1 B* g*  代表乘法3 C8 Z4 z0 y4 i; m

    % F' e) K8 J- E+ T: u! a** 代表乘方
    " s! Y5 I. \' M/ ^
    2 v; a& r" @- Q! I& b>>> 2 * 5
    2 v* y3 F2 w6 ~) `10
    ! t4 A7 @' P2 N( K>>> 2 ** 50 `" ?8 H9 N( S5 e5 ~- e( N
    32  K' K3 Y/ V5 G9 _: T+ U
    2. 函数形参
    ; p- p& X, c; J8 d. s6 }  }/ X8 X) V) x' P1 T) J: A% R. {+ w; i
    *args 和 **kwargs 主要用于函数定义。! S4 ~# R/ ]# e$ [$ W. ?
    / }1 ^% u/ Q5 R) v! S  ?
    你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。- y1 S; z# {% t0 d

    $ U! X' j, N+ ^  f1 |5 z% ]python函数传递参数的方式有两种:+ I/ [; U' S+ e0 F9 N/ v$ I

    7 V& `+ I2 ]* @3 v: s位置参数(positional argument)3 ?& z. b2 H# Z: W5 d
    关键词参数(keyword argument)
    . p' W. O, G) ~% p, C*args 与 **kwargs 的区别,两者都是 python 中的可变参数:
    3 q9 i- [6 P+ s9 b  K4 l6 ^1 l3 L+ Y) b0 |0 {) }2 e% y; N
    *args 表示任何多个无名参数,它本质是一个 tuple
    / }/ d5 }: l( ?( a  [**kwargs 表示关键字参数,它本质上是一个 dict! u% d6 |' A9 O4 s
    如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。( T3 [5 U$ K% D# H, D, h: g
    ! z6 k  Q6 e- n$ ]  w' F+ \
    >>> def fun(*args, **kwargs):
    2 Z! y& _2 ?. U2 {6 E8 ?...     print('args=', args)
    ! F1 w% p. N5 f. F; q...     print('kwargs=', kwargs)
    8 w/ B/ g! A2 X0 a$ A( q...
    5 o+ `5 u# q8 e8 H5 S>>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')$ U/ Q' t9 e( S% v- ?, M& i
    args= (1, 2, 3, 4)
    $ J& }1 M# M" H4 m. dkwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}: k1 t4 e, [" B  e, O4 T
    使用 *args5 C2 ]+ Z3 X5 G7 m

    9 C) l) ]4 Z3 g9 ]' @6 E>>> def fun(name, *args):% M1 ?0 S. x, U! i- E
    ...     print('你好:', name)
    1 I/ f) X# a7 j! P7 A9 E1 p* e...     for i in args:" n/ ^& O6 l2 k+ ], j
    ...         print("你的宠物有:", i)
    0 R5 `1 \- @' d8 [6 d+ {. D... 2 W& n2 y. [) w) r, u; M
    >>> fun("Geek", "dog", "cat")
    ! l# m+ z: s6 T: a5 \# ?" `9 o; O你好: Geek
    1 N- Z& W9 V5 c* b- s8 r1 N; L2 F你的宠物有: dog
    " U* t7 P  i( U; l% D1 e% U你的宠物有: cat
    ' T0 P1 ^6 [0 _使用 **kwargs$ }# c0 `* P' N) n. l* U& b+ f
    # Y; Q& i2 p/ I" v8 ~# M
    >>> def fun(**kwargs):1 H+ u2 g# Z4 U: M! g
    ...     for key, value in kwargs.items():$ F8 L$ c& [' ]. R4 D' A% ]
    ...         print("{0} 喜欢 {1}".format(key, value))
    ! h: G( R! H# x9 E, G# h& O... ; ]) |0 e' S2 b7 m. K' F7 ~3 `
    >>> fun(Geek="cat", cat="box")
    * X" E  T( g# L9 Q1 q' h- VGeek 喜欢 cat
    , Q% Y* l" K$ m- K# Y2 @cat 喜欢 box& Y0 R; t; ~5 t; |( D" Z
    3. 函数实参
    2 o( p# `! \5 V2 y; a
    % n# i  ?( U: N3 t5 @" ], z- J如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:: n. L1 m8 O7 v. c
    0 Z( L, U6 w9 R( v: G
    >>> def fun(data1, data2, data3):6 V' v( l+ h8 }* O4 V3 X4 u
    ...     print("data1: ", data1)
    " g: l" T% M; Q. P...     print("data2: ", data2)
    ) w( ]5 C# V9 n! {) W, }...     print("data3: ", data3)
    , y7 U6 N/ g: ?% \" _( |( G( R- s...
    ; H& `' B' T" n, D. `>>> args = ("one", 2, 3)
    9 ~+ [) g4 I9 N8 B, L, z) y' D: h>>> fun(*args)
    ! L. H. L) x, V2 N0 n& qdata1:  one, l9 s+ N( z* b1 \0 X
    data2:  2
    / q  \4 x' ^4 m+ w5 edata3:  3  I6 v# v# b( w0 M) _
    >>> kwargs = {"data3": "one", "data2": 2, "data1": 3}
    + h8 Q$ {! {4 |$ i4 _: z>>> fun(**kwargs)$ L% g, c$ Z9 u% h) o7 v1 w
    data1:  38 G9 z9 |' [. [' G6 E
    data2:  23 g% u, h2 c! q4 b- ^
    data3:  one
    + T7 X0 I) [# n; C) a4. 序列解包
    " r. C# V2 K8 o8 y' Y9 \5 R( [& d. D2 X5 n! D5 r* N
    序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。
    + K1 ?& E: t4 e* z+ @# p  R$ J6 L6 C6 J- j
    >>> a, b, *c = 0, 1, 2, 3  
    & R9 e, H6 y* L- B, y" z* E! M) k, n2 K>>> a  2 h  b3 y& E0 k3 o' }! x
    0  + k2 U. S& g5 f/ H7 r! K! i
    >>> b  , q! n/ T2 X/ Z+ r7 t) s0 K2 s  p
    1  
    0 T8 ?+ L  E/ T6 @>>> c  
    5 ~* J: B+ \  v/ W. N: t1 j) m) `) B[2,3]
    6 L/ @- f9 R% y
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    69

    主题

    3

    听众

    661

    积分

    升级  15.25%

  • TA的每日心情
    开心
    2020-9-13 05:34
  • 签到天数: 149 天

    [LV.7]常住居民III

    网络挑战赛参赛者

    群组2013认证赛C题讨论群组

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-9-7 06:26 , Processed in 0.424614 second(s), 55 queries .

    回顶部