QQ登录

只需要一步,快速开始

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

Python中*和**运算

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

2

主题

1

听众

4

积分

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

    [LV.1]初来乍到

    网络挑战赛参赛者

    跳转到指定楼层
    1#
    发表于 2020-4-15 11:15 手机频道 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。# u3 e2 U3 k4 O0 A& P- l

    4 D+ G1 A1 I# S1. 算数运算
    4 ~' a; t- k# ?9 t: |% J4 v/ }, s2 _; |8 E8 y& I
    *  代表乘法% K  T) _# F6 x% B" G
    , }6 L7 M( ]! n3 e+ S
    ** 代表乘方
    % w% M7 s: n) z9 G) L- \7 J
    2 w+ U0 |" ~' X* D7 K  e; V2 B+ C>>> 2 * 5
    # g3 b6 P. ~+ b9 m  e9 n' u10- l$ G/ K) i: Q4 y5 N) {
    >>> 2 ** 5
    - V  w& G( E7 x5 T324 o9 n7 ^1 e/ W( _, A3 K' U9 Q
    2. 函数形参: b* J" l6 ]# L  c
    # H' g& W( R2 q
    *args 和 **kwargs 主要用于函数定义。
    2 {: ~7 U$ x- Y3 i1 b! v0 y* v7 t5 a- I, Z
    你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。$ Q! E$ e- i) L

    4 O( |8 B+ Z0 a! lpython函数传递参数的方式有两种:8 x5 K+ j. V/ _, F
    7 I/ [8 H- ^( ?5 v3 \4 d: z
    位置参数(positional argument)5 j4 u$ D# q" }' z# s" J
    关键词参数(keyword argument)
    6 R" h% d. j# L7 W+ h*args 与 **kwargs 的区别,两者都是 python 中的可变参数:
    ) V, N' r; I. w( Y6 r. s& U5 @8 ?' c$ s3 ?) r! R5 D6 M  j
    *args 表示任何多个无名参数,它本质是一个 tuple1 l& Q6 P. D1 y0 c
    **kwargs 表示关键字参数,它本质上是一个 dict7 K% Y# n" ]9 t- W2 d4 d: x
    如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。. ~3 S* H; y, ~, K2 U. n; H
    ( n9 C6 ]5 Y( K, V) \1 T
    >>> def fun(*args, **kwargs):' G  }) q7 j* @- |4 d! S) B& \
    ...     print('args=', args)1 p7 d. s7 l7 F7 |6 n: a4 G1 I2 W) O
    ...     print('kwargs=', kwargs)
    / \  k0 c# P/ y) a5 g...
    # h& d0 s% ~. k( b( {+ r) H4 k>>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
    5 f% \9 o4 Z- N; Aargs= (1, 2, 3, 4)
    / X0 b9 w( R; E# U) D% l! [5 \kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
    1 x) L% t8 n* j/ K" ^使用 *args& ]% v  T/ f0 G: _  Q( a3 G" U

    , g2 F( h$ P; A7 j>>> def fun(name, *args):
    + ?& P2 D' N9 z2 [0 y- y...     print('你好:', name)
    # w3 T. Y1 H+ T% G8 t$ l...     for i in args:
    4 N" P9 H4 m1 W8 Q6 f...         print("你的宠物有:", i)  b3 O, d. j7 R$ ~5 a* o1 b' O
    ...
    8 V1 R$ X8 d( F. ^3 c>>> fun("Geek", "dog", "cat")5 ~. c* ]( ?8 ^4 X! V9 z0 Y
    你好: Geek7 k3 r3 Q5 \) w% Z5 P
    你的宠物有: dog& x% i6 j0 Y( l# W
    你的宠物有: cat
    # w1 q% U, \+ v" m/ [使用 **kwargs
    5 C, r4 _  ^, l4 y, n) n: O, F  W6 q
    ; p" C6 t. L; H+ A, G>>> def fun(**kwargs):
    $ l7 Y; W* S' I" x5 q) p...     for key, value in kwargs.items():
    / B2 V5 ^# E5 w...         print("{0} 喜欢 {1}".format(key, value))
    . k/ r. p& ?( R; p) q0 }0 N3 B...
    ' h0 }1 ~% q9 p6 a' c( O" H>>> fun(Geek="cat", cat="box")' X6 W2 L9 Y0 K. b" D  r6 P
    Geek 喜欢 cat0 H& @! f% E, u2 ]; C: I  \
    cat 喜欢 box
    - Z5 S) k- t1 X( V7 ~; y3 t3. 函数实参/ H1 B0 V5 p9 K' V8 V
    - w9 G/ _9 I( G' F- h* |8 U
    如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:7 y5 f* N6 O' ^& ]4 E4 p
    1 `) N$ w9 H6 k$ e7 j6 E+ L9 X# [
    >>> def fun(data1, data2, data3):
    ! d' |, H( c$ |* I- `" V( g...     print("data1: ", data1)
    2 }  g' s$ i! u7 {...     print("data2: ", data2)! @; O- K+ V7 H, Y3 T4 t6 C
    ...     print("data3: ", data3)
    6 z9 [* w8 H; G& w; z...
    1 s  }$ a2 i+ {) z; Y>>> args = ("one", 2, 3)9 d/ ?0 J5 H" }2 E
    >>> fun(*args)2 a4 L' w0 W; `
    data1:  one
      H2 T" J4 p( h( i  }" Ldata2:  28 _4 N6 C1 Q5 b7 T* _
    data3:  38 m3 P' I7 a- r) r8 B6 b
    >>> kwargs = {"data3": "one", "data2": 2, "data1": 3}
    : M  z9 }7 j) h( `9 U) J5 k; ^>>> fun(**kwargs)
    0 a/ a9 R0 G8 q& b/ d4 Udata1:  3
    * b) P$ h" A& g5 @) w3 }data2:  2
    : A' v- d% j% h7 udata3:  one
    " c1 q5 I2 B5 K. e4. 序列解包
    3 Z9 @; y0 R* G4 m1 |5 _! W% ^
    ; }' L, v+ o6 K6 p0 J9 L: H9 T+ X序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。% I2 g! n- V& V: ]& h6 O. Q

    . |) i) t! P+ G6 s3 f8 t6 w* `>>> a, b, *c = 0, 1, 2, 3  
    + E' g: z0 a1 K  q; |/ Z3 d. o>>> a  
    % ~3 t; Q6 o2 z( k6 `0 x' Z0  7 _6 }2 F3 S6 `
    >>> b  
    % Z/ h+ r! r3 h$ B) B: H1  9 r! o0 C- g3 ^' R+ n9 @& d' G; ^
    >>> c  # o1 y' f; d5 o1 ~! u9 o) m
    [2,3]
    % w* k) P) t) [$ Z6 j1 Q
    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:25 , Processed in 0.404057 second(s), 55 queries .

    回顶部