QQ登录

只需要一步,快速开始

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

Python中*和**运算

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

2

主题

1

听众

4

积分

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

    [LV.1]初来乍到

    网络挑战赛参赛者

    跳转到指定楼层
    1#
    发表于 2020-4-15 11:15 手机频道 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。
    * I& C% m7 e  s: R  z: r7 e6 u
    ) y' S. t" B# b" [$ E+ S1. 算数运算* Y! \3 R8 d. p$ n6 Y2 ]
    6 L0 z9 s  U4 U7 ]- I/ \5 \
    *  代表乘法# f# X+ A6 Q  g0 J( s. V  e
    2 H  i3 ~/ p( }
    ** 代表乘方
    9 [7 j* d/ o- e" }& U
    % c8 o# m5 ]1 }# M* J7 X% B( Q>>> 2 * 5* c0 f4 U6 F4 X/ {1 t3 d9 S/ P. t( K
    10
    ) M  J7 ?/ j) A% n4 C2 {% C; }" G. ~>>> 2 ** 5
    2 I: A/ ~+ ]4 o" c" t6 m$ l, \: A328 w/ |. ?! [6 p) e
    2. 函数形参
    : `0 a9 j' O6 F* m& _: S
    5 F" M, k& @# v6 i*args 和 **kwargs 主要用于函数定义。
    0 \+ ^4 O8 j+ j$ a1 L! k, u8 s" K9 L  }) ~) @3 u% V9 o4 P3 o
    你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。$ f$ H% P4 v" f8 r- }8 n0 `
    + [$ k1 e; l. l: z( h3 I
    python函数传递参数的方式有两种:9 h% t9 c) x( I5 t, Z+ D
    / W! @( ~; u/ e9 A8 z+ h
    位置参数(positional argument)
    , P  b  H7 v4 Z8 f" c关键词参数(keyword argument)
    * o% e+ r5 v7 `*args 与 **kwargs 的区别,两者都是 python 中的可变参数:
    8 `- O; R+ [2 [* U8 L. D+ T* z: F- l( n
    *args 表示任何多个无名参数,它本质是一个 tuple
    ( W" z/ |( D  C1 Q+ b**kwargs 表示关键字参数,它本质上是一个 dict/ z* M( m  V  h  \8 A
    如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。
    ; C; [5 k- X8 q1 r+ y4 e& w7 p( v6 x6 J
    >>> def fun(*args, **kwargs):
    3 j& T  P$ B- H0 t0 a1 l6 ]. _# x...     print('args=', args)
    6 j* Q- ~5 w2 J* a# @' q...     print('kwargs=', kwargs)9 L0 H. m3 h& Y, [3 F6 X& `
    ... 0 I( S- A; I' u! |! `
    >>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
    $ {+ k& L1 g7 x% T' Nargs= (1, 2, 3, 4)% U2 L- k# M+ n  `
    kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}6 R. y+ c% S. i6 U& L
    使用 *args. m1 H) r7 |$ Z* l+ j+ C: z

    ; S/ L& j6 F2 a% V* o  k, Q8 |- \' A>>> def fun(name, *args):
    ' g5 D, g' D; y$ v4 D- E- `# L...     print('你好:', name)
    9 @% U6 g/ s% k. U) Q* f; E% T...     for i in args:, Z( J! y" d7 y4 ?' Z; @6 O2 z
    ...         print("你的宠物有:", i)
    7 z6 ~1 d' h7 }# j+ V# \9 p. u* f( {  A: @... / u: d# c: |5 A( w; R& M
    >>> fun("Geek", "dog", "cat")
    6 s9 r9 }1 c4 j你好: Geek8 y" h4 X3 q; Z# f
    你的宠物有: dog
    9 B: B  o6 Q' Y" S& G0 [/ R9 ?# b你的宠物有: cat9 G7 f* J/ u2 P2 C
    使用 **kwargs( j8 P, s# z4 T9 p. L* N$ h
    # s) Q' }9 V4 k( D
    >>> def fun(**kwargs):& U4 [# i4 s7 _- i/ w
    ...     for key, value in kwargs.items():" N: L* w* z8 V7 p
    ...         print("{0} 喜欢 {1}".format(key, value))+ y5 n4 R3 n# A; c0 ]" m9 F
    ... " g: Y, B! V8 S$ r/ Q& x) D& f
    >>> fun(Geek="cat", cat="box")
    + I* {3 O3 X' h" JGeek 喜欢 cat# X  x& _# a  k2 |
    cat 喜欢 box
    ; K4 E  k8 l0 E* _* A7 p" c3. 函数实参
    " H. E# i8 F0 d: D, k' X3 O9 Y
    - n2 p: `6 B4 E2 @5 a2 @6 B+ Z如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:) D6 C) P2 a- {4 C2 @

    / q+ j. Z" A# x; r/ w+ L>>> def fun(data1, data2, data3):* ]5 U! ~1 f2 R- x" F
    ...     print("data1: ", data1)
    8 R" z7 x  l+ g/ r5 M% k/ Z# ~/ g! x...     print("data2: ", data2)7 j) e, Z7 G8 k9 ^! ~- m" C) {
    ...     print("data3: ", data3)& a8 O3 p& N# d/ K. Y! h3 u
    ...
    8 Q6 |) h/ A5 Q. z. \8 D* q>>> args = ("one", 2, 3)
    : ?+ u8 S! t3 f) K>>> fun(*args)0 Q; S* v$ Q+ W
    data1:  one0 g$ M  r8 ]/ N  Q6 F
    data2:  22 S' M% D& h( i
    data3:  3
    $ v1 ~7 e  u6 `) C5 a2 B>>> kwargs = {"data3": "one", "data2": 2, "data1": 3}- r* e+ c2 ^7 d& B: c5 X
    >>> fun(**kwargs)
    9 M: D3 N$ N2 q! V9 qdata1:  3' u0 H1 k2 c, [3 P5 l4 t% z. b8 b
    data2:  22 z  o0 T, l$ V  c9 K0 s! H1 s9 b, D
    data3:  one
    " o" E$ m. s; H6 z2 W& o4 C4. 序列解包8 Y( X# c7 L# j* s& X3 f

    % h; y* I/ [: j) ~$ z$ y序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。4 d- W! Q. @6 z; C8 q
    % [! O5 j% b0 q0 {2 J$ l
    >>> a, b, *c = 0, 1, 2, 3  , I8 q; @; G. d$ f1 s7 v3 }
    >>> a  ' Z+ i5 g3 g7 [8 N
    0  
      |- L/ B8 ~4 s4 P9 h& b9 `, G>>> b  
    & I- H3 x7 N# j, O$ T; L4 h; `: M1  
    1 S, W7 y+ r" a  L. E; r>>> c  $ E9 |' u0 }  a' F8 n+ r
    [2,3]
    3 B" l8 m% s4 {- b& K' f! x( }7 k0 d6 ?
    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 05:25 , Processed in 0.376741 second(s), 55 queries .

    回顶部