QQ登录

只需要一步,快速开始

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

Python中*和**运算

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

2

主题

1

听众

4

积分

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

    [LV.1]初来乍到

    网络挑战赛参赛者

    跳转到指定楼层
    1#
    发表于 2020-4-15 11:15 手机频道 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。
    - S7 T2 [2 q( O* n5 b
    ! `+ ?9 D9 i( x. d7 z' u1. 算数运算0 e8 L: I' S/ q) m# `4 o# ], d

    7 j( ?5 d3 s6 }! ~, m3 N+ M*  代表乘法: Q$ d) A& A' k7 k/ B& j

    9 e9 q- y9 t; o' L) `4 r& ^** 代表乘方: x* w2 V* R8 H0 C0 `# c

    ! K0 l6 t4 |# W1 M+ R* N0 z! z2 K>>> 2 * 5
    2 F: y5 r3 K1 a$ F: P0 C$ {! }* w: V9 J: @10
    % f' _, F% W8 [0 d>>> 2 ** 5
    - p6 h/ n2 G2 N0 U/ `8 E6 b3 s8 `32
    ! T7 D6 R9 d# v! d- f% u: }2. 函数形参3 h7 C. ~! Y6 w5 B! N5 p2 q, i
    & \; s* j) {+ w, {: H' I
    *args 和 **kwargs 主要用于函数定义。
    0 t& K. t# a8 m5 H8 K4 Q2 A! s+ W4 v
    你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。
    & y. d% r, \$ X- t8 u3 J
    * O( C, W# \0 ~1 e) Ppython函数传递参数的方式有两种:+ ~+ g9 I9 s5 j5 y: ~, d% n

    , j  b- n9 F! z* j2 O$ e) ~位置参数(positional argument)
    % _/ B8 O% C0 i关键词参数(keyword argument)# `8 b. C- `  ?# N, l
    *args 与 **kwargs 的区别,两者都是 python 中的可变参数:+ e  U0 z9 A' k) s" b8 R7 L
    % y8 [6 P7 V- _' ~" U- }
    *args 表示任何多个无名参数,它本质是一个 tuple
    1 ]/ C' M3 G6 n8 U2 ]**kwargs 表示关键字参数,它本质上是一个 dict
    " P) M5 E) P$ @2 j1 ?! ?如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。" J$ j  a* w4 k$ |  O! v& J# A. P& |
    ) [3 [+ B  W2 A) u3 ]& r% N
    >>> def fun(*args, **kwargs):
    1 H  R0 ^6 I: A3 _" {% _2 R...     print('args=', args)
    3 {8 e3 Z, x# `. q  T...     print('kwargs=', kwargs)9 a: a6 x+ H) E- M: X6 ~
    ... - a/ Z  r8 I% ?6 w. k- m, Y
    >>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
    ' b8 I" d) g% }args= (1, 2, 3, 4)+ [/ N4 d6 m. Y3 V" ?
    kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
    & T7 c0 b/ Y% R3 c6 @2 f使用 *args
    . ]: k5 {7 s$ z  F" P* w4 _( u
    2 G0 b. `/ I6 w5 }  E( ~! {6 X" _>>> def fun(name, *args):" `$ C' {3 L, e
    ...     print('你好:', name)
    " K4 V; I) A$ c* f) \...     for i in args:2 X/ `8 t% F: K+ K6 C* T
    ...         print("你的宠物有:", i)
    $ R/ Y& w4 J; {( k! L" h...
    / ^" S( g* p* M>>> fun("Geek", "dog", "cat"); j, U2 w2 S0 H. H
    你好: Geek. d; [. l/ `5 b6 ^6 d; k
    你的宠物有: dog3 K4 Z; O& X( K& j" `) N# q' V
    你的宠物有: cat+ j' z. @) G( ?9 Q7 }1 O
    使用 **kwargs
    ' ?1 A+ n. ^( `2 ]6 a: |7 ]5 e2 u8 M- e& J" t5 f& c
    >>> def fun(**kwargs):% O8 C1 t6 L9 I4 _
    ...     for key, value in kwargs.items():- g$ N7 O& w0 J( W. z9 @
    ...         print("{0} 喜欢 {1}".format(key, value))) z( G4 Y) H9 |' p' j! \
    ... * R6 ~1 u+ I; g
    >>> fun(Geek="cat", cat="box")0 N4 B# ~" m$ ?" w6 P! ]6 k2 ]! ]6 Y
    Geek 喜欢 cat5 A1 z+ D, G- s, [6 m- l
    cat 喜欢 box- ?" J+ |, v& t" S
    3. 函数实参+ k/ [% p) {8 j, g, ]0 |; r0 K
    0 r" Q2 w7 ?6 H2 Z
    如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:. B$ Y9 A  e/ n

    5 R5 z  R9 g8 }& r* b! D7 V>>> def fun(data1, data2, data3):
    ' ~8 F6 `. }4 e- b...     print("data1: ", data1)
    / Q, U/ u8 G) o- X' F0 D...     print("data2: ", data2)
    6 Q: s9 [8 V0 H0 U* Z2 A...     print("data3: ", data3)
    9 Q' s) m" [& E# b6 {, K... 6 h+ F4 w9 G: w2 {7 d+ F' j1 x0 U0 j
    >>> args = ("one", 2, 3)
    ) G* i: x9 q9 A5 x; `8 M8 \% j>>> fun(*args)3 s4 v7 z. W* b
    data1:  one
    + x; f8 @0 M5 s: }8 _. M  ^data2:  2
    2 ^$ O( J8 Q9 l' g  wdata3:  3
    : Y) N& |7 @) x* c$ ]  B>>> kwargs = {"data3": "one", "data2": 2, "data1": 3}( H2 K9 D; U3 K8 q
    >>> fun(**kwargs)
    ' m& ]  a6 W5 v5 ^+ `# X2 S+ zdata1:  3
    . E3 d. l/ a0 i+ \( G3 gdata2:  2$ V: t2 n3 b7 N. }, {$ ?8 d
    data3:  one& G7 v& u5 T3 a: Y; h; [
    4. 序列解包$ J' f3 m8 ~2 i, B- J
    - y$ S# E  t  r* C5 l& f) D
    序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。
    7 K& Z3 ^7 N& }0 X/ u
    # _+ r- A, z7 Z' f: W>>> a, b, *c = 0, 1, 2, 3  
    " \3 a5 E4 s4 ^4 g" G>>> a  
    7 R! i6 a$ T' b2 N0 q0  % |/ L4 \  ^$ T; j8 W: s; u
    >>> b  4 o  r* t3 v& H* j& n4 q# A
    1  1 L$ \; v8 V5 k! ^) m( ^
    >>> c    ~8 O0 h9 [% C, f1 Z) G; n
    [2,3]- X% [2 h3 T1 p- ~1 R# 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-4-21 04:32 , Processed in 0.422941 second(s), 54 queries .

    回顶部