QQ登录

只需要一步,快速开始

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

Python中*和**运算

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

2

主题

1

听众

4

积分

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

    [LV.1]初来乍到

    网络挑战赛参赛者

    跳转到指定楼层
    1#
    发表于 2020-4-15 11:15 手机频道 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。
    ' P* R! \, r3 j8 \( F( v& F* V% F, e4 K1 S2 x3 ~5 _
    1. 算数运算
    ( E5 Z& h, c$ l# L* K2 b% V# f
    ( S# d8 [5 D; S+ s*  代表乘法
    # ]7 D$ W' I1 ^
    7 W5 u0 ^* J( D** 代表乘方
    7 \, R- p9 _  Q* v$ T& b8 v6 M3 w* ~. G0 {, J" {: o
    >>> 2 * 54 \) w# D! K' i4 m0 Q5 ?8 ^+ F
    101 k& _) @! [8 ]1 N* m4 }4 m
    >>> 2 ** 5& c: t. E3 e$ i: }# v% Z( S3 ^
    326 f7 v( u/ }2 W# ?8 K
    2. 函数形参$ P. P) d8 i6 t: {! P* s
    9 b" Z  [8 U8 [
    *args 和 **kwargs 主要用于函数定义。8 a- N7 t. R/ R" k, B- ?
    , l9 h& X% O( H# n: ^  Y# E
    你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。  *(星号) 才是必须的. 你也可以写成 *ar  和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。
    / @% r4 T. ?" |. {; U: s( {1 D0 I# ^' v  O8 q) I
    python函数传递参数的方式有两种:
    ' a1 E5 s* W2 U7 `; c2 c/ T  q; z6 Y5 ]# G
    位置参数(positional argument)5 u6 [+ H- j. X5 I4 t2 j
    关键词参数(keyword argument)9 U! E! s/ v# D9 z( C
    *args 与 **kwargs 的区别,两者都是 python 中的可变参数:, v! R/ d: |1 P2 b7 a

    - j2 D/ E$ r/ S1 J( T*args 表示任何多个无名参数,它本质是一个 tuple3 B& ]  A1 u7 A' [  H: k3 g- V
    **kwargs 表示关键字参数,它本质上是一个 dict4 k: }; y+ F- x7 }
    如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。+ }) D- }, j& S( P; {

    ; w+ q9 i$ w, c5 l( ?- F1 V>>> def fun(*args, **kwargs):
    9 L, T% ]8 J4 X...     print('args=', args)
    " P1 e) x5 x1 t% ]! x7 k' F3 P  a7 \...     print('kwargs=', kwargs)8 I  H: `& M' m+ K
    ... ' X2 `" S) Q( J+ o8 x% n+ V) T
    >>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')- E' }4 s; R5 u9 Q- d2 m4 }  M$ D
    args= (1, 2, 3, 4)
    # t4 h( {4 d/ C% M% x% K; C0 P8 Rkwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}3 F& }3 W% V6 n
    使用 *args
    + c1 {1 k4 A* w5 K, h
    2 y7 ]1 c: F% p>>> def fun(name, *args):. h: l$ @, F/ D. a
    ...     print('你好:', name)
    : F4 Q: Y5 A$ S* q6 E5 L...     for i in args:
    4 G6 s0 c7 H; {1 r& A4 ^+ t...         print("你的宠物有:", i)
    ; ?# u$ I4 o5 }1 ~/ O0 B: k...
    0 v& E0 }8 n3 `, V, Q>>> fun("Geek", "dog", "cat")2 h* J1 _1 Q. s! {
    你好: Geek
    7 X$ W" Y2 [" u7 A你的宠物有: dog
    + J, o/ _7 x0 D, n+ l- K1 d$ X9 F+ c你的宠物有: cat/ s" _$ ]+ y/ u8 y: v+ D7 r
    使用 **kwargs
    ! P# X2 p% Z* a
    0 f/ K& \1 F  G  a>>> def fun(**kwargs):# V' O3 \3 g4 [( u
    ...     for key, value in kwargs.items():
    4 D3 _$ K. @' p& G9 I! [: k...         print("{0} 喜欢 {1}".format(key, value))5 W6 X& ?/ d4 ~$ X
    ...
    # G( V9 b. e' i>>> fun(Geek="cat", cat="box")
    + k$ h6 v  ~: s, SGeek 喜欢 cat) m" h  [0 m% S: S+ \: x
    cat 喜欢 box: r/ Q5 E1 q0 R
    3. 函数实参
      d& x% i! y2 b$ _1 b3 w
    $ w6 C! {2 p- E; h' a; k: k5 i如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:
    . n0 [$ w* }- ]$ A9 L% a& M; D+ n9 ~: s9 G
    >>> def fun(data1, data2, data3):
    ; }# v" y/ A+ `+ W...     print("data1: ", data1)
    3 G4 M. N9 a- @6 h9 k) K...     print("data2: ", data2)
    # l" D+ o* r6 o, G. h...     print("data3: ", data3)+ W6 D! e1 A6 f! R" _
    ...
    : G7 V8 Q, z' G>>> args = ("one", 2, 3)
    ( [  j& U9 U5 s' m2 V7 H>>> fun(*args)
    % }0 |, |: n2 W( v' N( I) adata1:  one
    + O. {0 r9 s% ]: ~+ l5 L/ mdata2:  2
    9 `9 f) A7 b  s" vdata3:  3- M: x5 e4 A, n+ c4 f
    >>> kwargs = {"data3": "one", "data2": 2, "data1": 3}( z* ~1 C1 B+ A' l4 U
    >>> fun(**kwargs)
    2 L9 }8 d& _' Y6 udata1:  39 N3 v) F4 i* [; M
    data2:  2; \/ U/ |( _* b
    data3:  one
    8 |0 w# c- w3 g4. 序列解包
    ; A# p: ^5 d- A/ l$ r
    + G6 o4 ]7 B* W! v3 a序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。
    $ B$ m3 J* w6 H$ t' W7 ?/ v- y2 H9 O- R( d8 N; }' w- t! J
    >>> a, b, *c = 0, 1, 2, 3  
    0 w' Z2 I6 j& I( W( |9 Q. [* u>>> a  6 _( R& c: q+ w. U3 U
    0  ( a9 {& B* V% y% }0 Y( A+ q( ]$ j, j
    >>> b  
    & y; S- {; C6 K& W8 i# R1  8 ~: i1 D/ U6 c2 V
    >>> c  
      w: ^0 n8 ]" t8 Z  U3 g1 ^2 Y[2,3]2 {% L3 y( `. s* q& j0 [  {
    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-23 07:15 , Processed in 0.304727 second(s), 55 queries .

    回顶部