QQ登录

只需要一步,快速开始

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

Python中*和**运算

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

2

主题

1

听众

4

积分

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

    [LV.1]初来乍到

    网络挑战赛参赛者

    跳转到指定楼层
    1#
    发表于 2020-4-15 11:15 手机频道 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。% Y5 d+ J  l0 L
    ( N* K& v' r' R6 }4 I4 f  g2 ?, i( o
    1. 算数运算$ [: @- d; F% u; a
    ; R# g/ k" S! s* ]+ F, s( L/ e! j
    *  代表乘法( w; Y* {! ~( O% o+ E

    / F$ e- S$ P7 ~: g5 W! i$ W** 代表乘方
    + T4 t: P# v+ o0 Y$ L) o
    ) {/ C& F1 x/ @2 a>>> 2 * 5& g# x: }$ B5 X' a
    10
    3 F9 M  d* v) s8 P" |7 |>>> 2 ** 5
    ; c7 }& P8 M1 m9 h. M32
    8 U# D1 b  F& ?1 l- _2 I2. 函数形参8 K  i2 A* u4 p, B
    ' m) M1 R6 @, m* n; d
    *args 和 **kwargs 主要用于函数定义。
    + [% c: j& s. ?- L4 f& C' I/ E2 @
      M3 o3 B* }4 _; t你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。
    - \1 g5 ~( k1 `+ y+ _! _
    4 {6 y  D* f7 v; Dpython函数传递参数的方式有两种:
    ( [+ {! ~( s$ b6 o+ o( Y" X" A. i4 V: b* w4 ^
    位置参数(positional argument)5 ~: j6 V$ u$ Y0 C) s  i
    关键词参数(keyword argument)
    $ @7 Y; v" T# z) m7 A*args 与 **kwargs 的区别,两者都是 python 中的可变参数:, e& r: [1 k( P4 _* S1 c

    ( K& b7 ~- V* l: R$ l*args 表示任何多个无名参数,它本质是一个 tuple% C  ]4 g( a' ?* k6 |
    **kwargs 表示关键字参数,它本质上是一个 dict
    ' y, }0 n7 [. u' h如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。, O1 f1 v3 f7 i! }; o) c& W/ f

    9 I, d/ f* U5 {: G' I>>> def fun(*args, **kwargs):. |1 r/ b3 g8 R$ \4 R' i
    ...     print('args=', args)
    + {* |$ `, K$ l0 T8 a/ W...     print('kwargs=', kwargs)% ~+ f& |% L* j
    ...
    % y5 |6 e6 C6 }6 I( u$ r>>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
    6 f. z4 o3 L: p2 pargs= (1, 2, 3, 4)
    5 r% k4 F3 f( a# L4 dkwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}( J$ S7 d3 B0 b9 R# s; O, P
    使用 *args
    ) _, J& V# V( e8 S* m9 H: O0 o  H* h* L% ~
    >>> def fun(name, *args):/ v; M) X& Q& j
    ...     print('你好:', name)$ {' d6 R: ^! x2 ^$ z+ h
    ...     for i in args:
    " j( W& R8 V+ ^; _* i...         print("你的宠物有:", i), S2 ?: C4 S3 G1 r6 [/ J
    ...
    $ C( t6 J- I, W9 X>>> fun("Geek", "dog", "cat")
    2 y% n4 O& D! t$ \! s* [* G你好: Geek
    ' s: q( i% _4 g3 t1 ?你的宠物有: dog
    6 b$ R1 [3 {8 w8 ~3 x你的宠物有: cat
    ) l! A7 U8 P/ y2 J9 S5 ?# V使用 **kwargs4 z) N3 O+ p7 N/ R" e3 @2 x

    * X* D' S6 e; l  Y" |# q2 J>>> def fun(**kwargs):( A4 }$ Z, o* ^4 Y
    ...     for key, value in kwargs.items():+ `9 \9 ~0 ~( t. }1 t+ h2 O. S6 H9 I
    ...         print("{0} 喜欢 {1}".format(key, value))
    / p0 Y8 `  f( K# w7 ]* a... 8 O4 a) F: u& x4 x3 P; ]
    >>> fun(Geek="cat", cat="box")
    3 X; |+ b2 @& c3 h: u; @! m% GGeek 喜欢 cat
    0 `  y+ w8 D" U, E$ C" Icat 喜欢 box& _  Z) k1 N( O6 L
    3. 函数实参/ n8 T# j  T' ]8 a% A
    ' R  T$ x$ t- L3 z" h  U0 s% C
    如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:/ U3 c8 x  Y( d0 B7 }

    ! W$ t7 O- D) K" `8 z>>> def fun(data1, data2, data3):
    ; M5 z  v3 |7 y9 }  l% f& i...     print("data1: ", data1)6 x( x. q8 i, X/ S7 `
    ...     print("data2: ", data2)$ E! O1 }0 ?8 a- A3 V
    ...     print("data3: ", data3)
    # g: z/ O& `$ W. h" B; u* @... 7 k, [, O, C# y0 ]# I9 S+ r% T
    >>> args = ("one", 2, 3)
      O. @& ?7 u# _' ?5 ?+ W6 f& p>>> fun(*args)1 |$ K" w, W0 s/ y3 y
    data1:  one) h; `2 p( p) P+ E
    data2:  2# j" |; _5 r5 [: W8 A' T: m3 p
    data3:  3
    3 {3 z. a- V2 p, e- t( x4 W>>> kwargs = {"data3": "one", "data2": 2, "data1": 3}, d" v: Y: q9 R! j
    >>> fun(**kwargs)$ R, O$ ^2 a0 l5 U9 ~0 A' p
    data1:  3% x5 c, \5 I5 c4 u8 g- v" G
    data2:  2
    & R' `3 n8 e# X1 adata3:  one# F0 w5 l5 D( t  _
    4. 序列解包
    5 e: W; `# O4 J( t; P' ]) Y0 X: E
    " R7 G8 d* @- I# N) i$ K序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。3 H+ X( C1 A$ {6 Y( I2 g

    3 B2 F7 l& r- v" G>>> a, b, *c = 0, 1, 2, 3  # T8 n9 V* ]! t8 h3 k
    >>> a  
    2 M& q* P( E* Y* L0  
    6 @) y7 c8 k" y6 M. c>>> b  
    ! x) j; Q2 w) f6 I. N2 \( |! g1  
    0 k: ]9 L" y6 K; }' n7 d' F>>> c  
    7 U7 `% B& [& k( R' ~, g[2,3]  ~) h6 D; X4 K* f
    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-7-20 09:24 , Processed in 0.557958 second(s), 55 queries .

    回顶部