QQ登录

只需要一步,快速开始

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

Python中*和**运算

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

2

主题

1

听众

4

积分

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

    [LV.1]初来乍到

    网络挑战赛参赛者

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

    ) t8 Z6 O0 }0 B4 X; M1. 算数运算
    : `0 r! `" S/ d7 b9 h! o9 \/ b) ^/ v8 W2 J; C) R3 K, W
    *  代表乘法4 M6 m: g/ m7 S4 f9 ]2 f* ]
    # g6 t- Y+ l) M2 K
    ** 代表乘方
    . T0 P: q! F7 e. ~0 ?1 k
      p: L# ?1 B& y4 X" a8 q$ ^>>> 2 * 5! F; s$ R5 M" u/ I4 N
    10
    * V  n( k* m  i* A  i, d>>> 2 ** 5; d' Z0 Z4 k( U5 Q1 S- U; U
    32; r( E; |& U) P  z5 E- ^( g% U) b
    2. 函数形参
    2 u& M% C$ v! f9 w
      a) G# }% E) w  S+ s: g5 S*args 和 **kwargs 主要用于函数定义。
    " e: Y; V  Z$ N  T: B( O
    1 B- J" l" u$ Q" y你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。
    / m  I; a, a4 h2 @% U6 C0 t& X
    ) s  \/ g/ p3 N1 apython函数传递参数的方式有两种:
      [* v0 F) k9 l3 I' n* m+ N: Y- a
    位置参数(positional argument)/ |5 Z; A' e- h7 E4 M
    关键词参数(keyword argument)$ N; I0 \  _" ^% ^! |% W0 @  b
    *args 与 **kwargs 的区别,两者都是 python 中的可变参数:
    " ~; C4 L" S  b6 P% ]5 i, m4 Y+ F2 Q% {- O+ `  {- X
    *args 表示任何多个无名参数,它本质是一个 tuple) W, r% L0 x- l$ E$ i/ n9 G
    **kwargs 表示关键字参数,它本质上是一个 dict
    # \5 [0 W. i! H; w! _) b7 Q如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。
    & y1 y  b- k3 P9 N% L  {! D9 S9 s% G+ J7 m8 n8 c, e6 Z
    >>> def fun(*args, **kwargs):3 q$ X) v1 M$ d$ ^  g
    ...     print('args=', args)3 l5 u# q# V0 ^2 w
    ...     print('kwargs=', kwargs)
    * W' T: l0 b. i- L...
    . N6 K$ H2 S. q, w>>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
    # {# o# X( f; B! y% Y' U0 E) xargs= (1, 2, 3, 4)
    7 M. f* }) n' ~# jkwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}8 j8 a9 c+ H, l" [& i
    使用 *args
    " m1 p* ~) x; S$ I' B8 o
    1 E9 ^7 L" }* J: Y/ ~>>> def fun(name, *args):
    , |* g  s3 P, i: j...     print('你好:', name)6 M) A9 J7 Q& Y3 `: F; X3 A# a0 c
    ...     for i in args:) G- a% h& g0 Y* R+ @
    ...         print("你的宠物有:", i)
    , f" r% b$ F6 z( ]% k' b) w... , H. m% v+ B' A
    >>> fun("Geek", "dog", "cat")
    ) F8 l5 @- L. I% J+ U+ W/ H0 \你好: Geek7 ^. f8 W6 f% Y0 h7 o% t8 z; i5 O
    你的宠物有: dog
    7 q0 i1 B& j' X8 b1 O* ^( `你的宠物有: cat
    3 D6 @# j7 V+ m8 `使用 **kwargs* y) J! ]7 {, `+ g0 F9 z
    6 M3 A7 }: f- v8 z8 |
    >>> def fun(**kwargs):0 |3 T; W7 q2 [2 I
    ...     for key, value in kwargs.items():; \8 p' c) O: K& C( q
    ...         print("{0} 喜欢 {1}".format(key, value))3 K+ Q5 ?6 j% O2 ]* Z
    ...
    * v" h  B# _+ \  u) ]>>> fun(Geek="cat", cat="box")+ L& {- I' S9 a9 B4 H) J
    Geek 喜欢 cat& x7 {$ _$ x6 {6 S. v) p
    cat 喜欢 box
    % V* T; a3 w) ]9 h7 Q- n3. 函数实参
    $ f$ h5 r( o7 x  u9 a! R
    . ?# a% i& y6 [如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:
    3 |0 _" I2 r7 B8 I1 U& B
    2 r8 k; u# l* L# s* [>>> def fun(data1, data2, data3):
    1 b/ H  {# Z/ \1 f) Y1 P/ J' ^4 F...     print("data1: ", data1)
    * S7 J0 h1 f5 z...     print("data2: ", data2)
    , D& S0 X/ H3 ]...     print("data3: ", data3)
    : S. l2 o/ e- G$ ^. }1 l$ J...
    " r( G' h" N( s4 q>>> args = ("one", 2, 3)
    " _$ f5 {9 o/ B" z>>> fun(*args)! b5 e5 M4 B7 }  G7 d  F2 |4 ^
    data1:  one$ k$ d; a/ m% v% N: q& y: G% e
    data2:  22 g* O) Z/ t0 ^6 }9 _
    data3:  3" y) v" O/ G8 m# z8 X3 P
    >>> kwargs = {"data3": "one", "data2": 2, "data1": 3}% h8 o0 C9 k' J8 _  m- |1 Y" q9 x
    >>> fun(**kwargs)$ _, ~; d. y6 z
    data1:  3& P5 W) x' R6 I4 G
    data2:  24 D! G" N3 L$ C
    data3:  one: d6 s7 t3 F8 ^
    4. 序列解包
    7 g6 j5 E/ x6 ?: Q8 h* p( ^" p: Y# [$ ]' o' @  s" B) N3 d
    序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。
    7 `# A$ j( D' {6 i
    * h3 w3 P9 h& p2 R5 J/ {+ V" c>>> a, b, *c = 0, 1, 2, 3  6 i4 ~2 t9 I+ p! ^; k. i5 p# z& o0 ~
    >>> a  3 t: }, p2 n) _. _0 T' w
    0  ) N: U$ O$ Y$ j7 j7 P
    >>> b  
    5 M0 Y5 W* g; H; ?; |& B6 {; Z1  - h! ~) h; I; R
    >>> c  2 o4 N. r* _- C" c' i
    [2,3]
    ' }0 d7 F/ S/ u6 l
    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-4-13 11:15 , Processed in 0.432962 second(s), 55 queries .

    回顶部