QQ登录

只需要一步,快速开始

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

Python中*和**运算

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

2

主题

1

听众

4

积分

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

    [LV.1]初来乍到

    网络挑战赛参赛者

    跳转到指定楼层
    1#
    发表于 2020-4-15 11:15 手机频道 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。( W. Q) A) t, ]% z$ H1 o( M

    6 Q0 i  `: }) ~- _( t1. 算数运算; e" W7 _( P+ f) ]8 I

    $ u7 s3 e  z% _* \5 H*  代表乘法* W9 T% }7 x9 w  W6 G
    5 ?2 {! W6 ^6 b% l
    ** 代表乘方
    % L/ M, g( V$ i" H
    * T- V7 J4 p3 a. h- @>>> 2 * 5' @" x. v2 q9 r- K
    10
    1 I# B5 K! C6 V( |7 I" Y- ?/ K4 ]>>> 2 ** 5
    3 A. I6 C2 Z  q, P32
    0 c- r1 h0 n+ Z5 d2. 函数形参
    ' H( M  y6 e3 `
    6 }7 k- O& d- V  y' U8 N" Q*args 和 **kwargs 主要用于函数定义。
      [: K" k8 s/ _: @& E1 e' O3 j9 n) s
    你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。
    ; q) Y7 v- E5 W" A
    4 k) P# C3 O( Xpython函数传递参数的方式有两种:( i# p* W3 l9 L, s2 y% P& p

    ( W& w% m% Y6 i7 I7 \/ g9 R5 l% ^位置参数(positional argument)+ j+ J8 C# L3 S% B5 |2 |
    关键词参数(keyword argument)
    ; J7 M" @" O9 q* q6 w*args 与 **kwargs 的区别,两者都是 python 中的可变参数:
    , q& F, G7 f, u
    0 ?6 D: l* s* i7 Z5 q3 f*args 表示任何多个无名参数,它本质是一个 tuple
    ( `* g% R1 p5 n) Q**kwargs 表示关键字参数,它本质上是一个 dict
    8 ~8 B6 y3 i. A7 Y( j7 b如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。
    * I( p* V* V3 j1 y% {% C$ `2 U( C+ [2 }5 T
    >>> def fun(*args, **kwargs):8 V4 Q4 c/ |/ H  ~! ^- g) F$ X
    ...     print('args=', args)
    ! m0 f  L0 x0 A" ^$ C3 j...     print('kwargs=', kwargs)* X4 t  e+ @% \6 n  j9 @3 j
    ... 8 N" U8 h4 N, Y# V+ b, k  x
    >>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')/ y& K$ X5 X& k1 c3 F! [5 _/ ?) Z
    args= (1, 2, 3, 4)4 D. P4 I9 f5 X" L1 ?4 S' u
    kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}0 {& j  Z, q9 \: N: h! q, j& H3 |, r
    使用 *args  k: y) H+ Q7 S' |1 F

    8 \- `* C+ D" Z* u>>> def fun(name, *args):
    ; G4 i1 f" b3 ^5 G9 ~( P...     print('你好:', name)+ ]" `8 ]% |6 i' p: x
    ...     for i in args:
    ! p$ D; L6 l2 y# w% E$ a...         print("你的宠物有:", i)
    6 f/ ^* p. V, ^$ l/ S... 5 J/ r  U$ l- _4 E" ~" G/ {, n) N, X
    >>> fun("Geek", "dog", "cat")' E6 F% h" D* l/ Q% ?1 Y
    你好: Geek
    - Y2 Z& R$ k, E你的宠物有: dog' N' {7 K6 i% W% n
    你的宠物有: cat5 y  i( L' G! }4 U& g
    使用 **kwargs
    9 i" G* J% b4 W% M( A9 H9 W
    % a6 \4 K% X* o0 h( s2 z>>> def fun(**kwargs):
    ( g* a  e( R+ G0 A...     for key, value in kwargs.items():
    0 S1 W: g5 `1 X1 W* ]0 V" c...         print("{0} 喜欢 {1}".format(key, value))+ i! |5 b: O! I  T$ p+ ]
    ...
    & r1 w/ Z7 f% i! H, o" q>>> fun(Geek="cat", cat="box")
    & X( j& C( Y0 z8 a( |* A/ {Geek 喜欢 cat
    6 C7 N9 x  ^) ~3 h1 I+ Zcat 喜欢 box
    + }; b3 l8 y$ Z  K% D3. 函数实参( G! H" @2 p. [' m
    " c: W3 O9 k: W
    如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:5 ?) l9 }/ d" p* U& q! d& {8 N+ O6 X
    % k0 d' f2 ]% K
    >>> def fun(data1, data2, data3):
    : U) a+ }5 e# D$ O/ y* f7 y0 f+ o  z...     print("data1: ", data1)
    8 T* o) X; i" k/ z1 K...     print("data2: ", data2)- P, n" U' L: Z+ U- W& `
    ...     print("data3: ", data3)
    - F, G* Q2 |9 a& s% R9 _  a- s...
    $ ]# Z. k! N( t>>> args = ("one", 2, 3)5 O& u# v" m1 y/ Q
    >>> fun(*args); x3 n/ @" k5 T3 X
    data1:  one
    0 ^) ~" m) X+ \7 d" C2 ddata2:  2
    7 {+ Q2 f+ @1 |0 n) {/ b, p; sdata3:  3
    8 d1 o1 }& Q2 W9 g- H>>> kwargs = {"data3": "one", "data2": 2, "data1": 3}: X6 |/ W' o& d- v
    >>> fun(**kwargs)$ K& c, r* B0 K4 K. `( v% B
    data1:  3) h, H" I6 h- ~6 j
    data2:  2
    + L( M7 k% q, m! G; u9 P$ ^* fdata3:  one/ D6 D$ a, u$ Q. L, K% j- l
    4. 序列解包
    5 H: X- s' b! o8 W6 {8 O/ b4 {, I8 H- `' l# w5 i
    序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。3 O( G: z, V- |2 B4 W0 g; f
    ( E, P4 a( h! U2 G
    >>> a, b, *c = 0, 1, 2, 3  ( Q+ D6 _2 {6 p1 k5 n. }, L; W
    >>> a  ! e& L/ r; I6 U6 i: P4 h
    0  
    5 c  X" s+ r5 f2 E" j/ G9 E>>> b  % a1 E/ |. O1 r" Z) _- w
    1  
    ' z! c$ Q2 j6 i! D$ w>>> c  1 d; x, |" _: w- p; J8 [
    [2,3]- o9 e6 T# }6 Q5 I" S8 e
    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-10-24 02:24 , Processed in 0.538493 second(s), 55 queries .

    回顶部